东方智慧AI 算力
AI算力 · 昇腾部署课件 C1

昇腾部署第 C1 课:TorchNPU 是什么——PyTorch 怎么接到昇腾上

2026-10-05

编制:观澜|日期:2026-10-05|级别:T2 标准级 层级:C 层 · L2 框架(C 层第 1 课;L1 已在 B1–B5 讲完) 素材来源:昇腾官方文档 MCP 实时抓取(TorchNPU 26.1.X 官方文档) 数据纪律:版本对应关系、安装结构、验证命令、接口名逐字出自官方文档;标注「归纳」的是便于记忆的整理,非官方口径。


第一段 · 章前定位

A0《一张地图》给过五条部署成功判据,其中第三条是:

torch.npu.is_available()

当时只知道"它要返回 True"。现在,轮到把它讲透了。

这一课要回答的问题:

为什么昇腾上的 PyTorch 要额外装一个叫 TorchNPU 的东西? 它和 PyTorch 是什么关系? 装它之前,有哪几个"版本"必须同时对得上?

为什么这是 C 层的第一课:

  1. 它是 L2 框架层的入口 —— B 层讲完 CANN(L1),这一课往上接框架。
  2. 它是判据 ③ 的实现主体 —— 判据 ③ 通不过,八成就卡在这一课讲的东西上。
  3. 它把 B 层学的所有东西"用起来": - B3 讲"版本配套关系" → 这一课告诉你到底有几个版本要配套(答案:五个) - B1 讲"环境变量" → 这一课告诉你框架层也要先满足前提 - B2 讲"算子库" → 这一课告诉你框架是怎么最终调到那些算子的

第二段 · 学习目标

学完这一课,你应该能回答:

  1. TorchNPU 是什么——它和 PyTorch 是什么关系(插件?分支?)
  2. 为什么要装"两样东西"(PyTorch 本体 + TorchNPU),而且 PyTorch 装的是哪个版本
  3. 装 TorchNPU 之前,有几件事必须对上(官方的版本对应表)
  4. 装完怎么验收(官方给了一条命令,以及它该输出什么)
  5. torch.npu.is_available() 背后的那套接口是哪些

第三段 · TorchNPU 是什么

先说名字

TorchNPU = torch + NPU —— 从名字就能看出它是"PyTorch 的 NPU 部分"。

官方的定位(从官方文档的用词能直接读出):

官方章节标题是「安装 PyTorch 框架和 TorchNPU 插件」 官方的验证说明里写:执行以下命令可检查「PyTorch 框架和 TorchNPU 插件」是否已成功安装。

官方称它为"插件"(plugin)。

插件意味着什么(归纳)

如果是"分支/魔改版" 实际是"插件"
PyTorch 本体 要用华为自己维护的一份 用官方 PyTorch(而且是 CPU 版,见第五段)
装法 装一个东西 装两个:PyTorch + TorchNPU
升级 PyTorch 要等分支跟上 PyTorch 和插件各自有版本,要对上
名字 会另起一个 插件就叫 torch_npu

这一条解释了两个常见现象:

  • 为什么文档让你装两次(先 pip3 install torch...,再 pip3 install torch_npu...)—— 因为是两个包。
  • 为什么 torch_npu 的包名里带着 PyTorch 的版本号(torch_npu-2.12.0-...)—— 因为插件要跟 PyTorch 版本配对。

归纳一句话: PyTorch 负责"是什么",TorchNPU 负责"跑在哪张卡上"。


第四段 · 从"装上"到"能用":那条验收命令说明了什么

官方给的验收方式(原文)

安装后验证

执行以下命令可检查 PyTorch 框架和 TorchNPU 插件是否已成功安装。

python python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

输出如下类似信息说明安装成功。

拆开这一行命令(本段是 C1 最实用的部分)

这一行短命令,其实一次性验了四件事(归纳):

命令片段 验的是什么 对应此前哪一课
import torch PyTorch 装上了 ——
import torch_npu TorchNPU 插件装上了 本课
torch.randn(3, 4).npu() 能把张量放到 NPU 上(.npu() 是插件加的动作) 本课
print(a + a) NPU 上真能算出结果(加法要落到 kernel 上) B2(算子库)

最后一条尤其重要(归纳):

a + a 能打印出来,说明"算子库里有这个算子、而且能跑"。 如果 import 都成功、但一算就报算子相关的错 —— 那就不是框架的问题,是 B2 的问题。

这正好给出了一个分层判断法:

卡在哪一步 说明问题在哪一层
import torch 就失败 PyTorch 根本没装上
import torch_npu 失败 插件没装上 / 版本不对
.npu() 报错 设备层——B5(容器里卡没挂进来)或 A1(驱动)
a + a 报算子相关错 L1——B2(算子库)或 B3(版本配套)

⭐ 这条命令值得背下来:它是昇腾部署分层排错的一个微缩版。

官方还给了另一组接口(libtorch_npu 文档)

接口 官方说明
torch_npu::init_npu() 使用 NPU 设备前需进行初始化,输入值格式为 npu:<id>,其中 id 为 NPU 卡号
at::Device() 通过传 NPU 字符串构造 NPU 设备,输入值格式为 npu:<id>
torch_npu::finalize_npu() 使用 NPU 设备结束需进行……

归纳:C++ 侧(libtorch)要用 NPU,要显式初始化 / 构造设备 / 收尾; Python 侧因为有了插件的语法糖(.npu()),日常写起来更省事。

注意那个 npu:<id> 格式 —— id 是卡号。 这就接上了 A2(你手上是第几张卡)和 B5(容器里挂了哪几张卡)—— 多卡机器上,"用哪张卡"是一个要明确回答的问题。


第五段 · 装之前:把"五个维度"对上

官方的版本对应表(这是本课的核心)

官方《安装 TorchNPU · 方式一:离线安装(Whl)》给出了一张表, 每一行就是一个可用组合。表头是:

PyTorch 版本 TorchNPU 插件版本 Python 版本 系统架构 CANN 版本 安装方式
2.12.0 26.1.0 Python 3.13 AArch64 9.1.0 离线安装(Whl)
2.12.0 26.1.0 Python 3.12 AArch64 9.1.0 离线安装(Whl)
2.12.0 26.1.0 Python 3.11 … 9.1.0 …
2.12.0 26.1.0 Python 3.10 … 9.1.0 …

⚠️ 数据纪律提示:上表只是这张表的表头与示例行, 完整矩阵随版本变化,请到官方文档页取当前版本的表。 本课不声称这是完整清单,只用它说明"要同时对上哪几件事"。

从这张表能读出五件事必须同时对

维度 例子(官方示例行) 谁决定的
PyTorch 版本 2.12.0 你的业务代码依赖哪个版本
TorchNPU 插件版本 26.1.0 必须和 PyTorch 版本配对
Python 版本 3.13 / 3.12 / 3.11 / 3.10 你的环境
系统架构 AArch64 / X86_64 你的服务器 CPU
CANN 版本 9.1.0 B3 讲的那个 CANN

⚠️ 这一条是 C 层最容易踩的坑(归纳):

B3 讲"CANN 要与驱动、固件配套"——那是三个。 到了框架层,要配套的变成五个:加上 PyTorch 版本和 Python 版本/架构。

而且这五件事的"决定权"不在同一个地方:

  • CANN 版本 → 由你装的 CANN 决定(B3/B4)
  • Python 版本 → 由你的环境决定
  • 系统架构 → 由服务器决定
  • PyTorch 版本 → 由业务代码决定
  • TorchNPU 版本 → 上面四个定完了,它只剩一个选项

归纳(一句好记的): TorchNPU 的版本不是你"选"的,是你"算"出来的 —— 其他四样定了,它就只有一行能用。

从包名就能看出这些约束(官方示例)

官方给的实际命令是这样的(AArch64 / Python 3.13 那一行):

# 下载并安装 PyTorch 框架
wget https://download.pytorch.org/whl/cpu/torch-2.12.0%2Bcpu-cp313-cp313-manylinux_2_28_aarch64.whl
pip3 install torch-2.12.0+cpu-cp313-cp313-manylinux_2_28_aarch64.whl

# 下载并安装 TorchNPU 插件
wget https://gitcode.com/Ascend/pytorch/releases/download/v26.1.0-pytorch2.12.0/torch_npu-2.12.0-cp313-cp313-manylinux_2_28_aarch64.whl
pip3 install torch_npu-2.12.0-cp313-cp313-manylinux_2_28_aarch64.whl

包名里全是信息(归纳,逐段拆):

包名片段 含义
torch-2.12.0 PyTorch 版本 2.12.0
+cpu 装的是 CPU 版 PyTorch(见下)
cp313 CPython 3.13
manylinux_2_28 兼容的 glibc 平台标签
aarch64 CPU 架构
torch_npu-2.12.0 插件版本号跟着 PyTorch 走
下载路径里的 v26.1.0-pytorch2.12.0 发布标签里同时写了插件版本和对应的 PyTorch 版本

⭐ 一个反直觉但很重要的事实:PyTorch 装的是 CPU 版

官方命令里,PyTorch 是从 download.pytorch.org/whl/cpu/ 下载的,包名带 +cpu。

为什么不用 GPU 版(归纳,帮理解): 昇腾不是 CUDA 设备。 +cpu 是 PyTorch 官方对"不带任何加速器后端"的标准版; 加速能力由 TorchNPU 插件补上——这就是"插件"设计的实际体现。

由此得出一条实用判断: 如果你装的是 PyTorch 的 CUDA 版,那是给 NVIDIA 卡用的 —— 在昇腾上不对。


第六段 · 两种安装方式

官方给了两条路:

方式 官方章节名 说明
方式一 离线安装(Whl) 用 wget 下载 whl,再用 pip3 安装
方式二 源码安装 从源码编译安装(章节含:安装 PyTorch 框架 → 安装 TorchNPU 插件 → 查询版本 → 安装后验证)

怎么选(归纳):

  • 绝大多数情况用方式一(Whl)——和 B4 的结论一致:能用现成包就别编译。
  • 方式二用在:官方没提供对应你环境的 whl(比如特定 Python 小版本 / 特定架构), 或者你要改插件本身。

与 B4 呼应:B4 讲 CANN 时有"在线/离线"两条路; 框架层的对应关系是:python 生态天然以 whl 为主(pip3 install), 所以这里不是"在线 vs 离线",而是"装现成的 vs 自己编译"。

一个相关的官方事实:TorchAir

官方《TorchAir · 简介》里有一句值得记的话:

TorchAir 不是独立软件包,而是作为 TorchNPU 的三方库,随着 TorchNPU 包一起发布。 请直接安装 TorchNPU 插件,即可使用 TorchAir。

归纳:装 TorchNPU 就等于装上了 TorchAir,不用单独找。 (这解释了为什么你不会在安装教程里看到"单独装 TorchAir"这一步。)


第七段 · 装之前的前置条件

官方的安装文档明确要求:

执行安装命令前,请参见《安装前准备》完成环境变量配置及其他环境准备。

归纳出装 TorchNPU 之前要准备好的东西(把前面几课串起来):

① 驱动/固件装好          → A1,用 npu-smi info 验
② CANN 装好并配好环境变量 → B1,source set_env.sh
③ 算子库就位             → B2(ops 包按型号,别装错)
④ CANN 与驱动的版本配套    → B3
⑤ Python 环境 + pip3      → B4 讲过多数的装法都要求这个

⚠️ 注意"先配环境变量"这条(归纳):

source set_env.sh 必须在装 TorchNPU 之前做,而且要在同一个 shell 里。 否则可能出现"装完了但 import 进来找不到库"—— 这正是 B1 讲的"环境变量只在当前 shell 有效"的又一次体现。


第八段 · 出问题怎么查

先按第四段的分层法定位

卡在哪 问题层 去哪一课
import torch 失败 PyTorch 没装上 本课第六段
import torch_npu 失败 插件没装上 / 装错版本 本课第五段(五维对应)
.npu() 报错 / torch.npu.is_available() 为 False 设备层 A1(驱动)、B5(容器没挂卡)
能算,但报算子相关错 L1 B2(算子库)、B3(版本配套)
装完能 import,一跑就找不到库 环境变量 B1(当前 shell 有没有 source)

其他常见情况的查法

现象 先查什么
pip3 install 报"找不到匹配的 whl" 五个维度有一个没对上(第五段的表)
装完 import 报 "undefined symbol" 之类 TorchNPU 版本与 PyTorch 版本不配对
同事的机器能装,我的装不了 比 Python 版本 / 系统架构(这两个人各不同)
不知道该装哪个 TorchNPU 版本 别猜:先确定 PyTorch 版本 + Python 版本 + 架构 + CANN 版本 → 查官方表
装完发现装的是 CUDA 版 PyTorch 错了:昇腾上要用 +cpu 版(第五段)

⭐ 一个最省时间的判断法

框架层的报错,先分清是"版本没对上"还是"环境没到位"。

类型 表现 查
版本没对上 能 import,但一用就报错;或者 pip3 install 直接找不到包 第五段的五个维度
环境没到位 换个终端就好了 / 手工 source 一下就好了 B1 的环境变量

"装上了但用不了"八成是版本;"刚才还好好的"八成是环境。


第九段 · 小结与下一课

三句话带走

  1. TorchNPU 是 PyTorch 的插件,不是 PyTorch 的分支—— 所以要装两样:PyTorch 本体(+cpu 版)+ TorchNPU 插件。
  2. 框架层要同时对上五个维度:PyTorch 版本 / TorchNPU 版本 / Python 版本 / 系统架构 / CANN 版本。其中前四个定完之后,TorchNPU 版本只剩一个选项。
  3. 那一行验收命令一次性验四件事: python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);" —— 卡在哪一步,就知道问题在哪一层。

本课在体系里的位置

─── L0 硬件与环境(A 层,已完成)─── A0 / A1 / A2 / A3
─── L1 基础软件(B 层,已完成)─── B1 / B2 / B3 / B4 / B5
─── L2 框架(C 层)───
C1 TorchNPU 是什么:PyTorch 怎么接到昇腾上   ★ 本课
C2(拟)MindSpore 与多框架
C3(拟)框架适配原理:一个算子从框架到芯片走了哪条路
C4(拟)框架层验收与排错
─── 排障(E 层)─── E1

本课留下的"钩子"

钩子 在哪一课填
昇腾上除了 PyTorch 还有哪些框架?各有什么不同 C2
.npu() 之后,一个算子究竟走了哪条路到芯片上 C3
torch.npu.is_available() 为 False 的完整排查 C4
推理服务层(MindIE / vLLM)怎么接进来 D 层

课后自测(3 题)

  1. 为什么官方命令里 PyTorch 装的是 +cpu 版?那加速能力从哪来?
  2. 你要在 AArch64 服务器、Python 3.12 上跑一个依赖 PyTorch 2.12 的模型, 已经装了 CANN 9.1.0。该装哪个 TorchNPU 版本?依据是什么?
  3. 验收命令 ... a = torch.randn(3, 4).npu(); print(a + a) 里, 如果 import 都成功、但 a + a 报算子相关的错,问题在哪一层?

附录 A · 本课引用的官方出处

内容 出处
「安装 PyTorch 框架和 TorchNPU 插件」;版本对应表(PyTorch / TorchNPU / Python / 架构 / CANN / 安装方式) 官方 TorchNPU《安装 TorchNPU · 方式一:离线安装(Whl)》
zh/Pytorch/2610/installguide/swinstall/docs/zh/installation_guide/installation_via_binary_package.md
完整安装命令(下载 +cpu 版 PyTorch + 下载 TorchNPU whl) 同上
安装后验证命令与说明「输出如下类似信息说明安装成功」 同上 / 官方《方式二:源码安装》
.../compilation_installation_using_source_code.md
安装前须完成《安装前准备》(环境变量配置) 同上
torch_npu::init_npu() / at::Device() / torch_npu::finalize_npu() 及 npu:<id> 格式 官方 TorchNPU《编译 libtorch_npu》
.../installation_guide/building_libtorch_npu.md
「TorchAir 不是独立软件包,而是作为 TorchNPU 的三方库,随 TorchNPU 包一起发布」 官方 TorchNPU《TorchAir · 简介》
zh/Pytorch/2610/devguide/TorchAir/docs/zh/overview.md
TorchNPU 当前文档版本(26.1.X) 官方 TorchNPU 文档站版本标识

⚠️ 数据纪律提示: ① 版本对应表未完整搬运——那是随版本变化的矩阵,本课只给表头与示例行, 完整矩阵请到官方文档页取当前版本; ② 本课未给出历史版本兼容列表(官方另有《版本说明》/兼容性文档); ③ 标注「归纳」的解读("插件 vs 分支"的对比、分层判断法、包名拆解)非官方口径。


附录 B · 本课出现的命令详解

那一行验收命令(本课最该背的一条)

python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

逐段拆解:

片段 含义
python3 -c "..." 把引号里的内容当作 Python 代码直接执行,不写文件
import torch 导入 PyTorch
import torch_npu 导入 TorchNPU 插件(这一句是关键:只 import torch 不会启用 NPU)
torch.randn(3, 4) 生成一个 3×4 的随机张量(先在 CPU 上)
.npu() TorchNPU 提供的方法:把张量搬到 NPU 上
a + a 在 NPU 上做一次加法(这一步才真正用到算子库)
print(...) 打印结果

期望结果:打印出一个 3×4 的数值矩阵(官方说明:输出如下类似信息说明安装成功)。

拆解命令语法: - -c = command,把后面字符串当代码跑 - ; = Python 的语句分隔符(一行写多条) - 为什么用 -c:不建文件、一条命令验完 —— 这是官方给的最短验证路径

pip3 install <whl 文件名>

  • 含义:安装本地 whl 包。
  • 拆解:pip3 = Python 包管理器;install = 安装;参数是包文件名(本地文件也可)。
  • 用法:pip3 install torch_npu-2.12.0-cp313-cp313-manylinux_2_28_aarch64.whl
  • 期望结果:Successfully installed torch_npu-...
  • 不用会怎样:只下不装,插件不存在 → import torch_npu 失败。

wget <url>

  • 含义:从 URL 下载文件到当前目录。
  • 用法:wget https://gitcode.com/Ascend/pytorch/releases/download/v26.1.0-pytorch2.12.0/torch_npu-...whl
  • 注意:URL 里的 %2B 是 + 的转义(+ 在 URL 里有特殊含义)—— 这是 PyTorch 官方 whl 地址的常见写法,照着官方命令抄就行,别手改。

包名解读(本课实用技能)

以 torch_npu-2.12.0-cp313-cp313-manylinux_2_28_aarch64.whl 为例:

片段 含义
torch_npu 包名(TorchNPU 插件)
2.12.0 对应的 PyTorch 版本
cp313 CPython 3.13
manylinux_2_28 Linux 平台标签(glibc 兼容性)
aarch64 CPU 架构
.whl Python 的二进制包格式

学会读包名,就能对着第五段那张表自己核对,不用求人。

参数速查表

命令 / 片段 用途
python3 -c "..." 一行命令跑 Python 代码(验收用)
.npu() 把张量搬到 NPU(TorchNPU 提供)
import torch_npu 启用 NPU 支持的关键 import
pip3 install <whl> 装 whl 包
wget <url> 下载文件
npu:<id> 设备标识格式,id 是卡号(C++ 侧构造设备用)
npu-smi info 装框架前先确认驱动就位(A1)
source .../set_env.sh 装框架前先配 CANN 环境变量(B1)

附:B 层与 C 层的分工(避免重复)

问题 在哪一课
CANN 是什么、装在哪、环境变量 B1
算子库、"找不到算子" B2
版本配套(驱动/固件/CANN 三方)、升级回退 B3
七种装法怎么选 B4
容器场景 B5
框架怎么接到昇腾上(TorchNPU 是什么、五维版本对应、验收命令) 本课(C1)
其他框架(MindSpore 等) C2
算子从框架到芯片的路径 C3
选修 · 昇腾 AI 部署实操 本机读完 0/51
选修 C · 昇腾 AI 部署实操
从零把昇腾 AI 部署学一遍:先看懂分几层,再逐层装起来,最后出问题能自己定位到哪一层。不需要先有卡就能开始。
看完整学习路径(6 站 + 3 门选修) · 进度只存在你这台设备的浏览器里,不用登录
辽ICP备2026019944号-1