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

昇腾部署第 C2 课:多框架——昇腾上装哪个框架,几条路有什么不一样

2026-10-05

编制:观澜|日期: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 官方的 昇思的

这一课回答:

昇腾到底支持哪些框架? "插件"这条路和"原生框架"这条路,差别在哪? 我该装哪个?

为什么这一课有价值: 框架选择是框架层第一个、也是影响最大的一个决定—— 它决定你后面装什么、验什么、报错往哪查。选错了,后面每一步都别扭。


第二段 · 学习目标

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

  1. 官方口径里,昇腾向上支持哪些 AI 框架
  2. "原生框架"和"适配插件"两条路的形式差别
  3. MindSpore 这条路的包名、装法、验证命令
  4. 遇到"该装哪个"时,按什么判断
  5. 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。

这类"能用但不是你想要的那个"的错误,只能靠输出里的平台标识发现。


第九段 · 小结与下一课

三句话带走

  1. 官方口径:CANN 向上支持多种 AI 框架,包括 MindSpore、PyTorch、TensorFlow 等—— "等"字说明不止这三个(本课不补全,以官方文档为准)。
  2. 两条路形式不同:插件路线(PyTorch + torch_npu,装两个包) vs 原生路线(MindSpore 昇腾版,装一个包、名字带后端后缀)。 判据:装两个还是装一个。
  3. 不管哪个框架,验收都问三件事:① 版本是什么 ② 能不能算 ③ 算在哪张卡上—— 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 题)

  1. 同样是"在昇腾上用某个框架",PyTorch 和 MindSpore 在装包数量上为什么不一样?
  2. mindspore.run_check() 的输出里,哪一句能证明"这是昇腾版"?如果不看这一句会漏掉什么?
  3. 官方 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
选修 · 昇腾 AI 部署实操 本机读完 0/51
选修 C · 昇腾 AI 部署实操
从零把昇腾 AI 部署学一遍:先看懂分几层,再逐层装起来,最后出问题能自己定位到哪一层。不需要先有卡就能开始。
看完整学习路径(6 站 + 3 门选修) · 进度只存在你这台设备的浏览器里,不用登录
辽ICP备2026019944号-1