华为 算子开发中 cann 环境变量 有多个,怎么设置
·
# 1. 加载 CANN 环境
source /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
# /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash -> ../../set_env.sh*
# /home/developer/Ascend/cann-8.5.2/set_env.sh
# /home/developer/Ascend/nnal/asdsip/set_env.sh
# /home/developer/Ascend/nnal/atb/set_env.sh
# /home/developer/Ascend/ascend-toolkit/set_env.sh
到底 启用哪个呢
cann 环境变量 各脚本用途区分 + 优先级选用方案
一、每个文件定位
1. /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
标准主推入口,算子开发/TBE/DSL/ATC编译首选
latest是软链接,指向当前默认安装的CANN版本(你这里实际链接到cann-8.5.2)- 会自动配置:
ASCEND_TOOLKIT_PATH、编译器、头文件、库路径、atc、ascend-clang、simulator仿真环境、python环境 - 官方文档、CANN算子竞赛、本地TBE算子开发统一推荐用这个
source /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
2. /home/developer/Ascend/cann-8.5.2/set_env.sh
固定版本原始环境脚本
- 等价于上面
latest软链接指向的底层文件,功能完全一致 - 适合多CANN版本共存、需要锁定8.5.2不随latest切换时使用
3. /home/developer/Ascend/ascend-toolkit/set_env.sh
老版本遗留顶层脚本,不推荐优先使用
很多新版安装包已经弱化该入口,变量完整性不如 bin/setenv.bash
4. nnal/asdsip/set_env.sh / nnal/atb/set_env.sh
上层业务推理框架配套环境,算子开发不用
- ATB:Ascend Tensor Block,高层推理加速库
- ASDSIP:芯片仿真上层业务接口
只做模型推理、ATB算子调用时才需要额外source;纯TBE/DSL算子开发完全不需要加载这两个,加载反而污染环境。
二、分场景选用建议
场景1:纯TBE/DSL算子开发、CANN算子竞赛、atc模型编译、单算子仿真
✅ 首选
source /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
场景2:机器装了多个CANN版本,固定锁定8.5.2版本,不想被latest切换影响
source /home/developer/Ascend/cann-8.5.2/set_env.sh
场景3:做ATB高层算子、ASDSIP芯片仿真业务流程(极少算子开发场景)
先加载基础CANN,再追加业务库:
source /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
source /home/developer/Ascend/nnal/atb/set_env.sh
# 如需asdsip再追加
source /home/developer/Ascend/nnal/asdsip/set_env.sh
场景4:禁止使用
不要直接 source /home/developer/Ascend/ascend-toolkit/set_env.sh,环境变量不全,容易出现头文件/链接库找不到报错。
三、验证环境是否加载成功
source后执行校验命令,正常输出版本号即生效:
ascend-clang --version
atc --version
echo $ASCEND_TOOLKIT_PATH
问题根源
执行 source 后环境变量 ASCEND_TOOLKIT_PATH 为空、ascend-clang 找不到、atc --version 报错,说明 setenv.bash 加载失败,有几种常见原因和修复方案。
1. 先确认软链接是否正常
先检查 latest 指向是否存在:
ls -l /home/developer/Ascend/ascend-toolkit/latest
ls /home/developer/Ascend/cann-8.5.2/
正常输出应看到软链接指向 cann-8.5.2,目录内存在 bin/setenv.bash。
2. 改用固定版本脚本加载(绕过latest软链接问题)
优先直接加载 8.5.2 原始 env,不要再用 latest:
source /home/developer/Ascend/cann-8.5.2/set_env.sh
加载完立刻校验:
echo $ASCEND_TOOLKIT_PATH
which ascend-clang
which atc
- 如果打印出路径,说明环境正常;
- 如果依旧为空,说明脚本本身损坏/权限不足。
3. 权限问题修复(脚本无执行/读取权限)
chmod +x /home/developer/Ascend/cann-8.5.2/set_env.sh
chmod +x /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
再重新 source。
4. 关于 atc 报错补充说明
CANN 8.5.2 的 atc 不支持 --version 参数,正确查看版本命令:
atc -h
# 或者查看toolkit版本文件
cat $ASCEND_TOOLKIT_PATH/version.info
5. 如果两种脚本加载后变量依旧为空
情况A:安装包缺失文件
进入目录确认脚本真实存在:
ls /home/developer/Ascend/cann-8.5.2/set_env.sh
ls /home/developer/Ascend/ascend-toolkit/latest/bin/setenv.bash
提示 No such file 代表安装残缺,需要重装 CANN 8.5.2。
情况B:shell 兼容性问题
你用 bash,脚本是 bash 脚本,不要用 sh 执行:
# 正确
source xxx/set_env.sh
# 错误(不要用)
sh xxx/set_env.sh
标准完整校验流程(复制执行)
# 加载固定版本
source /home/developer/Ascend/cann-8.5.2/set_env.sh
# 打印根路径
echo "ASCEND_TOOLKIT_PATH = $ASCEND_TOOLKIT_PATH"
# 查看编译器
which ascend-clang
# 查看ATC工具
which atc
# 查看版本文件
cat $ASCEND_TOOLKIT_PATH/version.info
补充:什么时候才加载 nnal/atb/asdsip
算子开发、TBE/DSL、单算子编译仿真完全不需要加载下面两个,反而会覆盖基础环境变量,先解决上面基础CANN环境问题即可:
# 纯算子开发不要执行这两行
# source /home/developer/Ascend/nnal/atb/set_env.sh
# source /home/developer/Ascend/nnal/asdsip/set_env.sh
更多推荐

所有评论(0)