2. 算子开发环境搭建
说实话,环境搭建这件事,看着简单,但坑是真不少。我见过太多人卡在第一步——装好了却跑不起来,最后发现是环境变量配错了。这一章,我就带你一步步把CANN开发套件装好、配好、验证通过。跟着我的节奏来,别跳步。
2.1 安装CANN开发套件
先说说版本。我习惯用 CANN 7.0.0 及以上,因为对自定义算子更友好。你可以在昇腾社区下载 昇腾AI驱动 和 CANN开发套件。注意,驱动和CANN版本要匹配,不然会报一些奇奇怪怪的错。
安装步骤大致如下(以root或sudo执行):
- 安装昇腾AI驱动:
./Ascend310-driver-xxx.run --full - 安装CANN开发套件:
./Ascend-cann-toolkit_xxx.run --install - 默认安装路径在
/usr/local/Ascend或/home/HwHiAiUser/Ascend
我个人建议装在默认路径,后面环境变量省心很多。如果你非要改路径,记得把后续所有 ASCEND_HOME 指向正确位置。
2.2 配置环境变量
装完只是第一步。环境变量配不对,编译器根本找不到头文件和库。你想想看,你写了个自定义算子,一编译说找不到 register.h,多扫兴。
我一般会在 ~/.bashrc 里加一段,或者每次开终端先 source 官方提供的 set_env.sh:
# 推荐方式:直接 source 官方脚本
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 或者手动设置核心变量(以CANN 7.0为例)
export ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/latest
export PATH=$ASCEND_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ASCEND_HOME/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=$ASCEND_HOME/python/site-packages:$PYTHONPATH
export ASCEND_DEVICE_ID=0
source set_env.sh 写到 ~/.bashrc 末尾,这样每次登录自动加载。但如果你同时有多个CANN版本,建议手动source,避免冲突。
另外,ASCEND_DEVICE_ID 指定默认的NPU设备号。如果你只有一张卡,设成0就行。我在项目里遇到过有人忘了设这个,结果算子一直跑在device -1上,报错说找不到设备。
2.3 验证开发环境
环境配好没?跑两个命令就知道了。我个人最喜欢用 msprof 和 npu-smi 来快速验证。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| 驱动 & 设备 | npu-smi info | 显示NPU芯片信息,温度、内存等 |
| CANN工具链 | msprof --help | 输出msprof帮助信息 |
| 编译器 | which ccec | 显示ccec路径(如 /usr/local/Ascend/.../bin/ccec) |
| Python包 | python3 -c "import te; print(te.__version__)" | 打印TBE版本号 |
如果 npu-smi 找不到,多半是驱动没装好或者PATH没加。我记得有一次帮同事排查,他漏了 export PATH=/usr/local/Ascend/driver/tools:$PATH,加上就好了。
$ASCEND_HOME/samples/operator 下,挑一个 Add 算子,执行 bash run.sh。如果编译通过且跑出正确结果,恭喜你,环境稳了。
嗯,这里要注意:第一次编译可能会下载一些依赖(比如python的decorator库),确保你的网络能连外网,或者提前配好pip国内源。
2.4 常见问题与避坑
- libascend_hal.so 找不到 —— 检查
LD_LIBRARY_PATH是否包含$ASCEND_HOME/lib64。 - Python import te 报错 —— 大概率
PYTHONPATH没指向python/site-packages。 - ccec: 未找到命令 —— 确认
PATH里有没有$ASCEND_HOME/bin。 - npu-smi 显示 offline —— 驱动没加载,试试
npu-smi set -t 0 -d 0或者重启主机。
我曾经在一个集群上折腾了整整半天,最后发现是用户权限不够——ls /dev/davinci* 没有读写权限。加上 chmod 666 /dev/davinci* 就解决了。所以,权限问题也别忘了检查。