在openEuler(昇腾平台)上基于Conda安装CANN和PyTorch的完整过程
本文总结了在Conda环境中配置Ascend NPU环境的完整过程。首先通过创建activate.d文件夹实现自动加载set_env.sh脚本,解决了每次激活环境都需要手动设置的问题。随后详细记录了安装PyTorch 2.6.0和torch-npu过程中遇到的依赖缺失问题,包括numpy、decorator、scipy、attrs、psutil等模块的逐一安装过程。最终成功运行了简单的矩阵运算测试
在上一篇博客的基础上再总结一下:https://blog.csdn.net/qysh123/article/details/159352996
虽然上一篇博客能够按照网页成功输出了,但是我发现并不能正确运行一些小的Example,所以这里再总结一下。
前面的步骤都是一样的。我新建了一个Conda环境TorchTest,然后运行:
source /opt/miniconda/envs/TorchTest/Ascend/cann/set_env.sh
python3 -c "import acl;print(acl.get_soc_name())"
也可以看到输出:
Ascend310P3
但实际上这样有个问题,难道每次激活环境的时候都要手动设置环境脚本?如果不设置就会报错:
python3 -c "import acl;print(acl.get_soc_name())"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'acl'
这也是很显而易见的。所以首先每次激活Conda环境的时候需要自动运行set_env.sh。这其实也很简单:
首先在conda环境的对应目录下建立activate.d文件夹:
mkdir -p /opt/miniconda/envs/TorchTest/etc/conda/activate.d
然后在这个目录下新建一个bash文件:
nano /opt/miniconda/envs/TorchTest/etc/conda/activate.d/ascend_set_env.sh
然后把source命令写到这个bash文件里(nano打开后正常编辑,ctrl+o,再按回车保存,然后ctrl+x退出编辑)
source /opt/miniconda/envs/TorchTest/Ascend/cann/set_env.sh
然后设置脚本的执行权限(否则conda激活的时候并不会自动运行)
chmod +x /opt/miniconda/envs/TorchTest/etc/conda/activate.d/ascend_set_env.sh
然后再重新激活,就可以看到可以正常输出了。到这里才算在Conda环境里配置好了CANN。
感觉这个过程和我当前配置Conda+CUDA的环境很像,参考我6年前的博客:https://blog.csdn.net/qysh123/article/details/108163188,但Nvidia环境下以后很久不需要这么配置,参考:https://blog.csdn.net/qysh123/article/details/142063926
---------------------------------------------------------------------------------------
下面安装一下PyTorch,这里吐槽一下官方的repo:https://github.com/Ascend/PyTorch,这里的例子还是torch 2.1.0呢,都不知道更新的吗?看到docs更新了:https://ascend.github.io/docs/sources/pytorch/install.html
选择2.6.0,pip安装,参考页面上的流程,首先安装Torch:
pip3 install torch==2.6.0
(如果速度慢的话,需要选择源或者用代理)
安装好之后,按照GitHub的repo,需要先安装下面这两个(但是docs里面并没有说,呵呵,自己都做不到统一的吗?)
pip3 install pyyaml
pip3 install setuptools
之后再安装torch-npu:
pip3 install torch-npu==2.6.0
按照docs里面的说法,安装到这里就可以了,接下来可以安装验证程序:
import torch
import torch_npu
x = torch.randn(2, 2).npu()
y = torch.randn(2, 2).npu()
z = x.mm(y)
print(z)
但是实际上报错:
/opt/miniconda/envs/TorchTest/lib/python3.10/site-packages/torch/_subclasses/functional_tensor.py:275: UserWarning: Failed to initialize NumPy: No module named 'numpy' (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:81.)
这个嘛,这个错有点让人无语啊,感觉Nvidia平台下装torch的时候基本都装好了。那就装一下numpy:
pip3 install numpy
再运行一下,还是报错:
[PID: 341531] 2026-03-25-18:56:20.567.980 Environment_Error_Import_Python_Module_Failed(EC0010): Failed to import Python module ModuleNotFoundError: No module named 'decorator'..
呵呵呵,为啥安装脚本都不一次设置好,他们自己都不测试的吗?
pip3 install decorator
再运行一下,还是报错:
[PID: 341618] 2026-03-25-18:59:12.901.872 Environment_Error_Import_Python_Module_Failed(EC0010): Failed to import Python module ModuleNotFoundError: No module named 'scipy'..
我真的太无语了,继续装:
pip3 install scipy
再运行一下:
[PID: 341719] 2026-03-25-19:01:23.234.991 Environment_Error_Import_Python_Module_Failed(EC0010): Failed to import Python module ModuleNotFoundError: No module named 'attr'..
呵呵,继续装:
pip3 install attrs
再运行一下:
[PID: 341804] 2026-03-25-19:04:08.127.592 Environment_Error_Import_Python_Module_Failed(EC0010): Failed to import Python module ModuleNotFoundError: No module named 'psutil'..
继续装:
pip3 install psutil
然后终于可以运行了:
.start compile Ascend C operator IsFinite. kernel name is te_isfinite_78c81b6cbfa3d15bbfec686a57f201470ba92a6f2a7d582f50232b164e918710
[W325 19:06:51.505313780 compiler_depend.ts:164] Warning: Warning: Device do not support double dtype now, dtype cast repalce with float. (function operator())
.tensor([[ 0.0037, -0.0555],
[-0.0960, -0.5503]], device='npu:0')
就是可能有编译的过程,比较慢。
再运行一个其他朋友给的例子:
# 验证关键组件版本
import sys, torch, torch_npu
print(f"Python版本: {sys.version}")
print(f"PyTorch版本: {torch.__version__}")
print(f"torch_npu版本: {torch_npu.__version__}")
print(f"可用NPU数量: {torch.npu.device_count()}")
print(f"当前设备: {torch.npu.get_device_name(0)}")
# 验证计算能力
device = torch.device("npu:0")
test_tensor = torch.randn(1024, 1024).npu()
result = test_tensor @ test_tensor.T
print("NPU计算测试通过,结果形状:", result.shape)
可以得到下面的结果:
Python版本: 3.10.20 (main, Mar 11 2026, 17:41:27) [GCC 14.3.0]
PyTorch版本: 2.6.0+cpu
torch_npu版本: 2.6.0
可用NPU数量: 8
当前设备: Ascend310P3
NPU计算测试通过,结果形状: torch.Size([1024, 1024])
感觉还是有点不明白的,为啥PyTorch是cpu版本呢?不过总算是可以跑一些简单的例子了。就简单总结到这里。
更多推荐



所有评论(0)