东方智慧AI 算力
AI算力 · 部署指南

B 层部署指南 · L1基础软件CANN

2026-10-05

一页读懂这一层:让程序找得到算子、找得到库。 这一层装的是 CANN —— 它不是一个软件,是一组包。 装完的标准:echo $ASCEND_HOME_PATH 有值(环境变量生效了才算数)。

本指南是 B 层 5 课的浓缩版(B1 CANN 是什么 / B2 算子库 / B3 版本与共存 / B4 七种装法 / B5 装进容器), 只保留"装什么、干什么用、怎么装、怎么验"。


一、这一层的职能

项 内容
层号 L1(基础软件层)
一句话职责 承上启下 —— 向上接 AI 框架,向下接芯片,中间还提供写程序的接口。
CANN 全称 Compute Architecture for Neural Networks(架构,不是库、不是驱动)
它装的是 算子库、编译器、运行时、通信库 —— 一组包
装完的判据 echo $ASCEND_HOME_PATH 有值
拿掉它会怎样 看得见卡,但程序找不到算子库、找不到动态库(报 check driver compatibility failed、Failed to load the libdcmi.so 之类)
上电后的顺序 必须先过 L0(npu-smi info 有表),再动 L1

二、这一层装什么(软件清单)

⭐ CANN 不是一个包,是一组 —— 这解释了一个常见困惑: 为什么文档里一会儿说"装 CANN"、一会儿说"装 Toolkit"、一会儿又说"装 ops 包"?

因为"CANN"是这一组东西的总名。

包 官方名称 干什么
Toolkit 开发套件包(Toolkit) 主包:编译、执行、算子库路径都在它名下
Kernels / ops 算子包 算子库本体(ASCEND_OPP_PATH 指向它的根目录)
NNAL 神经网络加速库 一组加速库,其中包含 ↓
↳ ATB ATB 加速库 一个加速库(有独立的 set_env.sh 与专属环境变量)
↳ SiP SiP 加速库 另一个加速库(同样有独立 set_env.sh)

⚠️ 口径说明:上表结构出自官方安装与环境变量文档的实际分组。 各版本包的确切拆分以《版本说明》和下载页为准。

⭐ 算子包里到底有什么(官方清单)

官方原文:CANN 算子包集成一系列库文件,包括算子基础框架、 算子库(包含 math、nn、cv、transformer 和 ras)、TBE 算子、 HCCL 集合通信库、HIXL 单边通信库和 DVPP 库, 具体文件包括单算子 API 执行(如 aclnn 类 API)动态库/静态库文件、 算子源码以及 kernel 二进制文件。

算子库的五个域 大概是干什么的
math 数学类算子
nn 神经网络类算子(最常见的那批)
cv 计算机视觉类算子
transformer Transformer 结构专用算子(大模型重度依赖)
ras 随机数与采样类
包里的三类文件 谁在用
aclnn 类 API 的动态库/静态库 框架层(PyTorch 等)调用
算子源码 想看实现、改算子的开发者
kernel 二进制 真正下发到芯片执行的那份

⭐ 这条对排查很有用:"找不到算子" 具体就是 —— 框架按名字去查 kernel 二进制,没查到(或查到的不匹配当前芯片)。


三、每个东西干什么用(一句话)

东西 一句话功能
Toolkit CANN 的主包,装了它才算"装了 CANN"
ops 包(Kernels) 算子库本体 —— 大模型跑的每个算子都从这里找
NNAL / ATB / SiP 加速库,各有各的 set_env.sh,要单独 source
set_env.sh 环境变量的"总开关" —— 不 source,CANN 装了也用不了
ASCEND_OPP_PATH 算子库根目录 —— "找不到算子"排查的第一站
ASCEND_HOME_PATH CANN 装在哪的答案(官方明说同 ASCEND_TOOLKIT_HOME)
LD_LIBRARY_PATH / PYTHONPATH 动态库 / Python 包找不到时的第一站

四、怎么装(安装方法)

4.1 ⭐ 先选装法:官方有 7 种(InstallType)

# 官方 InstallType 中文 装什么
1 netyum 在线安装(Yum) 驱动、Toolkit、ops
2 netapt 在线安装(Apt-get) 驱动、Toolkit、ops
3 netconda 在线安装(Conda) Toolkit、ops(不含驱动)
4 netpip 在线安装(Pip) 见官方页面
5 local 离线安装(独立包) 驱动与 Toolkit 分开的包
6 localpack 离线安装(合一包) 驱动与 Toolkit 合并的包
7 netdocker 在线安装(Docker 镜像) 容器镜像形态

⭐ 按操作系统选:

操作系统 支持的 InstallType
openEuler / Kylin / UOS / BCLinux / CTyunOS / CULinux / AliOS … netyum、netconda、netpip、local、localpack、netdocker
Ubuntu / veLinux / Debian … netapt、netconda、netpip、local、localpack、netdocker

⚠️ 两个要点: ① Conda 装法不含驱动 —— 别指望它把驱动也装上; ② --force 是"跳过检测",不是"更强的安装" —— 它不会解决不兼容。

4.2 ⭐⭐ 最容易装错的一步:ops 包按产品型号分发

包名里带着"这是给谁的":

包名前缀 对应产品
950 Ascend 950 系列
A3 Atlas A3 系列
910b Atlas A2 系列 ⚠️

⚠️ 那个坑:官方表里 Atlas A2 系列 对应的 ops 包名是 910b —— 如果你凭直觉"Atlas A2 应该找 A2 的包",就会下错。

正确做法:照官方表的行来选,不要靠包名猜。

而且每个型号下还分两种架构:aarch(aarch64)与 x86_64。

⭐ 这直接解释了"找不到算子"的头号原因:

给 A2 的机器装了 950-ops 或 A3-ops,算子库里的 kernel 二进制和目标芯片对不上 → 表现成"找不到算子"。

4.3 安装命令(三条)

命令 chmod u+x <安装包>.run

含义:给安装包加"属主可执行"权限 拆解:chmod(改权限)+ u(属主)+ +x(加执行) 用法:chmod u+x Ascend-cann-toolkit_<版本>_linux-aarch64.run 期望:无输出(成功即沉默) 不过会怎样:不加就报 Permission denied

命令 ./<安装包>.run --check

含义:只校验不安装 —— 查包完整性与一致性 用法:./Ascend-cann-toolkit_<版本>_linux-aarch64.run --check 期望:Verifying archive integrity... 100% SHA256 checksums are OK. All good. 不过会怎样:校验不过 → 重新获取安装包,不要硬装

命令 ./<安装包>.run --install

含义:执行安装 拆解:--install(安装)/可选 --install-path=<路径>(须以 / 或 ~ 开头)    跳许可交互:在命令前加 echo y | 用法:./Ascend-cann-toolkit_<版本>_linux-aarch64.run --install 期望:出现 Do you accept the LICENSE...? [Y/N] → 输 Y → 最后提示安装成功 不过会怎样:输入非 Y → 停止安装并退出 ⚠️ 官方明确:不建议安装在 /tmp 路径下

4.4 装完加载环境(不 source 等于没装)

命令 source /usr/local/Ascend/cann/set_env.sh

含义:加载 CANN 环境变量(在当前终端生效) 拆解:source 在当前 shell 执行,不新开进程 —— 所以变量留得住 用法:root 与非 root 路径不同(见下表) 期望:无输出;随后 echo $ASCEND_HOME_PATH 有值 不过会怎样:报 No such file or directory → 路径不对,用 find 找

三套需要 source 的脚本(官方口径):

包 root 非 root
CANN / Toolkit /usr/local/Ascend/cann/set_env.sh ${HOME}/Ascend/cann/set_env.sh
NNAL 的 ATB /usr/local/Ascend/nnal/atb/set_env.sh ${HOME}/Ascend/nnal/atb/set_env.sh
NNAL 的 SiP /usr/local/Ascend/nnal/asdsip/set_env.sh ${HOME}/Ascend/nnal/asdsip/set_env.sh

从两组路径能读出三件事: 1. 根目录不同:root 用系统级 /usr/local/Ascend/,非 root 用 ${HOME}/Ascend/; 2. 子目录结构一致 —— 认识一个,另一个就认识了; 3. cann 这个目录名是个入口 —— 官方在讲升级时提到 「CANN 升级时,默认会升级安装目录下 cann 软链接指向的版本」。

⚠️ 环境变量是"进程级"的:新开一个终端就没了 → 要持久化就写进 ~/.bashrc,并 source ~/.bashrc。

4.5 装进容器(如果这条路上用容器)

⭐ 根本差别:驱动在宿主机,不在容器里

裸机 容器
驱动 / 固件 装在这台机器上 在宿主机上(容器里不装)
CANN 装在这台机器上 容器里装(或镜像里已带)
卡 本来就是这台机器的 靠 --device 从宿主机"交"进来

官方原文印证(MindIE 镜像安装的前提条件):

宿主机已经安装过 NPU 驱动和固件。

→ 容器方案默认驱动在宿主机上备好。

容器要"看见"卡,必须挂这几个设备节点:

设备路径 作用
/dev/davinci0、/dev/davinci1 … 每一张 AI 处理器(编号从 0 开始)
/dev/davinci_manager 设备管理接口
/dev/hisi_hdc 主机与设备间的通信通道
/dev/devmm_svm 内存管理相关

⭐ 两个容器专属要点: 1. --device 的权限必须是 rwm,不能用 rw(官方有具体说明); 2. 容器里要有 npu-smi,得把宿主机那份挂进来 —— 因为 npu-smi 是随驱动装在宿主机的 /usr/local/sbin/ 和 /usr/local/bin/, 容器里没有驱动,自然也没有 npu-smi。


五、怎么验证装对了(验证方法)

三步确认

命令 echo $ASCEND_HOME_PATH

含义:这一层的头号判据 —— CANN 环境是否生效 用法:echo "ASCEND_HOME_PATH=[$ASCEND_HOME_PATH]" 期望:打印出安装路径(如 /usr/local/Ascend/cann) 不过会怎样:打印空行 → 环境变量没加载(回 4.4 去 source) ⭐ 记法:装了 CANN ≠ CANN 能用 —— 变量没加载等于没用

命令 echo $ASCEND_OPP_PATH

含义:看算子库根目录指向哪里 期望:打印算子库路径 不过会怎样:为空 → "找不到算子"的高概率原因

命令 npu-smi info -t board -i <设备号>

含义:查驱动/固件版本,用来和 CANN 版本对配套 期望:Software Version(驱动)与 Firmware Version(固件)有值 不过会怎样:字段为空 → 回 A 层

⭐ 验收清单(四条全过 = 这一层完工)

# 判据 命令 通过标准
① CANN 装了 ls <安装根>/cann 目录存在
② 环境变量生效 echo $ASCEND_HOME_PATH 有值
③ 算子库就位 echo $ASCEND_OPP_PATH 有值
④ 版本配套 npu-smi info -t board -i <ID> 对比官方《版本说明》 驱动 / 固件 / CANN 三者配套

⭐ 第 ④ 条的口径(官方原话):

「驱动、固件和 CANN 软件配套场景下,可单独升级 CANN 软件。」

读出来两件事: - 三者必须配套 —— 不是各自最新就最好; - 配套的前提下,可以只升 CANN,不必连驱动一起升。

去这里查配套:

要查什么 官方入口
版本配套关系 官方《版本说明》
硬件与操作系统兼容性 官方兼容性查询助手:https://www.hiascend.com/hardware/compatibility
固件与驱动下载 https://www.hiascend.com/hardware/firmware-drivers

六、三个最容易踩的坑

# 坑 症状 怎么办
1 ops 包装错型号 "找不到算子" 照官方表的行选包,别靠包名猜(A2 对应的是 910b)
2 装完没 source "import 失败 / 找不到库" —— 容易误判成"没装" echo $ASCEND_HOME_PATH 为空 → 去 source
3 容器里以为要装驱动 到处找不到驱动 / 装不上 驱动在宿主机,容器只要 --device 拿卡

⚠️ 还有一条"看起来像故障但不是"的: 容器里 /etc/Ascend/ascend_cann_install.info 看不到 —— 不代表 CANN 没装。 判据要用"命令能不能跑 / 变量有没有值",不用文件存在性判。

版本升级(B3 的三条硬约束)

约束 说明
--upgrade 是单向的 只能升,降级要卸载重装
合一包不支持 --upgrade 用合一包就只能卸装
升级默认升 cann 软链接指向的版本 想换版本,就是换这个软链接的指向

七、这一层和其他层的关系

↑ L2 框架(PyTorch + TorchNPU)   ← 靠 L1 提供的算子库和接口
│
│  ★ 你在这一层         装:Toolkit + ops(+ NNAL)
│                       验:echo $ASCEND_HOME_PATH 有值
│
↓ L0 硬件与驱动(HDK)              ← L1 依赖它;L0 不对,L1 装了也白装
关系 说明
它依赖谁 L0 —— npu-smi info 有表才轮到 L1
谁依赖它 L2 / L3 / L4 全部
上一层怎么验 一行验四层:python3 -c "import torch; import torch_npu; a=torch.randn(3,4).npu(); print(a+a)"

附 · 命令速查(复制即用)

# 选装法(在线)
#   Ubuntu/Debian 系 → netapt ;openEuler/麒麟等 → netyum
#   不想装驱动(容器里)→ netconda

# 装(以离线包为例)
chmod u+x <安装包>.run
./<安装包>.run --check            # 校验
./<安装包>.run --install          # 安装(不推荐装到 /tmp)

# 加载环境(root / 非 root 路径不同)
source /usr/local/Ascend/cann/set_env.sh        # root
source ${HOME}/Ascend/cann/set_env.sh           # 非 root

# 验
echo "ASCEND_HOME_PATH=[$ASCEND_HOME_PATH]"     # 有值 = 生效
echo "ASCEND_OPP_PATH=[$ASCEND_OPP_PATH]"       # 算子库根
ls /usr/local/Ascend/cann                        # 装在哪
npu-smi info -t board -i <设备号>                 # 驱动/固件版本

# 找 set_env.sh(路径不确定时)
find / -maxdepth 6 -name set_env.sh -path "*Ascend*" 2>/dev/null

附 · 本层的"包从哪下"

要下什么 地址
CANN(Toolkit / Kernels) https://www.hiascend.com/cann/download
兼容性查询助手 https://www.hiascend.com/hardware/compatibility
版本配套关系 官方《版本说明》
包名规律 Toolkit:Ascend-cann-toolkit_{版本}_linux-{架构}.run
Kernels/ops:Ascend-cann-kernels-{型号}_{版本}_linux-{架构}.run

⚠️ 下之前先确认三件事: 1. 架构(uname -m)—— aarch 还是 x86_64,下错装不上 2. 产品型号 —— 决定 ops 包选哪个(950 / A3 / 910b 对应 Atlas A2) 3. 驱动版本 —— 先查驱动,再按配套表选 CANN(顺序不能反)


本层浓缩自:昇腾部署课件_B1_CANN是什么 / _B2_算子库与算子包 / _B3_版本与多版本共存 / _B4_七种安装方式 / _B5_装进容器 上一层:A 层 · L0 硬件与环境 下一层:C 层 · L2 框架

选修 · 昇腾 AI 部署实操 本机读完 0/51
选修 C · 昇腾 AI 部署实操
从零把昇腾 AI 部署学一遍:先看懂分几层,再逐层装起来,最后出问题能自己定位到哪一层。不需要先有卡就能开始。
看完整学习路径(6 站 + 3 门选修) · 进度只存在你这台设备的浏览器里,不用登录
辽ICP备2026019944号-1