昇腾环境搭建

1. 环境概览

项目 版本/型号
服务器 Ubuntu 22.04.4 LTS (aarch64)
NPU 型号 Ascend 910B3 × 8
CANN 版本 8.0.1 (runtime 7.6.0.2.220)
Python 3.10.12
PyTorch 2.1.0
torch_npu 2.1.0.post13
虚拟环境 /home/user/npu-learning/venv

2. 安装步骤

2.1 创建虚拟环境

# 安装 venv 支持(仅首次)
apt install -y python3.10-venv

# 创建虚拟环境
python3 -m venv /home/user/npu-learning/venv

2.2 加载 CANN 环境并安装依赖

关键顺序:必须先 source CANN 环境变量,再激活 venv。CANN 的 set_env.sh 会设置 LD_LIBRARY_PATHPYTHONPATH 等,这些是 torch_npu 正常工作的前提。

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /home/user/npu-learning/venv/bin/activate

# ARM 架构 (aarch64) — 不需要额外 index URL
pip install torch==2.1.0
pip install pyyaml setuptools 'numpy<2'
pip install torch-npu==2.1.0.post13

版本兼容性:torch_npu 的版本必须与 CANN 版本和 PyTorch 版本同时匹配。CANN 8.0.1 对应 torch 2.1.x + torch_npu 2.1.0.postX 系列。numpy 需要 <2 以兼容 PyTorch 2.1.0。

2.3 指定 NPU 设备

通过环境变量 ASCEND_RT_VISIBLE_DEVICES 控制可见设备(类似 CUDA 的 CUDA_VISIBLE_DEVICES):

ASCEND_RT_VISIBLE_DEVICES=7 python3 your_script.py

3. CANN TBE 依赖

CANN 的 Tensor Boost Engine (TBE) 依赖于以下 Python 包,在虚拟环境中必须完整安装:

pip install attrs cloudpickle decorator ml-dtypes psutil scipy tornado

缺少任何一个都会导致 GE (Graph Engine) 初始化失败:

ModuleNotFoundError: No module named 'attr'
GELib::InnerInitialize failed
GEInitialize failed

这是因为即使使用 PyTorch NPU,底层 CANN 的图编译器仍需要 TBE 的 Python 环境才能将计算图编译为 Ascend 可执行指令。

4. CANN 环境变量加载顺序

必须先 source set_env.sh 再激活 venv。原因是 CANN 脚本将 HCCL、AscendCL 等库路径注入 LD_LIBRARY_PATH,torch_npu 在 import 时需要解析 libhccl.so 等动态库。如果顺序颠倒,venv 激活不会自动补上这些路径。

5. 环境验证

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /home/user/npu-learning/venv/bin/activate
ASCEND_RT_VISIBLE_DEVICES=7 python3 -c "
import torch
import torch_npu
print(f'PyTorch {torch.__version__}, torch_npu {torch_npu.__version__}')
print(f'NPU available: {torch.npu.is_available()}')
print(f'Device: {torch.npu.get_device_name(0)}')
"

预期输出:NPU available: TrueDevice: Ascend910B3

6. 参考链接