【亲测】昇腾310P 计算栈 CANN 8.0.0 安装教程:零基础照做,10 张 NPU 卡全部跑通(含完整命令)

一句话说清本文:机器上只装了驱动,npu-smi 能看到卡、却转不了模型也跑不了推理?这篇教程带你把 CANN 8.0.0 计算栈一步步装上,让 10 张昇腾 310P 真正可用。

实测环境:Ubuntu 26.04 + 内核 7.0;10 × Ascend 310P(19e5:d100);驱动 23.0.0 + 固件 7.1.0.3.220 已装好;系统 Python 3.14 太新(CANN 只认 3.7~3.10),本文教你如何绕开

适合谁看:零基础也能照做。全文没有一句"你自己判断",每条命令都能直接复制粘贴,每一步都配了"为什么这么做"和"做完应该看到什么"。

读完你能拿到:CANN 8.0.0 装好、atc 可用、pyACL 能打开设备、ACL 看到 10 张卡;安装体积约 9.9 GB。

目录

阅读姿势:急着装好 → 直接看第 1 章(前置准备)→ 第 3 章(分步操作)→ 第 6 步(体检);安装报错 → 翻第 4 章(常见问题与避坑);想弄懂原理 → 看第 2 章(核心原理)。


第 0 章 读前必看(先花 3 分钟)

0.1 这份文档能帮你做到什么

一句话:把 10 张昇腾 310P 卡从"只能看、不能算",变成"能转换模型、能跑推理"。

做完之后,你手上会有两样能力:

能力对应工具用途
把模型"翻译"成卡能懂的文件atc例如把 xxx.onnx 转成 xxx.om
让程序在卡上跑起来pyACL用 Python 调用卡做计算

0.2 你需要准备什么

项目要求为什么
机器Ubuntu 26.04 + 内核 7.0,插好 10 张昇腾 310P本文命令与实测结果都基于这套环境
权限root(超级管理员)安装要往系统目录 /usr/local 写文件,普通用户没有这个权力
驱动/固件已装好,npu-smi info 能看到 10 张卡CANN 是"遥控器",没有驱动这个"信号线",遥控器也没用
磁盘/usr/local 所在分区至少 30 GB 空闲下载 4.2 GB + 临时解包约 4 GB + 安装后约 9.9 GB
网络能访问华为云 OBS(本文命令里已给直链)安装包要从 OBS 下载,不需要注册任何账号

0.3 名词大白话对照表(看不懂就翻这里)

名词大白话解释
昇腾(Ascend)华为的 AI 计算芯片品牌,相当于"中国的 GPU"
310P昇腾芯片的一个型号,是只做推理、不做训练的卡
驱动(driver)让操作系统"认得"这块卡的软件,相当于给电脑装了"显卡识别程序"
固件(firmware)烧在卡自己身上的小程序,相当于卡的"内置系统"
npu-smi查看卡状态的小工具(类似查看硬盘状态的工具),能看温度、健康度、显存
CANN华为的 AI 计算软件栈总称:一套让程序能用卡的"工具箱 + 翻译官"
toolkit(开发套件)CANN 里最核心的那个大包裹,装了它才有 atcpyACL 等工具
kernels-310p(算子包)310P 卡专用的"零件盒":卡上真正干活的一个个小计算单元
ATC把训练框架产出的模型(如 .onnx)转成卡能运行的 .om 文件的工具
pyACLPython 版的操作接口,让你用 Python 代码指挥卡干活
ACL昇腾的底层接口库,pyACL 是它的 Python 外壳
.om 文件昇腾卡专用的"模型成品文件",卡只认这个格式
环境变量系统的"指路牌":告诉系统"新装的工具放在哪里,去哪儿找"
rootLinux 里的最高权限账号,能改系统任何文件
conda一个"Python 环境管理器",可以在一台机器上并存多个不同版本的 Python
Python 环境一个独立的 Python"房间",里面装的软件互不干扰
沙箱/受限环境一种"只能看不能改"的受限执行环境(常见于自动化工具里),会导致安装失败

0.4 全局路线图:一共 6 步

步骤做什么一句话原理
第 1 步造一个 Python 3.10 环境CANN 只认 3.7~3.10,而系统自带 3.14 太新
第 2 步下载 2 个安装包并"验货"有包才能装;验货是防止下载不完整导致装到一半失败
第 3 步安装 toolkit(工具箱)装上核心工具(含 atcpyACL
第 4 步安装 310P 专用算子包310P 卡干活需要的"专用零件",不装则推理会缺算子
第 5 步配置环境变量(立指路牌)让系统在新开的窗口里也能找到刚装的工具
第 6 步体检验证用 4 个小测试确认真的装好了

0.5 三条铁律(违背了大概率会失败)

  1. 全程用 root 身份操作(第 1 章会教你怎么确认)。
  2. 安装动作必须在"能写系统目录"的环境里做:如果报 create /usr/local/Ascend/ascend-toolkit fail !,说明你处在受限/沙箱环境,必须退出该环境再装(详见第 4 章第 1 条)。
  3. 每一步都有"正确状态":对不上就不要往下走,翻到第 4 章找对应处理办法。

第 1 章 前置准备(动手前查清 5 件事)

本章只做"体检",不安装任何东西。5 项全部通过再进第 3 章。

1.1 第 1 件事:确认你是 root 身份

做什么

whoami

为什么这么做

安装 CANN 要往 /usr/local(系统公共目录)写大约 10 GB 文件。Linux 规定:只有 root 能改系统公共目录,普通用户会被拒绝。所以动手前必须确认身份。

这一步做完,你应该看到

root

如果不是 root(显示的是别的用户名)

执行下面这条命令切换到 root(会要求输入当前用户密码):

sudo -i

切换后再执行一次 whoami,必须显示 root 才能继续。


1.2 第 2 件事:确认驱动和固件已经装好

做什么(两条命令,依次执行)

npu-smi info
grep -E "^Version|^Innerversion" /usr/local/Ascend/driver/version.info

为什么这么做

CANN 不是万能的:它必须"坐在驱动上面"。第 1 条命令是看卡在不在、健不健康;第 2 条命令是看驱动的版本号——因为不是所有 CANN 版本都能配这个驱动(第 2 章会讲怎么配)。

这一步做完,你应该看到

第 1 条命令:表格里出现 10 张卡,每张卡的 Health 列都是 OK,大致长这样:

+-------------------------------+-----------------+------------------------------------------------------+
| NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===============================+=================+======================================================+
| 88      310                   | OK              | 12.8         68                0     / 969           |
| 0       0                     | 0000:00:0B.0    | 0            577  / 7759                             |
| ...(共 10 张:Chip 88/96/104/112/120/128/136/144/152/160,Device 0–9)                     |

第 2 条命令:

Version=23.0.0
Innerversion=V100R001C15SPC002B224

如果对不上

  • 提示 npu-smi: command not found 或只看到 0 张卡 → 驱动没装好或卡没起来,先回到驱动手册把驱动装好,不要继续。
  • Innerversion 与上面不同 → 也可以继续,但第 3 步安装 toolkit 时可能会提示驱动兼容性不通过(处理办法见第 4 章)。

1.3 第 3 件事:确认磁盘空间够用

做什么

df -h /usr/local

为什么这么做

CANN 安装包本身 4.2 GB;安装时会先解包出临时文件(又占几 GB),装完常驻约 9.9 GB。磁盘不够会在安装中途失败,且失败后残留文件很难清理,所以先查再装。

这一步做完,你应该看到

Avail(可用空间)一列 大于 30G,例如:

Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 1007G  112G  854G  12% /

如果可用空间不足 30G

先清理无用文件(例如删除旧的下载包、日志),确认 Avail 大于 30G 再继续。


1.4 第 4 件事:确认能连上安装包所在的服务器

做什么

curl -sI --max-time 20 "https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.0.0/Ascend-cann-toolkit_8.0.0_linux-x86_64.run" | head -1

为什么这么做

安装包放在华为云 OBS 上,公开可下载、不用注册华为账号。但有些机器的网络出不去,先测一下,避免下到一半才发现不通。这条命令只问"文件在不在"(返回状态码),不会真的下载。

这一步做完,你应该看到

HTTP/1.1 200 OK

如果看到的不是 200

  • 显示 000 或超时 → 这台机器访问不了该地址,需要先解决网络(换网络环境或配置代理),否则后面必然失败。

1.5 第 5 件事:确认系统 Python 的版本

做什么

python3 --version

为什么这么做

CANN 的 Python 接口(pyACL)是为 Python 3.7~3.10 编译的,装在不同版本的 Python 上会报错。而 Ubuntu 26.04 自带的 Python 太新,所以要提前确认——这也是第 3 章第 1 步"单独造一个 Python 3.10"的原因。

这一步做完,你应该看到

Python 3.14.4

看到 3.14(或高于 3.11 的版本)是正常的

不是错误,也不需要你去降级系统 Python。你只需要在第 3 章第 1 步里新建一个独立的 Python 3.10 环境即可,系统自带的 Python 完全不动。


第 1 章完成后的正确状态

下面 5 条全部成立,才能进第 3 章:

检查项正确状态
身份whoami 输出 root
npu-smi info 显示 10 张卡,Health 全 OK
驱动版本能读到 Version=23.0.0
磁盘/usr/local 可用空间 > 30G
网络测试 URL 返回 HTTP/1.1 200 OK

第 2 章 核心原理(看懂这 5 段,后面不迷路)

这一章不讲操作,只讲"为什么"。理解之后,第 3 章的每一步你都会觉得理所当然。

2.1 一台机器是"分层"的:像一辆车

类比本文对应的东西
硬件(10 张 310P 卡)发动机卡本身
驱动 + 固件点火系统 + ECU(车内电脑)已装好的 23.0.0 / 7.1.0.3.220
CANN(计算栈)变速箱 + 方向盘 + 仪表盘本文要装的东西
框架 / 业务程序司机后续要跑的模型和程序

结论:发动机再好,没有变速箱和方向盘,车也开不走。这就是"只有驱动没有计算栈"的现状。

下面这张图就是本机的"分层实况"(每一层都标注了当前的安装状态):

框架 / 业务程序(司机)
待接入

计算栈 CANN 8.0.0(变速箱 + 方向盘 + 仪表盘)
本文安装

驱动 23.0.0 + 固件 7.1.0.3.220(点火系统 + ECU)
已装好

硬件:10 × Ascend 310P(发动机)
已就绪

编译线 atc:把 .onnx 转成 .om

运行线 pyACL:让程序在卡上跑推理

2.2 为什么"看得见卡"不等于"能用卡"

驱动的作用是让系统认得这块卡(npu-smi 能读出温度、健康度);但"怎么把一份模型拆成卡能执行的小任务、怎么把数据搬进搬出卡、怎么收集结果"——这些活儿是 CANN 干的。

不装 CANN 会怎样npu-smi 照样能看到卡,但任何"转换模型、跑推理"的命令都会报"找不到工具/找不到库"。

2.3 为什么必须单独造一个 Python 3.10(而不是改系统的)

类比:软件和 Python 的关系,像"螺丝"和"螺丝刀"。CANN 8.0 这套"螺丝",只配 3.7~3.10 这几把"螺丝刀"(Python 版本)。系统自带的 3.14 是另一把规格不同的螺丝刀,拧不上。

那为什么不把系统的 Python 换掉:因为 Ubuntu 系统本身很多工具依赖自带的 Python 3.14,强行替换可能把系统搞坏。

正确做法:用 conda 在机器上"另开一个房间",房间里放一把 3.10 的螺丝刀;装 CANN、跑推理时进这个房间,其他时候用系统原来的,互不影响。

2.4 为什么选 CANN 8.0.0(而不是更新或更旧的版本)

CANN 和驱动是成对配套的,官方有一张"配套表"。选错的后果:安装时直接报"驱动兼容性检查失败",或者装上了但跑不起来。

结论依据
CANN 8.0.0官方配套表中,CANN 8.0.x 明确对应 Ascend HDK 23.0.0/23.0.X;本机驱动正是 23.0.0,落在区间内
310P 有支持CANN 8.0.0 提供 Ascend-cann-kernels-310p 专用算子包,说明 310P 系列未被剔除
不用更高版本配套表中"明确含 23.0.0"的只有 8.0 系列;8.1 起的配套表以 24.1/25.x 驱动为主,对 23.0 只模糊标注到 23.0.X,风险大

版本配套表(本次实际装机结果)

组件版本说明
NPU 驱动23.0.0(Innerversion=V100R001C15SPC002B224已装
NPU 固件7.1.0.3.220已装
CANN 开发套件(toolkit)8.0.0本文安装
310P 二进制算子包(kernels-310p)8.0.0本文安装
Python 运行环境3.10.21(独立环境,系统 Python 3.14 不动)本文创建
安装路径/usr/local/Ascend/ascend-toolkit/{8.0.0, latest}装完自动生成
安装体积9.9 GB实测

一个容易踩的坑:安装日志里会出现版本号 7.6.0.1.220。这不是装错了——CANN 8.0.0 的内部组件版本就叫 7.6.0.1.220(安装包里 version.info 写着 Version=7.6.0.1.220version_dir=8.0.0)。看到它属于正常现象。

2.5 装完 CANN,你实际上得到了什么

第 3 章的安装命令会依次装进 10 个子包,其中和你直接相关的是两条能力线:

能力线用到的子包你能做的事
编译线compiler(含 atc)、opp、toolkit.onnx 模型转成 310P 能跑的 .om 文件
运行线runtime、pyACL用 Python 打开卡、把 .om 跑起来

其余子包(hccl 多卡通信、aoe 调优、ncs、test-ops、mindstudio-toolkit)属于"装上备用",不影响本次验证。


第 3 章 分步操作(照着做,共 6 步)

操作总原则:一步一条命令,复制粘贴执行,看到"正确状态"再进下一步。

第 1 步:造一个 Python 3.10 环境

1.1 先看机器上有没有 conda

做什么

conda --version

为什么这么做

conda 是"Python 环境管理器"。如果机器上已经有了,就直接用,不必重复安装。

这一步做完,你应该看到两种结果之一

  • 情况 A:输出了版本号(例如 conda 26.7.1)→ 跳过 1.2,直接做 1.3
  • 情况 B:提示 command not found → 按 1.2 装一个 conda。

1.2 如果机器上没有 conda:安装 Miniconda

做什么(三条命令,依次执行)

mkdir -p /root/downloads && cd /root/downloads
curl -L -o miniconda.sh "https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh"
bash miniconda.sh -b -p /root/miniconda3

为什么这么做

Miniconda 是最小化的 conda 发行包(约 190 MB)。这里用清华镜像下载,速度比官方源快很多。-b 表示全自动安装(不需要一路按回车),-p /root/miniconda3 表示固定装到 /root/miniconda3 目录。

这一步做完,你应该看到

installation finished.

如果看到 ERROR: File or directory already exists: '/root/miniconda3'

说明机器上已经有 conda 了(在 /root/miniconda3),这条命令可以忽略,直接做 1.3。

1.3 创建名为 cann 的 Python 3.10 环境

做什么

/root/miniconda3/bin/conda create -n cann python=3.10 -y --override-channels -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

为什么这么做

  • create -n cann:新建一个叫 cann 的独立"房间";
  • python=3.10:房间里放一把 3.10 版本的"螺丝刀"(满足 CANN 要求);
  • -y:所有询问自动回答"是",不用你守着;
  • --override-channels -c 清华镜像:从国内镜像下载,避免卡在国外的官方源上。

这一步做完,你应该看到

Executing transaction: ...working... done

等待时长:屏幕会滚动下载进度条,属于正常现象,等到出现 done 为止(长短取决于网速)。

1.4 进入这个房间(激活环境)

做什么

source /root/miniconda3/etc/profile.d/conda.sh
conda activate cann

为什么这么做

source .../conda.sh 是把 conda 的"开关"接进当前窗口;conda activate cann 才是真正"走进 cann 房间"。走进房间后,你打的 python3pip3 就都是 3.10 的了——这一点非常关键,后面所有安装、验证命令都必须在这个房间(已激活)的状态下执行

这一步做完,你应该看到

命令提示符前面多出 (cann),例如:

(cann) root@yourhost:~#

验证一下是否真的进了房间

python3 --version

期望输出:

Python 3.10.21

如果显示的还是 3.14.x → 说明没进去,重复执行本步的两条命令。

1.5 装 CANN 需要的 6 类 Python 依赖包

做什么(一条命令,粘贴执行即可)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple attrs cython numpy==1.24 decorator sympy cffi pyyaml pathlib2 psutil protobuf==3.20 scipy requests absl-py

为什么这么做

CANN 的安装器和 pyACL 运行时会用到这些基础库,缺了会报错或给出告警。其中两个版本是指定死的,不能随意升级:

作用(大白话)为什么锁版本
numpy==1.24数值计算基础库官方要求 1.19.2 ≤ numpy ≤ 1.24,装最新版反而会不兼容
protobuf==3.20数据结构序列化库官方指定 3.20,新版会导致解析模型出错
attrs cython decorator sympy cffi pyyaml pathlib2 psutil scipy requests absl-py各类基础工具(配置解析、加速编译、数学符号、系统监控等)官方依赖清单要求

-i https://pypi.tuna.tsinghua.edu.cn/simple 表示用清华 PyPI 镜像下载,速度更快。

这一步做完,你应该看到

Successfully installed ... 结尾。可以用下面这条命令抽查两个"锁版本"的包:

pip list | grep -E "numpy|protobuf"

期望输出:

numpy          1.24.4
protobuf       3.20.3

第 1 步完成后的正确状态

检查项正确状态
提示符前面有 (cann) 标记
Pythonpython3 --version 显示 Python 3.10.21
依赖numpy1.24.4protobuf3.20.3

第 2 步:下载两个安装包并"验货"

2.1 下载 toolkit(开发套件,2.0 GB)

做什么

mkdir -p /root/downloads/cann && cd /root/downloads/cann
curl -L -o Ascend-cann-toolkit_8.0.0_linux-x86_64.run "https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.0.0/Ascend-cann-toolkit_8.0.0_linux-x86_64.run"

为什么这么做

  • mkdir -p ...:建一个固定目录专门放安装包,避免和别的文件混在一起;
  • 下载地址是华为云 OBS 公共直链:公开可下,不需要注册账号、不需要登录昇腾社区
  • -L 表示跟随跳转(下载地址可能有跳转,不加会下到一个空文件)。

这一步做完,你应该看到

屏幕出现进度条,最终回到命令提示符。下载期间不要 Ctrl+C

等待时长:取决于网速,进度条走完为止。

2.2 下载 310P 专用算子包(2.2 GB)

做什么

curl -L -o Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run "https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.0.0/Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run"

为什么这么做

kernels-310p专门给 310P 芯片用的算子(计算零件)包。昇腾有 310、310P、910 等多种芯片,每种芯片的"零件"不通用,所以必须下 310P 这一份,不能拿别的凑。

这一步做完,你应该看到

屏幕出现进度条,结束时回到命令提示符。

2.3 验货:确认文件完整

做什么(三条命令)

ls -l /root/downloads/cann/
chmod +x /root/downloads/cann/*.run
cd /root/downloads/cann && ./Ascend-cann-toolkit_8.0.0_linux-x86_64.run --check

为什么这么做

  • 第 1 条:看文件大小。网络中断会留下一个"半截文件",不看大小直接装,会在安装到一半时报各种莫名其妙的错;对照表见下方"正确状态"。
  • 第 2 条:加执行权限。下载下来的文件默认没有"执行权",不加会报 Permission denied
  • 第 3 条:--check 是安装包自带的完整性校验(官方参数),它会核对文件内容有没有损坏。

这一步做完,你应该看到

第 1 条命令的输出里,两个文件的字节数应为:

文件应有大小(字节)
Ascend-cann-toolkit_8.0.0_linux-x86_64.run2074630525
Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run2345769558

第 3 条命令会打印解压进度(Uncompressing ASCEND_RUN_PACKAGE 100%)和一行日志路径,不出现 error 字样即为通过。

如果大小差很多(比如差几百 MB)

说明没下完。删掉重下:

rm -f /root/downloads/cann/*.run

然后重做 2.1 和 2.2。

第 2 步完成后的正确状态

/root/downloads/cann/ 目录下有两个 .run 文件,大小与上表一致,且 --check 无报错。


第 3 步:安装 toolkit(工具箱)

3.1 装前确认两件事

做什么(两条命令)

grep Driver_Install_Path_Param /etc/ascend_install.info
grep -E "^Version|^Innerversion" /usr/local/Ascend/driver/version.info

为什么这么做

安装器在开工前会做一次"驱动兼容性检查":它按驱动版本号在兼容清单V100R001C15 / C17 / C18 / C19 / C20)里找匹配项,匹配不上就会拒绝安装。这两条命令就是提前确认"它在哪儿找驱动、找到的版本号是什么"。

这一步做完,你应该看到

Driver_Install_Path_Param=/usr/local/Ascend
Version=23.0.0
Innerversion=V100R001C15SPC002B224

为什么这就算通过了

InnerversionV100R001C15 开头,正好命中兼容清单的第一项——所以后面的安装不会卡在驱动检查上。

3.2 执行安装(核心命令)

做什么(先激活环境,再安装)

source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann
cd /root/downloads/cann && ./Ascend-cann-toolkit_8.0.0_linux-x86_64.run --install --install-for-all --quiet

为什么这么做(每个参数都要看懂)

参数含义不写的后果
(先激活 cann 环境)让安装器用 Python 3.10 装用系统 Python 3.14 装,安装器会警告 Python 版本不在支持范围
--install安装模式(安装器还支持 --devel 开发模式、--full 全量模式)不写任何模式参数,安装器不知道你要干什么,会报参数错误
--install-for-all装成"所有人可用"只有 root 能用,普通用户后续会权限不足
--quiet静默安装,并且自动接受许可协议(EULA)安装会停在 Do you accept the EULA...[Y/N] 等你按键;如果没人回答,屏幕就会一直卡在那里,看起来像"死机"

安装期间会发生什么(正常现象,别慌)

  • 屏幕可能长时间没有新输出——因为它在后台解包 2 GB 的安装包、再依次安装 10 个子包;
  • 这段时间不要按 Ctrl+C、不要关终端、不要断开 SSH,否则会装到一半,只能卸载重来。

如果你想看它到底在干什么,另开一个终端执行:

tail -f /var/log/ascend_seclog/ascend_toolkit_install.log

看到日志在滚动,就说明进展正常。

这一步做完,你应该看到(安装成功的标志)

Driver:   Installed in /usr/local/Ascend/driver.
Toolkit:  Ascend-cann-toolkit_8.0.0_linux-x86_64 install success, installed in /usr/local/Ascend.

Please make sure that the environment variables have been configured.
-  To take effect for all users, you can add "source /usr/local/Ascend/ascend-toolkit/set_env.sh" to /etc/profile.
-  To take effect for current user, you can exec command below: source /usr/local/Ascend/ascend-toolkit/set_env.sh or add "source /usr/local/Ascend/ascend-toolkit/set_env.sh" to ~/.bashrc.

看到 install success 这四个字,才算真的成功。

如果报 create /usr/local/Ascend/ascend-toolkit fail !

说明你所在的执行环境不允许写系统目录(常见于自动化工具里的"沙箱/受限环境")。处理办法:

  1. 退出该受限环境(用普通终端登录机器);
  2. 清理残留的空目录:rmdir /usr/local/Ascend/ascend-toolkit 2>/dev/null
  3. 回到 3.2 重新执行安装命令。

3.3 顺手看一眼装出来的目录

做什么

ls /usr/local/Ascend/ascend-toolkit/

为什么这么做

这一步是自查:确认安装位置与你后面要"指路"的位置一致。CANN 会把真实文件放在版本目录 8.0.0/,再建一个叫 latest 的"快捷方式"指向它;环境变量脚本 set_env.sh 就在这一层。

这一步做完,你应该看到

8.0
8.0.0
latest
set_env.sh

第 3 步完成后的正确状态

检查项正确状态
屏幕输出出现 Ascend-cann-toolkit_8.0.0_linux-x86_64 install success
目录/usr/local/Ascend/ascend-toolkit/ 下有 8.0.0latestset_env.sh
日志/var/log/ascend_seclog/ascend_toolkit_install.log 末尾为 process end

第 4 步:安装 310P 专用算子包

4.1 执行安装

做什么

cd /root/downloads/cann && ./Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run --install --type=toolkit --install-for-all --quiet

为什么这么做

  • 上一步装的 toolkit 是"通用工具箱",并不包含 310P 卡实际干活用的零件
  • --type=toolkit 是告诉安装器:“我这台机器上装的是 toolkit 形态的 CANN,请把算子装到对应位置去”(另外两种形态是 nnae、nnrt);
  • 不装这个包,后续模型转换、推理时可能报"算子不存在"。

这一步做完,你应该看到

Ascend-cann-kernels-310p_8.0.0_linux-x86_64 install success. The installation path is /usr/local/Ascend/ascend-toolkit.

安装期间的表现:同样可能出现屏幕长时间无输出,属正常,耐心等(可另开终端看 /var/log/ascend_seclog/ascend_kernels_310p_install.log)。

4.2 确认算子确实落地了

做什么(两条命令)

head -2 /usr/local/Ascend/ascend-toolkit/latest/opp_kernel/version.info
ls /usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/kernel/ascend310p | wc -l

为什么这么做

  • 第 1 条:opp_kernel/version.info 这个"登记文件"只有装了 310P 算子包才会出现,看它就知道算子包装进去了;
  • 第 2 条:数一数 310P 专用目录里到底有多少个算子——这一步是"眼见为实",确认装的是 310P 的零件,而不是别的芯片型号的。

这一步做完,你应该看到

第 1 条命令:

Version=7.6.0.1.220
version_dir=8.0.0

第 2 条命令应输出一个非 0 的数字(本机实测为 471,即 471 个 310P 算子)。

如果第 1 条报 No such file or directory

说明算子包没装成功,回看第 4 步的安装输出里有没有 install success,并检查 /var/log/ascend_seclog/ascend_kernels_310p_install.log 末尾的报错。

第 4 步完成后的正确状态

检查项正确状态
屏幕输出出现 Ascend-cann-kernels-310p_8.0.0_linux-x86_64 install success
算子登记文件opp_kernel/version.info 能读到 Version=7.6.0.1.220
算子数量ascend310p 目录下的算子数量非 0(本机 471 个)

第 5 步:配置环境变量(给系统立"指路牌")

5.1 先让当前窗口认得 CANN

做什么

source /usr/local/Ascend/ascend-toolkit/set_env.sh

为什么这么做

刚才装好的工具(atc 等)放在 /usr/local/Ascend/ascend-toolkit/latest/bin 这类目录里,而系统默认不会去这些目录找命令。set_env.sh 是一张"指路牌":它把新目录加进 PATH(去哪找命令)、LD_LIBRARY_PATH(去哪找库文件)、PYTHONPATH(Python 去哪找模块)等变量里。不执行它,就会报 atc: command not found

这一步做完,你应该看到

命令执行后没有任何输出(这是正常的,说明执行成功)。

验证指路牌立好了

echo $ASCEND_HOME_PATH

期望输出:

/usr/local/Ascend/ascend-toolkit/latest

5.2 (推荐)让指路牌永久生效

做什么(二选一)

方式一:写入 ~/.bashrc只对当前用户生效,改动最小,推荐先用这个):

echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc

方式二:写入 /etc/profile对所有用户生效,适合多人共用的机器):

echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> /etc/profile

为什么这么做

5.1 的 source 只在当前这个窗口有效。你一旦关掉窗口、或者新开一个终端,指路牌就"过期"了——于是出现经典新手问题:“刚才还能用,怎么现在又 command not found 了?” 写进 ~/.bashrc(或 /etc/profile)后,每次新开窗口会自动执行一次。

这一步做完,你应该看到

echo 命令无输出即成功。验证方法:关掉当前终端,重新开一个,然后执行:

echo $ASCEND_HOME_PATH

仍然能输出 /usr/local/Ascend/ascend-toolkit/latest,说明永久生效成功。

5.3 记住这条规则:跑 Python 之前要先"进房间"

做什么(每次新开终端、要跑 Python 相关操作时)

source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann

为什么这么做

第 1 步造的 Python 3.10"房间"默认不会自动进。只要你的操作涉及 Python(尤其是 import acl),就必须先执行这一行;否则系统会用 3.14 的 Python,直接报错。

如果你希望"每次开终端自动进房间",也可以把这一行同样追加到 ~/.bashrc

echo "source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann" >> ~/.bashrc

专机专用(这台机器只用来跑 NPU)的场景,这样做最省事。

第 5 步完成后的正确状态

检查项正确状态
当前窗口echo $ASCEND_HOME_PATH 有输出
新开窗口同样有输出(若做了 5.2)
Python 房间python3 --version 为 3.10.21(若做了 5.3)

第 6 步:体检(4 项验证,全部通过才算装好)

这一章的 4 个测试,就是"任务完成"的判定标准。任何一项不通过,翻第 4 章。

6.1 先做统一准备(每次验证前都执行)

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann

为什么:第一行立指路牌(让 atc 等命令找得到),第二行进 Python 房间(让 import acl 用对版本)。两行缺一不可

6.2 测试 1:卡还健康吗

做什么

npu-smi info

为什么:CANN 是"上层建筑",先确认地基(驱动 + 卡)没变。

正确状态:10 张卡,Health 全 OK

6.3 测试 2:编译器(ATC)能用吗

做什么

atc --help

为什么atc 是把 .onnx 转成 .om唯一工具,它可用意味着"编译线"通了。

正确状态:屏幕上打印一大段参数说明(帮助信息)。能看到帮助 = 通过。

注意:atc --version 这种写法是不支持的,会报 unknown command line flag 'version'。这不是装坏了,直接用 atc --help 验证即可。

6.4 测试 3:Python 能指挥卡吗(最关键的一项)

做什么

python3 -c "
import acl
acl.init()
print('set_device ret =', acl.rt.set_device(0))
print('soc name       =', acl.get_soc_name())
print('device count   =', acl.rt.get_device_count(0))
print('acl version    =', acl.get_version())
acl.rt.reset_device(0)
acl.finalize()
"

为什么这么做(这段代码在干什么)

代码大白话解释
import acl加载 CANN 的 Python 接口
acl.init()初始化(相当于"打开总开关")
acl.rt.set_device(0)打开 0 号卡(返回 0 表示成功)
acl.get_soc_name()问卡:“你是什么芯片”
acl.rt.get_device_count(0)数一数能看到几张卡
acl.rt.reset_device(0)释放 0 号卡(相当于"用完把卡还回去")
acl.finalize()关总开关,释放资源

为什么最后两句不能省:如果不释放,这张卡会一直被你这个进程"占着",其他程序想用就会报"设备忙"。养成"用完就还"的习惯。

这一步做完,你应该看到

set_device ret = 0
soc name       = Ascend310
device count   = (10, 0)
acl version    = (1, 12, 0, 0)

怎么读这个结果

输出含义
set_device ret = 00 表示成功打开设备(非 0 是错误码)
soc name = Ascend310卡的芯片家族名(310P 属于 Ascend310 家族,属正常)
device count = (10, 0)第一个数 10 = 能看到的卡数;第二个数 0 = 这次调用成功
acl version = (1, 12, 0, 0)ACL 接口库自身版本,正常输出

6.5 测试 4:安装体积对不对

做什么

du -sh /usr/local/Ascend/ascend-toolkit

为什么:这是一个"快速体检"——如果体积明显偏小(比如只有几百 MB),说明子包没装全。

正确状态:约 9.9G

第 6 步完成后的正确状态(=整套流程验收通过)

#检查项命令正确状态
1卡状态npu-smi info10 张卡,Health 全 OK
2编译器atc --help正常输出帮助
3设备打开acl.rt.set_device(0)返回 0
4设备数量acl.rt.get_device_count(0)(10, 0)
5安装体积du -sh /usr/local/Ascend/ascend-toolkit约 9.9G

5 项全绿 = CANN 计算栈安装成功,10 张卡已就绪。


第 4 章 常见问题与避坑要点(出错翻这里)

4.1 高频报错速查表

#屏幕上的关键信息一句话原因去哪儿看
1create /usr/local/Ascend/ascend-toolkit fail !所在环境不允许写系统目录4.3 第 1 条
2安装卡住不动、长时间无输出没加 --quiet,安装器在等你回答"是否同意许可"4.3 第 2 条
3python3 --version 显示 3.14没进 cann 房间4.3 第 3 条
4atc: command not found新窗口没立指路牌(没执行 set_env.sh4.3 第 4 条
5Permission denied(执行 .run 时)下载的文件没有执行权限4.3 第 5 条
6下载到一半中断、文件变小网络中断留下"半截文件"4.3 第 6 条
7反复安装后各种奇怪报错上次失败的残留没清4.3 第 7 条

4.2 六条禁忌(千万别做)

禁忌后果
不要用系统 Python 3.14 去装 CANN 或跑 import acl报 Python 版本相关的错误,或跑出难以排查的异常;一定先 conda activate cann
不要在受限/沙箱环境里执行安装命令直接 create ... fail 失败;必须用能写 /usr/local 的普通终端
不要在安装过程中按 Ctrl+C、关窗口、断 SSH装到一半,后续只能用卸载脚本清干净再重来
不要手动删除 /usr/local/Ascend/driver 目录那是驱动,删了卡就"消失"(npu-smi 看不到卡),得重新装驱动
不要.run 安装包安装到一半的文件当"已装好"很可能缺子包;用第 6 章的 4 项测试判断,别凭感觉
不要混用不同的 Python(例如 python3 是 3.10、pip3 是别的版本)包装到了别处、运行时找不到,出现"明明装了却说没有"的怪问题;永远在 cann 环境里操作

4.3 报错详解(现象 / 原因 / 怎么做 / 做完正确状态)

第 1 条:create /usr/local/Ascend/ascend-toolkit fail !

  • 现象:安装刚开始就报这行错并退出。
  • 原因:安装器要创建 /usr/local/Ascend/ascend-toolkit 目录,但当前执行环境不允许写 /usr/local(典型场景:在自动化工具的沙箱里执行、文件系统被挂成只读、或者你不是 root)。
  • 怎么做
    1. 确认身份:whoami 必须是 root
    2. 换到机器的普通终端(或任何能写 /usr/local 的环境)执行;
    3. 清理残留:rmdir /usr/local/Ascend/ascend-toolkit 2>/dev/null
    4. 重新执行第 3 步的安装命令。
  • 做完后的正确状态:屏幕出现 Ascend-cann-toolkit_8.0.0_linux-x86_64 install success

第 2 条:安装停在原地、长时间无输出

  • 现象:命令回车后一直不动,没有任何报错。
  • 原因:安装器默认会问一句 Do you accept the EULA to install CANN?[Y/N],如果没人按键,它就一直等。
  • 怎么做:先按 Ctrl+C 终止,然后在命令末尾补上 --quiet(它会自动回答"同意")再执行;如果已经装了一半,先按第九章卸载再重装。
  • 做完后的正确状态:安装能一路跑到底并打印 install success

第 3 条:Python 版本不对(显示 3.14.x)

  • 现象python3 --version 输出 Python 3.14.4
  • 原因:没进入 cann 房间,用的是系统自带 Python。
  • 怎么做
    source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann
    python3 --version
    
  • 做完后的正确状态:输出 Python 3.10.21

第 4 条:atc: command not found

  • 现象:明明装好了,执行 atc 却说找不到命令。
  • 原因:环境变量"指路牌"只在执行过 source set_env.sh 的窗口里有效;新开的窗口默认没执行过。
  • 怎么做:执行 source /usr/local/Ascend/ascend-toolkit/set_env.sh;若不想每次都敲,按 5.2 写进 ~/.bashrc
  • 做完后的正确状态echo $ASCEND_HOME_PATH 有输出,atc --help 能打印帮助。

第 5 条:Permission denied(执行安装包时)

  • 现象bash: ./Ascend-cann-toolkit_...run: Permission denied
  • 原因:下载下来的文件默认没有"执行权"。
  • 怎么做chmod +x /root/downloads/cann/*.run 后重试。
  • 做完后的正确状态:命令能正常开始执行。

第 6 条:安装包下载不完整

  • 现象ls -l 看到的字节数远小于应有大小;安装时报"损坏/解压失败"。
  • 原因:网络中断,curl 只下了半截。
  • 怎么做rm -f /root/downloads/cann/*.run,重新执行第 2 步的下载命令,并按 2.3 的三条命令验货。
  • 做完后的正确状态:两个文件大小与 2.3 的对照表一致,--check 无报错。

第 7 条:反复安装后出现奇怪错误

  • 现象:多次失败/重装后,出现"路径已存在""版本冲突"等提示。
  • 原因:上一次失败留下的空目录、半截文件或软链接干扰了新的安装。
  • 怎么做:用官方卸载脚本彻底清理(见第 6 章),确认 /usr/local/Ascend/ascend-toolkit 已不存在后,再从第 3 步重装。
  • 做完后的正确状态:卸载后再重装,屏幕能正常打印 install success

4.4 成功 / 失败 判定对照表

你以为的"成功"是否为真成功真正的判定标准
命令跑完没有报错不一定必须看到 install success 字样
atc --help 能用是(编译线通了)编译线通过
import acl 不报错是(运行线通了)运行线通过
npu-smi 能看到卡是(驱动正常)只说明驱动正常,不代表 CANN 装好了
第 6 章 5 项全绿这才叫"计算栈安装成功"

第 5 章 安装器机制与校验点(想深究的人看)

本章不涉及操作,供排障与同批次机器复现时参考。

5.1 解包查看(不执行安装)

安装包本质是一个"自解压包",官方参数可以只解包、不安装:

./Ascend-cann-toolkit_8.0.0_linux-x86_64.run --noexec --extract=/tmp/canntoolkit

解包后你会看到 script/(安装脚本)与 run_package/(10 个子包)。子包本身也是可独立解包的 .run

Ascend-mindstudio-toolkit_7.0.0_linux-x86_64.run
Ascend-pyACL_8.0.0_linux-x86_64.run
Ascend-test-ops_8.0.0_linux.run
CANN-aoe-7.6.0.1.220-linux.x86_64.run
CANN-compiler-7.6.0.1.220-linux.x86_64.run
CANN-hccl-7.6.0.1.220-linux.x86_64.run
CANN-ncs-7.6.0.1.220-linux.x86_64.run
CANN-opp-7.6.0.1.220-linux.x86_64.run
CANN-runtime-7.6.0.1.220-linux.x86_64.run
CANN-toolkit-7.6.0.1.220-linux.x86_64.run

5.2 安装器实际会做的三类校验

校验实现方式本机结果
Python 版本只接受 3.7 / 3.8 / 3.9 / 3.10 / 3.11不满足只打印 WARNING,不中止安装3.10,通过
Python 依赖检查 sqlite3 / numpy / scipy / psutil / protobuf 等模块,缺失仅告警已预装,通过
驱动兼容性要求驱动 Innerversion 落在兼容清单 V100R001C15 / C17 / C18 / C19 / C20 内(按前缀 + 尾号匹配),不匹配需加 --forceV100R001C15SPC002B224 命中 C15,通过

重要结论:Ubuntu 26.04 虽然不在官方支持的操作系统列表里,但安装器并没有"操作系统硬校验",因此本机不需要修改安装器脚本,用官方命令直接装即可。

5.3 日志与安装参数留档

/var/log/ascend_seclog/ascend_toolkit_install.log        # toolkit 安装日志
/var/log/ascend_seclog/ascend_kernels_310p_install.log   # 310P 算子包安装日志
/var/log/ascend_seclog/ascend_install.log                # 各子包详细安装日志
/usr/local/Ascend/ascend-toolkit/latest/ascend_toolkit_install.info   # 安装参数留档

注意:CANN 不会/etc/ascend_install.info(该文件里只有驱动/固件的记录),CANN 自己的安装信息放在上面的 ascend_toolkit_install.info 里。


第 6 章 卸载方法

卸载入口在被安装的版本目录下(脚本会依次卸载 runtime / compiler / hccl / opp / toolkit / aoe / mindstudio-toolkit / pyACL / ncs / opp_kernel 等子包):

bash /usr/local/Ascend/ascend-toolkit/8.0.0/cann_uninstall.sh

注意:该脚本不接受任何参数,执行时不要附加其他选项(附加会直接报 parameter is not supported)。

卸载完成后的正确状态/usr/local/Ascend/ascend-toolkit/ 目录被移除;如仍有残留空目录,可手动确认后再删。


第 7 章 结论与下一步

7.1 结论

  1. 版本选型成立:CANN 8.0.0 与本机驱动 23.0.0 配套,且保留 310P 支持;更高的 CANN 需要更高版本驱动,不适用。
  2. Python 隔离有效:不动系统 Python 3.14,用独立 3.10 环境承载 CANN 与 pyACL,安装与运行均正常。
  3. 安装器无需改造:Ubuntu 26.04 不在官方支持列表,但安装器没有操作系统硬校验,官方命令可直接安装成功。
  4. 计算栈已就绪atc(模型转换)与 pyACL(推理)均可用,10 张卡全部能被 ACL 识别

7.2 下一步(尚未完成)

#待办说明
1环境变量持久化按 5.2 / 5.3 写入 ~/.bashrc/etc/profile(若已在第 5 步完成可跳过)
2模型转换验证atc 把 ONNX 模型转换为 Ascend310P.om,验证编译链路
3单卡推理验证pyACL 加载 .om 推理,并与 CPU 结果比对,验证运行链路与算子正确性
410 卡并发压测采集吞吐与时延数据
5(可选)硬件级压测使用官方 MindX ToolBox 的 ascend-dmi 做 FLOPS / 带宽压测

附录 A 一页速查卡(所有命令)

日常使用只看这一页即可。每次新开终端,先执行第 1、2 行。

# 1. 立指路牌(找得到 CANN 工具)
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# 2. 进 Python 3.10 房间(跑 Python 相关操作必需)
source /root/miniconda3/etc/profile.d/conda.sh && conda activate cann

# 3. 看卡
npu-smi info

# 4. 看编译器
atc --help

# 5. 看 10 张卡是否都能被 ACL 打开
python3 -c "
import acl
acl.init()
print('device count =', acl.rt.get_device_count(0))
acl.finalize()
"

# 6. 看安装体积
du -sh /usr/local/Ascend/ascend-toolkit

安装/卸载命令(一次性操作,已装过就不必再执行)

# 安装 toolkit
./Ascend-cann-toolkit_8.0.0_linux-x86_64.run --install --install-for-all --quiet

# 安装 310P 算子包
./Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run --install --type=toolkit --install-for-all --quiet

# 卸载(不接受参数)
bash /usr/local/Ascend/ascend-toolkit/8.0.0/cann_uninstall.sh

附录 B 关键路径一览

类别路径
CANN 安装目录/usr/local/Ascend/ascend-toolkit/{8.0.0, latest}
CANN 环境变量脚本/usr/local/Ascend/ascend-toolkit/set_env.sh
驱动目录(不要删/usr/local/Ascend/driver
Python 3.10 环境/root/miniconda3/envs/cann
安装包存放/root/downloads/cann/
安装日志/var/log/ascend_seclog/
安装参数留档/usr/local/Ascend/ascend-toolkit/latest/ascend_toolkit_install.info
卸载入口/usr/local/Ascend/ascend-toolkit/8.0.0/cann_uninstall.sh

参考资料与相关链接

安装包(华为云 OBS 公共直链,无需注册登录,可直接下载)

  • 开发套件包(toolkit,2.0 GB):
    https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.0.0/Ascend-cann-toolkit_8.0.0_linux-x86_64.run
  • 310P 二进制算子包(kernels-310p,2.2 GB):
    https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.0.0/Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run

官方文档入口

  • 昇腾社区(CANN 文档、固件驱动下载):https://www.hiascend.com/document

系列文章

  • 上一篇:《昇腾310P(A300-3010)驱动移植与安装实战:在内核 7.0 上从编译失败到 10 卡全识别》——把华为 2022 年发布的驱动源码移植到内核 7.0 并完成官方安装的全过程。

如果这篇教程帮你把卡跑起来了,欢迎点赞、收藏、关注,让更多被"只有驱动没有计算栈"卡住的人少走弯路。

如果你在某一步卡住了,把报错原文贴在评论区(务必带上所在步骤编号),我会补充到第 4 章的避坑清单里。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐