昇腾310P计算栈CANN8.0.0安装教程
【亲测】昇腾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。
目录
- 【亲测】昇腾310P 计算栈 CANN 8.0.0 安装教程:零基础照做,10 张 NPU 卡全部跑通(含完整命令)
- 第 0 章 读前必看(先花 3 分钟)
- 第 1 章 前置准备(动手前查清 5 件事)
- 第 2 章 核心原理(看懂这 5 段,后面不迷路)
- 第 3 章 分步操作(照着做,共 6 步)
- 第 4 章 常见问题与避坑要点(出错翻这里)
- 第 5 章 安装器机制与校验点(想深究的人看)
- 第 6 章 卸载方法
- 第 7 章 结论与下一步
- 附录 A 一页速查卡(所有命令)
- 附录 B 关键路径一览
阅读姿势:急着装好 → 直接看第 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 里最核心的那个大包裹,装了它才有 atc、pyACL 等工具 |
| kernels-310p(算子包) | 310P 卡专用的"零件盒":卡上真正干活的一个个小计算单元 |
| ATC | 把训练框架产出的模型(如 .onnx)转成卡能运行的 .om 文件的工具 |
| pyACL | Python 版的操作接口,让你用 Python 代码指挥卡干活 |
| ACL | 昇腾的底层接口库,pyACL 是它的 Python 外壳 |
.om 文件 | 昇腾卡专用的"模型成品文件",卡只认这个格式 |
| 环境变量 | 系统的"指路牌":告诉系统"新装的工具放在哪里,去哪儿找" |
| root | Linux 里的最高权限账号,能改系统任何文件 |
| conda | 一个"Python 环境管理器",可以在一台机器上并存多个不同版本的 Python |
| Python 环境 | 一个独立的 Python"房间",里面装的软件互不干扰 |
| 沙箱/受限环境 | 一种"只能看不能改"的受限执行环境(常见于自动化工具里),会导致安装失败 |
0.4 全局路线图:一共 6 步
| 步骤 | 做什么 | 一句话原理 |
|---|---|---|
| 第 1 步 | 造一个 Python 3.10 环境 | CANN 只认 3.7~3.10,而系统自带 3.14 太新 |
| 第 2 步 | 下载 2 个安装包并"验货" | 有包才能装;验货是防止下载不完整导致装到一半失败 |
| 第 3 步 | 安装 toolkit(工具箱) | 装上核心工具(含 atc、pyACL) |
| 第 4 步 | 安装 310P 专用算子包 | 310P 卡干活需要的"专用零件",不装则推理会缺算子 |
| 第 5 步 | 配置环境变量(立指路牌) | 让系统在新开的窗口里也能找到刚装的工具 |
| 第 6 步 | 体检验证 | 用 4 个小测试确认真的装好了 |
0.5 三条铁律(违背了大概率会失败)
- 全程用 root 身份操作(第 1 章会教你怎么确认)。
- 安装动作必须在"能写系统目录"的环境里做:如果报
create /usr/local/Ascend/ascend-toolkit fail !,说明你处在受限/沙箱环境,必须退出该环境再装(详见第 4 章第 1 条)。 - 每一步都有"正确状态":对不上就不要往下走,翻到第 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(计算栈) | 变速箱 + 方向盘 + 仪表盘 | 本文要装的东西 |
| 框架 / 业务程序 | 司机 | 后续要跑的模型和程序 |
结论:发动机再好,没有变速箱和方向盘,车也开不走。这就是"只有驱动没有计算栈"的现状。
下面这张图就是本机的"分层实况"(每一层都标注了当前的安装状态):
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.220、version_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 房间"。走进房间后,你打的 python3、pip3 就都是 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) 标记 |
| Python | python3 --version 显示 Python 3.10.21 |
| 依赖 | numpy 为 1.24.4、protobuf 为 3.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.run | 约 2074630525 |
Ascend-cann-kernels-310p_8.0.0_linux-x86_64.run | 约 2345769558 |
第 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
为什么这就算通过了
Innerversion 以 V100R001C15 开头,正好命中兼容清单的第一项——所以后面的安装不会卡在驱动检查上。
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 !
说明你所在的执行环境不允许写系统目录(常见于自动化工具里的"沙箱/受限环境")。处理办法:
- 退出该受限环境(用普通终端登录机器);
- 清理残留的空目录:
rmdir /usr/local/Ascend/ascend-toolkit 2>/dev/null; - 回到 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.0、latest、set_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 = 0 | 0 表示成功打开设备(非 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 info | 10 张卡,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 高频报错速查表
| # | 屏幕上的关键信息 | 一句话原因 | 去哪儿看 |
|---|---|---|---|
| 1 | create /usr/local/Ascend/ascend-toolkit fail ! | 所在环境不允许写系统目录 | 4.3 第 1 条 |
| 2 | 安装卡住不动、长时间无输出 | 没加 --quiet,安装器在等你回答"是否同意许可" | 4.3 第 2 条 |
| 3 | python3 --version 显示 3.14 | 没进 cann 房间 | 4.3 第 3 条 |
| 4 | atc: command not found | 新窗口没立指路牌(没执行 set_env.sh) | 4.3 第 4 条 |
| 5 | Permission 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)。 - 怎么做:
- 确认身份:
whoami必须是root; - 换到机器的普通终端(或任何能写
/usr/local的环境)执行; - 清理残留:
rmdir /usr/local/Ascend/ascend-toolkit 2>/dev/null; - 重新执行第 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 内(按前缀 + 尾号匹配),不匹配需加 --force | V100R001C15SPC002B224 命中 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 结论
- 版本选型成立:CANN 8.0.0 与本机驱动 23.0.0 配套,且保留 310P 支持;更高的 CANN 需要更高版本驱动,不适用。
- Python 隔离有效:不动系统 Python 3.14,用独立 3.10 环境承载 CANN 与 pyACL,安装与运行均正常。
- 安装器无需改造:Ubuntu 26.04 不在官方支持列表,但安装器没有操作系统硬校验,官方命令可直接安装成功。
- 计算栈已就绪:
atc(模型转换)与pyACL(推理)均可用,10 张卡全部能被 ACL 识别。
7.2 下一步(尚未完成)
| # | 待办 | 说明 |
|---|---|---|
| 1 | 环境变量持久化 | 按 5.2 / 5.3 写入 ~/.bashrc 或 /etc/profile(若已在第 5 步完成可跳过) |
| 2 | 模型转换验证 | 用 atc 把 ONNX 模型转换为 Ascend310P 的 .om,验证编译链路 |
| 3 | 单卡推理验证 | 用 pyACL 加载 .om 推理,并与 CPU 结果比对,验证运行链路与算子正确性 |
| 4 | 10 卡并发压测 | 采集吞吐与时延数据 |
| 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 章的避坑清单里。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)