昇腾部署第 C2 课:多框架——昇腾上装哪个框架,几条路有什么不一样
编制:观澜|日期:2026-10-05|级别:T2 标准级 层级:C 层 · L2 框架(C 层第 2 课,前接 C1《TorchNPU 是什么》) 素材来源:昇腾官方文档 MCP 实时抓取(CANN 9.2.0-beta.2 / TorchNPU 26.1.X / MindSpore 官方 FAQ) 数据纪律:框架清单、包名、验证命令、TorchAir 定义逐字出自官方文档;标注「归纳」的是便于记忆的整理,非官方口径。
第一段 · 章前定位
C1 讲完了 PyTorch 这条路:装 CPU 版 PyTorch + 装 TorchNPU 插件。
但你一定注意到了一件事:
官方文档里,PyTorch 只是"其中一个"。 「昇腾部署」「框架适配」这些章节里,还反复出现 MindSpore、TensorFlow。
而且它们的形式完全不一样:
| PyTorch | MindSpore | |
|---|---|---|
| 装的东西 | PyTorch 本体 + 插件 | 一个包(包名带 -ascend) |
| 验证命令 | import torch_npu + .npu() |
mindspore.run_check() |
| 谁的框架 | PyTorch 官方的 | 昇思的 |
这一课回答:
昇腾到底支持哪些框架? "插件"这条路和"原生框架"这条路,差别在哪? 我该装哪个?
为什么这一课有价值: 框架选择是框架层第一个、也是影响最大的一个决定—— 它决定你后面装什么、验什么、报错往哪查。选错了,后面每一步都别扭。
第二段 · 学习目标
学完这一课,你应该能回答:
- 官方口径里,昇腾向上支持哪些 AI 框架
- "原生框架"和"适配插件"两条路的形式差别
- MindSpore 这条路的包名、装法、验证命令
- 遇到"该装哪个"时,按什么判断
- TorchAir 是什么(以及为什么会出现"图模式"这个词)
第三段 · 官方口径:昇腾向上支持哪些框架
B1 引过 CANN 的官方定义,里面已经写了答案:
异构计算架构 CANN(Compute Architecture for Neural Networks)是昇腾针对 AI 场景推出的 异构计算架构,向上支持多种 AI 框架,包括 MindSpore、PyTorch、TensorFlow 等, 向下服务 AI 处理器与编程……
注意官方的措辞(归纳):
| 官方用词 | 说明什么 |
|---|---|
| "多种 AI 框架" | 不止一个 |
| "包括 MindSpore、PyTorch、TensorFlow 等" | 列举了三个,"等"字表示不止这三个 |
⚠️ 数据纪律提示:官方此处用的是"包括……等"的表述。 本课不声称这是一份完整清单,也不替官方补全—— 具体某版本支持哪些框架、支持到什么程度,以官方《版本说明》与各框架的官方文档为准。
同时,官方 ModelZoo 的《环境准备》也直接给出了两条指引:
- 安装 PyTorch 可参考:《PyTorch 框架训练环境准备》
- 安装 MindSpore 可参考:《昇思 MindSpore 安装指南》
归纳:官方对这两个框架都有专门的安装文档, 说明它们都是被正式支持的路子(而不是"能用但没人管")。
第四段 · 两条路的形式差别(本课核心)
路线一:适配插件(以 PyTorch 为例,C1 讲过)
PyTorch 本体(PyTorch 官方的,装 +cpu 版)
+
TorchNPU 插件(昇腾提供)
↓
两者一起,才能用昇腾
特征:框架是别人的,昇腾以"插件"身份接进去。
路线二:原生框架(以 MindSpore 为例)
MindSpore(昇思自己的框架,有专门给昇腾的版本)
↓
一个包搞定
特征:框架本身就是为昇腾(及多后端)设计的, 所以不需要额外插件,但包名会区分后端。
差别的直观体现:看包名和验证命令
| PyTorch 路线 | MindSpore 路线 | |
|---|---|---|
| 装几个包 | 两个(torch + torch_npu) |
一个 |
| 包名里的后端标识 | 插件名 torch_npu |
包名带后缀(官方 FAQ 中为 mindspore-ascend) |
| 验证命令 | import torch_npu + .npu() |
mindspore.run_check() |
| 验证输出里的平台标识 | —— | platform [Ascend] |
| 升级注意 | 两者版本要配对(C1 第五段) | 官方 FAQ:先手动卸载旧版本 |
⭐ 从"装几个包"就能判断你在哪条路上:
装两个 → 插件路线;装一个(但名字带后端后缀)→ 原生路线。 这不是"哪个更好",是"框架的设计方式不同"。
为什么会这样(归纳,帮理解)
- PyTorch 是一个已经很成熟的框架,它有自己的设备抽象机制,
昇腾以插件的形式扩展出一个新设备类型(这也解释了为什么
.npu()这个动作是插件加上的,见 C1)。 - MindSpore 是昇思自己设计的框架,从一开始就把"多后端"作为设计目标, 所以直接发布针对不同后端的版本即可。
一句话: 插件路线是"接进去",原生路线是"长出来"。
第五段 · MindSpore 这条路:怎么装、怎么验
安装方式(官方 FAQ 原文)
MindSpore 支持 Pip、Conda、Source、Docker、Binary 等安装方式,具体安装教程请参考官网。
归纳:装法比 CANN 少(CANN 是七种,B4 讲过), 但覆盖的形式类似:包管理器装(Pip/Conda)、源码装(Source)、 容器装(Docker)、二进制装(Binary)。
这和 B4 的结论是一致的(归纳): "怎么装"这件事,在任何一层都是同一批选项—— 包管理器 / 源码 / 容器。变的只是具体命令。
验证安装(官方原始命令与输出)
执行如下命令:
bash python -c "import mindspore;mindspore.run_check()"如果输出:MindSpore version: 版本号 The result of multiplication calculation is correct, MindSpore has been installed on platform [Ascend] successfully!
⭐ 注意输出里的三件事(归纳):
| 输出内容 | 意义 |
|---|---|
MindSpore version: 版本号 |
装了哪个版本 |
The result of multiplication calculation is correct |
真算了一次乘法且结果对 —— 说明算子能跑(呼应 C1 的 a + a) |
on platform [Ascend] |
确认跑在昇腾上(不是 CPU) |
这三点和 C1 那行命令的思路完全一样: "装上了" "能算" "算在昇腾上" 三件都要验。
归纳(一条通用验收思路): 不管哪个框架,验收都问三件事: ① 版本是什么? ② 能不能算? ③ 算在哪张卡上?
升级 MindSpore(官方 FAQ 原文)
从旧版本升级到 MindSpore 时,需要先手动卸载旧版本:
bash pip uninstall mindspore-ascend当需要升级 MindSpore 版本时,可执行如下命令:bash pip install --upgrade mindspore=={version}其中:升级到 rc 版本时,需要手动指定{version}为 rc 版本号,例如1.6.0rc1; 如果升级到正式版本,=={version}字段可以缺省。
从这段能读出三件事(归纳):
① 官方给的卸载命令里,包名是 mindspore-ascend ——
这就是"昇腾版 MindSpore"的实际包名(带 -ascend 后缀)。
② "先卸载再升级"这个模式,和 B3 讲 CANN 时一模一样:
B3 的官方规则是"从高版本回退至低版本,需卸载高版本后重新安装"。 这里更严格:升级也要先卸载旧的。
③ rc 版本要显式写版本号 —— 正式版可以省略,rc 版必须写(因为 rc 是预览版,pip 不会自动选它)。
⚠️ 一条实用提醒(归纳):
看到 mindspore 和 mindspore-ascend 两个名字时要注意区分——
官方 FAQ 给出的卸载命令用的是 mindspore-ascend,
说明昇腾场景下装的是后者。装错包会表现为"装上了但 run_check 里不是 [Ascend]"。
第六段 · 怎么选(归纳,非官方口径)
先声明:本段是便于决策的整理,不是官方建议。 官方对"该选哪个框架"没有统一口径——因为它取决于你的业务代码。
判断顺序
① 我的模型代码是哪个框架写的?
PyTorch 写的(或要用 HuggingFace / 开源模型) → PyTorch + TorchNPU 插件
MindSpore 写的(或要用昇思 ModelZoo) → MindSpore 昇腾版
→ 这一条基本就定完了。
② 如果从零开始、没有历史包袱呢?
看生态、看你要用的模型和工具在哪个框架上有现成的
(官方 ModelZoo 对两个框架都有内容)
③ 如果两边都行呢?
这条不属于"部署"该决定的 —— 属于"选型"。
部署层的任务是把已经定好的框架装对、装好。
⭐ 一个最实用的判断法
框架选择这件事,在部署阶段通常没有自由度 —— 因为它是被业务代码决定的,不是被部署决定的。
部署阶段真正要做的三件事(归纳):
| 要做的事 | 看哪一课 |
|---|---|
| 装对(装的是昇腾版,不是普通版) | C1(PyTorch)/ 本课(MindSpore) |
| 验对(三件事:版本 / 能算 / 在昇腾上) | C1 第四段 / 本课第五段 |
| 配套对(框架版本与 CANN 版本匹配) | C1 第五段(五维)/ 本课 |
所以"该装哪个框架"这个问题,正确的问法其实是: "我的代码用什么框架?" —— 这个问题有答案之后,"怎么装"才有意义。
第七段 · 顺带认识一个词:图模式与 TorchAir
在官方文档里,你迟早会遇到"图模式"这个词,以及一个叫 TorchAir 的东西。 先说清它是什么(以下是官方原文):
TorchAir 是为 TorchNPU 提供图模式能力的扩展库,支持用户使用 PyTorch 和 TorchNPU 在昇腾设备上进行图模式的训练和推理。TorchAir 对外提供昇腾设备的图模式编译后端, 对接 PyTorch 的 dynamo 特性,将 PyTorch 的 FX 计算图转换为昇腾的 GE 计算图……
拆开这句官方定义(归纳)
| 官方片段 | 意思 |
|---|---|
| "为 TorchNPU 提供图模式能力" | 它是给 TorchNPU 加一种模式的 |
| "对接 PyTorch 的 dynamo 特性" | 从 PyTorch 那边拿到计算图 |
| "将 PyTorch 的 FX 计算图转换为昇腾的 GE 计算图" | 做图的翻译 |
| "图模式编译后端" | 它是一条编译路径 |
与 C1 的一个呼应
C1 说过:
「TorchAir 不是独立软件包,而是作为 TorchNPU 的三方库,随着 TorchNPU 包一起发布。 请直接安装 TorchNPU 插件,即可使用 TorchAir。」
所以(归纳):你不需要为 TorchAir 做任何额外的安装动作, 装 TorchNPU 就有。
为什么本课要提"图模式"
因为这是理解 C3 的钥匙(归纳):
一个模型跑到昇腾上,有两种执行方式: 逐条算(单算子模式) vs 整图编译后算(图模式)。 "算子从框架到芯片走了哪条路"这个问题,答案就取决于走的是哪种模式 —— 这就是 C3 要讲的事。
⚠️ 数据纪律提示:本课只给出"图模式存在、TorchAir 是它的载体"这个事实。 两种模式的完整机制、适用场景、性能差异,留给 C3 展开—— 本课不做超出官方原文的推测。
第八段 · 出问题怎么查
先看验证输出,别急着猜
| 现象 | 先查什么 |
|---|---|
| 装完不知道装对没 | 跑官方验证命令:PyTorch 用 C1 那条;MindSpore 用 mindspore.run_check() |
MindSpore 验证输出里不是 [Ascend] |
装成非昇腾版了(检查包名是否是 mindspore-ascend) |
PyTorch 侧 import torch_npu 失败 |
回 C1(插件没装 / 版本不配) |
| 两个框架都想装,会不会冲突 | 两者是独立的 Python 环境包;是否同环境共存以各自官方文档为准(本课不推测) |
| 想升级 MindSpore | 官方 FAQ:先 pip uninstall mindspore-ascend,再 pip install --upgrade |
| 装 MindSpore 报"找不到包" | 确认包名带 -ascend(别装成通用版) |
| 想用图模式 | 装 TorchNPU 即可(TorchAir 随之而来)→ 细节看 C3 |
⭐ 一个最省时间的判断法
验证命令的输出里,"平台标识"是最该看的一行。
- MindSpore:看
on platform [Ascend] - PyTorch:
.npu()能成功 +a + a能打印(C1)
原因(归纳):"装上了"和"装对版本了"是两件事。
一个普通版的 MindSpore 也能 import 成功、也能 run_check() 通过 ——
但它会告诉你平台不是 Ascend。
这类"能用但不是你想要的那个"的错误,只能靠输出里的平台标识发现。
第九段 · 小结与下一课
三句话带走
- 官方口径:CANN 向上支持多种 AI 框架,包括 MindSpore、PyTorch、TensorFlow 等—— "等"字说明不止这三个(本课不补全,以官方文档为准)。
- 两条路形式不同:插件路线(PyTorch +
torch_npu,装两个包) vs 原生路线(MindSpore 昇腾版,装一个包、名字带后端后缀)。 判据:装两个还是装一个。 - 不管哪个框架,验收都问三件事:① 版本是什么 ② 能不能算 ③ 算在哪张卡上——
MindSpore 的
run_check()输出一次给了三个答案。
本课在体系里的位置
─── L0 硬件与环境(A 层,已完成)─── A0 / A1 / A2 / A3
─── L1 基础软件(B 层,已完成)─── B1 / B2 / B3 / B4 / B5
─── L2 框架(C 层)───
C1 TorchNPU 是什么:PyTorch 怎么接到昇腾上 ✅
C2 多框架:昇腾上装哪个框架,几条路有什么不一样 ★ 本课
C3(拟)框架适配原理:一个算子从框架到芯片走了哪条路
─── 排障(E 层)─── E1
本课留下的"钩子"
| 钩子 | 在哪一课填 |
|---|---|
| 单算子模式与图模式:两种执行方式到底差在哪 | C3 |
| TorchAir 那条"FX 计算图 → GE 计算图"的路怎么走 | C3 |
| 框架层的报错怎么按层定位 | E1 / C 层后续 |
| 推理服务层(MindIE)用哪个框架 | D 层 |
课后自测(3 题)
- 同样是"在昇腾上用某个框架",PyTorch 和 MindSpore 在装包数量上为什么不一样?
mindspore.run_check()的输出里,哪一句能证明"这是昇腾版"?如果不看这一句会漏掉什么?- 官方 FAQ 说升级 MindSpore 要先手动卸载——这和 B3 讲的 CANN 升级规则有什么相似之处?
附录 A · 本课引用的官方出处
| 内容 | 出处 |
|---|---|
| 「向上支持多种 AI 框架,包括 MindSpore、PyTorch、TensorFlow 等」 | 官方《CANN - 使用导读》zh/CANNCommunityEdition/920beta2/index/index.html(另见 B1) |
| 「安装 PyTorch 可参考《PyTorch 框架训练环境准备》;安装 MindSpore 可参考《昇思 MindSpore 安装指南》」 | 官方 ModelZoo《文档中心 · 快速开始 · 环境准备》zh/ModelZoo/Documentation/qs/qs_0003.html |
| MindSpore 支持 Pip / Conda / Source / Docker / Binary 等安装方式 | 官方《Ascend FAQ · MindSpore FAQ · 安装部署》https://www.hiascend.com/document/detail/zh/AscendFAQ/ProduTech/MindSporeFAQ/mindsporefaq_001.html |
验证命令 python -c "import mindspore;mindspore.run_check()" 与期望输出(含 platform [Ascend]) |
同上 |
升级 MindSpore:先 pip uninstall mindspore-ascend,再 pip install --upgrade mindspore=={version};rc 版本需显式指定 |
同上 |
| TorchAir 的官方定义(图模式能力扩展库 / dynamo / FX 计算图 → GE 计算图) | 官方 TorchNPU《用户指南 · 配套软件库》zh/Pytorch/2610/userguide/SuppLib/.../supported_suites_and_third_party_libraries.md |
| 「TorchAir 不是独立软件包,作为 TorchNPU 的三方库随 TorchNPU 包一起发布」 | 官方 TorchNPU《TorchAir · 简介》zh/Pytorch/2610/devguide/TorchAir/docs/zh/overview.md(另见 C1) |
⚠️ 数据纪律提示: ① 框架清单不完整:官方表述为"包括……等",本课不替官方补全, 具体支持情况以官方《版本说明》与各框架官方文档为准; ② "该选哪个框架"的决策部分(第六段)标注为「归纳」,非官方口径—— 官方对框架选型无统一口径; ③ 图模式只给了"存在"这个事实与 TorchAir 的官方定义, 完整机制留给 C3,本课不做推测; ④ 本课未声称两个框架可/不可在同一 Python 环境共存——此类问题以各框架官方文档为准。
附录 B · 本课出现的命令详解
python -c "import mindspore;mindspore.run_check()"
- 含义:官方给的 MindSpore 安装验证命令。
- 拆解:
| 片段 | 含义 |
|---|---|
python -c "..." |
把引号里的内容当代码执行(同 C1 的 python3 -c) |
import mindspore |
导入 MindSpore |
mindspore.run_check() |
MindSpore 自带的自检函数:跑一次乘法,并报告版本与平台 |
- 用法:python -c "import mindspore;mindspore.run_check()" |
|
| - 期望结果(官方原文): | |
| ``` | |
| MindSpore version: 版本号 | |
| The result of multiplication calculation is correct, | |
| MindSpore has been installed on platform [Ascend] successfully! | |
| ``` | |
- 读输出:version: → 版本;calculation is correct → 能算; |
|
platform [Ascend] → 算在昇腾上。 |
|
| - 不用会怎样:无法区分"装了昇腾版"还是"装了一般的版本"。 |
pip uninstall mindspore-ascend
- 含义:卸载昇腾版 MindSpore。
- 拆解:
pip= 包管理器;uninstall= 卸载;mindspore-ascend= 昇腾版包名。 - 用法:
pip uninstall mindspore-ascend - 为什么需要:官方 FAQ 明确升级前需先手动卸载旧版本。
- 注意:包名是
mindspore-ascend,不是mindspore—— 这两个是不同的包(对应不同后端)。 - 不用会怎样:直接
--upgrade可能升不干净(官方要求先卸)。
pip install --upgrade mindspore=={version}
- 含义:升级 MindSpore 到指定版本。
- 拆解:
--upgrade= 升级;=={version}= 精确版本约束。 - 用法:
pip install --upgrade mindspore==1.6.0rc1(rc 版本需显式指定) - 官方说明:升级到正式版本时,
=={version}字段可以缺省; 升级到 rc 版本时必须手动指定。 - 不用会怎样:想装 rc 版但没写版本号 → pip 装的是正式版。
import torch_npu 与 .npu()(C1 回顾)
- 见 C1《TorchNPU 是什么》附录 B——本课用它做两条路线的对照。
参数速查表
| 命令 / 片段 | 用途 | 属于哪条路 |
|---|---|---|
python -c "import mindspore;mindspore.run_check()" |
MindSpore 安装验证 | 原生 |
platform [Ascend](输出中) |
确认是昇腾版 | 原生 |
pip uninstall mindspore-ascend |
卸载昇腾版 MindSpore | 原生 |
import torch_npu + .npu() |
TorchNPU 启用与验证 | 插件 |
npu-smi info |
装框架前确认驱动(A1) | 通用 |
source .../set_env.sh |
装框架前配 CANN 环境变量(B1) | 通用 |
附:C1 与 C2 的分工(避免重复)
| 问题 | 在哪一课 |
|---|---|
| TorchNPU 是什么、五维版本对应、验收命令拆解 | C1 |
| 昇腾支持哪些框架、插件路线 vs 原生路线的形式差别、MindSpore 怎么装怎么验、图模式与 TorchAir 是什么 | 本课(C2) |
| 单算子模式与图模式的完整机制、算子从框架到芯片的路径 | C3 |
| 框架层报错的分层定位 | C3 / E1 |