昇腾 NPU:生态概览与环境搭建¶
约 1648 个字 55 行代码 2 张图片 预计阅读时间 6 分钟
本章是昇腾部分的导读。如果你已经学过 CUDA,那么昇腾的各种概念对你来说都不算陌生——它们只是换了名字的同一套思想:异构并行计算。
昇腾(Ascend) 是华为的 AI 处理器(NPU)系列,广泛应用于训练和推理服务器。近年来国内各大算力中心、高校集群中昇腾设备的占比越来越高,学会在 NPU 上写代码、调算子,正在成为 HPC/AI 系统方向的一项实用技能。
硬件形态¶
常见的昇腾硬件包括:
| 产品线 | 典型型号 | 用途 |
|---|---|---|
| 训练/推理服务器 | Atlas 800T A2 / 800I A2(搭载 Ascend 910B) | 大模型训练与推理的主力 |
| 超节点 | Atlas 900 A3 SuperPoD(搭载 Ascend 910C) | 大规模集群训练与推理 |
| 新一代 | Atlas 950 SuperPoD(搭载 Ascend 950 系列) | 超节点集群 |
| 推理加速卡 | Atlas 300I Duo / 300V Pro | 服务器插卡推理 |
| 开发者套件 | Atlas 200I DK A2 | 板卡级开发 |
对入门者来说,同一套软件栈适用于上述所有硬件,不用担心型号差异。
以训练主力 Atlas 800T A2 为例,它长这样——4U 机架式服务器,一台最多装 8 颗 910B 芯片,对应 npu-smi info 里的 8 个 NPU 编号:1
软件栈:从固件到框架¶
昇腾的软件栈自下而上分为几层,整体结构与 NVIDIA 生态一一对应:
| NVIDIA 生态 | 昇腾生态 | 说明 |
|---|---|---|
| GPU | NPU | 硬件 |
nvidia-smi |
npu-smi |
查看设备状态 |
| 驱动 | NPU 驱动 + 固件 | 驱动装在物理机,固件与驱动配套 |
| CUDA Toolkit | CANN | 异构计算架构,编译器、运行时、算子库全家桶 |
| CUDA C | Ascend C | 设备端编程语言 |
| cuBLAS / cuDNN | CANN 算子库 / ATB | 高性能算子库 |
| NCCL | HCCL | 集合通信库 |
PyTorch (torch.cuda) |
PyTorch + torch_npu | 框架适配插件 |
| Triton | triton-ascend | Triton 编译器的昇腾后端 |
| CUTLASS / TVM DSL | TileLang(昇腾适配) | 算子开发 DSL |
| ONNX → TensorRT | ONNX → ATC → om 模型 | 推理模型转换 |
记住这张表,你就能把已有的 GPU 知识“平移”到昇腾上。
其中 CANN(Compute Architecture for Neural Networks) 是一切的核心:它向上支持 PyTorch、MindSpore 等框架,向下调度 NPU 硬件,类似于 CUDA Toolkit 在 NVIDIA 生态中的地位。
环境搭建¶
动手前先确认
昇腾软件栈对版本配套要求严格:驱动固件 ↔ CANN ↔ torch_npu ↔ PyTorch ↔ Python 版本必须互相匹配,这是新手踩坑的头号来源。装任何东西之前,先查官方的版本配套表。本指南引用的版本号均为写作时点(2026 年 8 月)的快照,仅作参考。
方式一:物理机安装¶
完整流程是 安装驱动固件 → 安装 CANN Toolkit → 安装框架插件,官方文档见 CANN 安装指南。
1. 安装 NPU 驱动和固件(需要 root,从固件与驱动下载页获取对应产品型号的包):
# 安装依赖(Ubuntu/Debian)
apt-get install -y make dkms gcc linux-headers-$(uname -r)
# 安装驱动(* 是版本号,按实际文件名补全)
./Ascend-hdk-910b-npu-driver_xx.x.x_linux-aarch64.run --full --install-for-all
# 验证
npu-smi info
看到类似下面的输出就说明驱动装好了。下面是 openEuler 22.03 + 8 卡 910B3 服务器上的真实输出(节选两卡与进程表;不同版本格式略有差异):
+------------------------------------------------------------------------------------------------+
| npu-smi 25.2.3 Version: 25.2.3 |
+---------------------------+---------------+----------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page)|
| Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) |
+===========================+===============+====================================================+
| 0 910B3 | OK | 94.7 32 0 / 0 |
| 0 | 0000:C1:00.0 | 0 0 / 0 56896/ 65536 |
+===========================+===============+====================================================+
| 1 910B3 | OK | 88.7 33 0 / 0 |
| 0 | 0000:C2:00.0 | 0 0 / 0 56687/ 65536 |
+===========================+===============+====================================================+
+---------------------------+---------------+----------------------------------------------------+
| NPU Chip | Process id | Process name | Process memory(MB) |
+===========================+===============+====================================================+
| 0 0 | 501588 | python | 101 |
| 0 0 | 504351 | sglangschedul | 53321 |
+===========================+===============+====================================================+
| 1 0 | 504352 | sglangschedul | 53325 |
+===========================+===============+====================================================+
几个对新手有用的读法:HBM-Usage(MB) 就是 NPU 上的“显存”占用(910B3 单卡 64 GB,上面两卡当时正跑着推理服务,各占了 55+ GB);下半张进程表回答的是“卡被谁占着”——共享服务器上任务排队或报 device busy 时,先来这里看看,作用等同 nvidia-smi 的进程列表。
驱动装的是什么版本,可以用 cat /usr/local/Ascend/driver/version.info 查看——排查驱动固件与 CANN 的配套问题时,先核对这里。
2. 安装 CANN Toolkit 与 Kernels 包(不需要 root。注意:root 默认装到 /usr/local/Ascend,普通用户默认装到 ~/Ascend,下文以 /usr/local 为例,装到其他位置时请同步替换 source 命令里的路径):
./Ascend-cann-toolkit_8.x.x_linux-aarch64.run --install
# Kernels 包:与 Toolkit 同版本、按芯片型号(如 910B)选择,用框架训练/推理时必需
./Ascend-cann-kernels_8.x.x_linux-aarch64.run --install
# 激活环境变量(这一步每次登录都要做,或写进 ~/.bashrc)
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 验证
atc --version
x86 还是 aarch64?
昇腾服务器通常是鲲鹏/ARM 平台,软件包选 aarch64;如果你在 x86 服务器上插了昇腾卡,选 x86_64。uname -m 可以确认。
容易混淆的四个软件包
- 驱动(driver):内核态驱动,装在物理机,负责管理 NPU 设备;
- 固件(firmware):与驱动配套的设备端软件,两者从同一页面成对下载;
- CANN Toolkit:开发套件(编译器、ATC、运行时与开发算子库),装在开发机或容器内;
- CANN Kernels 包:按芯片型号(如 910B)发布的预编译算子库,用框架训练/推理时需与 Toolkit 同版本配套安装。
方式二:容器部署(推荐)¶
官方在 Ascend Hub 和 Docker Hub 上提供预装好 CANN 的镜像(宿主机仍需安装驱动固件;tag 中 910b/a3 对应 910B/910C 两代硬件,并区分操作系统与 Python 版本),例如:
docker pull quay.io/ascend/cann:9.1.0-910b-ubuntu22.04-py3.11
容器内开发需要先在物理机安装 Ascend Docker Runtime,启动时把 NPU 设备挂进去:
docker run -it --rm \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
quay.io/ascend/cann:9.1.0-910b-ubuntu22.04-py3.11 bash
容器方案的好处是 CANN 及配套算子库已由官方装好,宿主机只需安装驱动固件,这也是集群上最主流的用法。
方式三:集群与云上环境¶
在学校/单位共享的昇腾集群上,通常不直接登录计算节点,而是通过作业调度系统申请 NPU 资源。以 Slurm 为例(分区名、资源类型名以本集群文档为准):
# 交互式申请 1 张 NPU
srun -p npu --gres=npu:1 --pty bash
进入分配的节点后,用法与前两种方式完全一致(推荐直接拉起容器镜像)。没有硬件时,也可以使用提供昇腾实例的云平台(如华为云 ModelArts、各类 AI 算力平台)。集群登录与网络配置可回顾计算机网络一章。
验证环境¶
环境搭好后,跑一段最简单的代码:
import torch
import torch_npu
print(torch_npu.npu.is_available()) # True
x = torch.randn(3, 3).npu()
y = x * 2
print(y.cpu()) # 结果能算出来并搬回内存
能打印出结果,说明从驱动、CANN 到 torch_npu 的整条链路都是通的。
学习&拓展:¶
- 在自己的机器或集群上完成一次昇腾环境搭建(容器方式即可),截图记录
npu-smi info的输出。 - 阅读 CANN 安装文档,弄清楚“驱动、固件、Toolkit、Kernels 包”各自的作用。
- 用
npu-smi info watch观察一次模型训练时 NPU 的利用率变化,对比 GPU 上的nvidia-smi。 - 了解昇腾 AICore 中 Cube 单元和 Vector 单元的分工(为下一章 Ascend C 做准备)。
一些链接¶
昇腾社区官网(文档、教程、问答的入口)
昇腾源码仓库组织(Gitee)(多数仓库已同步迁移至 GitCode)
-
图片来源:华为企业业务官网 Atlas 800T A2 产品页。 ↩
