昇腾软件栈与开发者生态:CANN、TorchNPU、MindSpore、MindSpeed 与 Mi
这篇文章回答一个核心问题:开发者写下一个 PyTorch 模型之后,它究竟如何穿过昇腾软件栈,最终在 NPU 上执行?
整理日期:2026-09-10。
1. 衡量 AI 芯片“好不好用”,不能只看芯片
AI 芯片的最终使用者之一是开发者。对开发者而言,“好用”意味着:常见模型能直接跑、缺失算子少、框架迁移成本低、性能问题可定位、第三方工具可接入、版本兼容关系清晰。
因此一个完整 AI 平台至少需要同时解决:
- 硬件抽象:如何管理 Device、Stream、Event、Memory、Kernel。
- 算子执行:常见 NN/Transformer 算子如何高性能执行。
- 图执行:如何做图优化、融合、内存复用和任务下发。
- 框架适配:PyTorch/MindSpore 等如何调用 NPU。
- 分布式通信:多卡训练与推理如何做集合通信。
- 训练/推理系统:如何做并行、调度、KV Cache、Continuous Batching、PD 分离等。
- 工具链:Profiling、Debug、Compiler、Dump、运维如何完成。
这也是为什么“生态”不是芯片之外的附属品,而是把理论算力变成可用算力的转换层。
2. CANN 是昇腾软件栈的核心底座
CANN(Compute Architecture for Neural Networks)是面向昇腾 AI 处理器的异构计算平台。可以把它类比为一个广义的软件平台层,而不是简单把它理解成“昇腾版 CUDA”。
CANN 中包含多个不同职责的子系统:
| 组件 | 职责 | 可类比概念 |
|---|---|---|
| Runtime | 设备、内存、Stream、Event、任务调度等运行时能力 | CUDA Runtime/Driver 的一部分职责 |
| GE | Graph Engine,负责计算图编译、优化与执行控制 | 图编译器 + 图执行器 |
| AOL / ops | 硬件亲和、高性能算子实现 | cuDNN/cuBLAS/专用算子库的部分角色 |
| HCCL | 多 NPU 集合通信与点对点通信 | NCCL |
| Ascend C | 面向 NPU Kernel 的编程接口 | CUDA C++ Kernel 编程层,但架构不同 |
| BiSheng | 编译 Ascend C / AI Core Device 代码 | nvcc/device compiler 的部分角色 |
| 调试与性能工具 | Profiling、Dump、内存分析、调优 | Nsight/Profiler 等工具链角色 |
CANN 8.5 开始进行了明显的组件解耦,例如 ops、HCCL、HIXL 等可以独立升级。CANN 9.0 的公开版本继续列出了 GE、Runtime、HCCL、ops、PTO ISA 等组件。
**重要认知:**CANN 不是一个单库,而是一整套“编译 + Runtime + 图 + 算子 + 通信 + 工具”的系统软件栈。
3. GE:为什么图引擎仍然重要
GE(Graph Engine)是计算图编译与执行控制中心。典型能力包括:
- 图优化;
- 多 Stream 并行;
- 内存复用;
- 模型下沉;
- 不同前端框架/模型格式的图接入。
在 eager/single-op 模式中,算子逐个下发,开发体验灵活,但会带来 Kernel launch、Python 调度和同步等开销。图模式将更大的计算区域捕获后统一优化和执行,因此可以进一步做融合、调度与内存规划。
这与现代 PyTorch 里的 torch.compile、Dynamo/Inductor、CUDA Graph 等方向有相似的系统动机:减少框架层动态开销,让编译器获得更大的优化视野。
4. TorchNPU:昇腾接入 PyTorch 的关键适配层
你原笔记中的“python-adapter”建议统一改成 TorchNPU。
TorchNPU 是 Ascend for PyTorch 社区的核心适配插件,使 PyTorch 能直接调用昇腾 NPU。其作用不仅是把 .cuda() 改成 .npu(),还涉及:
- PyTorch Operator → Ascend Operator 映射;
- Device/Memory/Stream 接入;
- Distributed 与 HCCL 集成;
- DTensor、FSDP2 等分布式能力适配;
- Graph Mode、NPUGraph 等执行优化;
- Profiling、WatchDog、内存管理等系统能力。
因此更准确的链路是:
PyTorch Model
↓
PyTorch Dispatcher / torch.compile / Distributed
↓
TorchNPU
↓
CANN GE / Runtime / Operators / HCCL
↓
Ascend NPU
这解释了为什么“兼容 PyTorch”并不等于“模拟 CUDA API”。一条更可持续的路线是直接进入 PyTorch 的扩展与硬件后端机制,让上游框架本身能够识别 NPU。
5. MindSpore、MindSpeed、MindIE 分别是什么
这三个名字非常容易混淆。
| 组件 | 定位 | 典型使用者 |
|---|---|---|
| MindSpore | 完整 AI 框架,可用于训练、微调和推理 | 希望使用华为自研框架的模型开发者 |
| MindSpeed / MindSpeed LLM | 大模型训练加速与适配体系,围绕并行、内存、通信和模型适配提升训练效率 | 预训练、后训练、大规模分布式训练团队 |
| MindIE | 面向昇腾的大模型推理系统/套件 | 在线 Serving、批量推理、生产部署 |
MindSpeed
MindSpeed 更接近“训练系统加速层”,而不是新的基础框架。当前 MindSpeed LLM 已与 Megatron Core、FSDP2 等训练后端形成适配关系,目标是让大模型训练在昇腾硬件上获得更好的并行效率、显存利用与通信效率。
MindIE
MindIE LLM 已开源,公开能力包括 Continuous Batching、PagedAttention、FlashDecoding 等大模型推理特性。它的定位不是“模型格式转换工具”,而是完整的 LLM 推理与 Serving 系统。
因此可以把它和 vLLM、SGLang 放到同一大类里比较,但具体架构、调度器、Kernel、模型支持和生态成熟度不同。
6. 第三方生态:不要把所有项目都叫“训练加速库”
原始笔记里把 FSDP2、Megatron、DeepSpeed、verl、AReaL、LLaMA-Factory 放在一类,这是不够准确的。
| 项目 | 更准确分类 |
|---|---|
| FSDP2 | PyTorch 原生分布式参数分片训练能力 |
| Megatron Core | 大模型分布式训练与并行基础库 |
| DeepSpeed | 微软开源的大规模训练与推理优化系统 |
| verl | 面向 LLM 强化学习后训练的分布式框架 |
| AReaL | 强化学习/Agentic RL 后训练系统 |
| LLaMA-Factory | 面向模型微调、训练配置与数据流程的应用型训练框架 |
| vLLM | 高吞吐 LLM 推理与 Serving 引擎 |
| SGLang | 高性能 LLM/多模态 Serving 与 Agent Runtime |
昇腾生态真正需要做的是让这些上层系统通过 TorchNPU、CANN 和高性能 Kernel 获得可靠的 NPU 后端。
7. vLLM 与 SGLang 在昇腾上的接入方式
vLLM
vLLM Ascend 已明确采用 hardware plugin 机制,将 Ascend NPU 后端从 vLLM 核心框架中解耦。这个模式很值得关注,因为它代表 AI Infra 生态正在从“fork 一套专用版本”走向“上游框架 + 硬件插件”。
SGLang
SGLang 当前已经具备 Ascend NPU 支持,昇腾侧也有相关适配、Kernel 和工程仓库。与其简单写“原生支持”,更准确的说法是:SGLang 的硬件生态已经包含 Ascend 后端,但具体版本仍需按 SGLang、CANN、TorchNPU、Triton-Ascend 的兼容矩阵部署。
8. 为什么版本矩阵是 NPU 生态的核心工程问题
AI 软件栈不是普通 Python 包组合。一个可工作的环境通常要求:
Driver / Firmware
↕
CANN
↕
TorchNPU
↕
PyTorch
↕
vLLM / SGLang / MindSpeed / verl
↕
模型与自定义 Kernel
任何一层 ABI、Operator Schema、Compiler IR、Kernel API 或依赖版本变化,都可能造成兼容问题。
例如当前 TorchNPU 官方兼容表会明确绑定 PyTorch 与 CANN 版本;vLLM Ascend 也强调应把 vLLM、vLLM Ascend、PyTorch、TorchNPU、CANN、Triton-Ascend 当成一个完整兼容集合,而不是随意组合版本。
这类“版本工程”本身就是 AI Infra 的重要能力。
9. “昇腾全面开源开放”应该怎样准确理解
华为在 2026 年公开表述 CANN 已全面开源,并且 CANN 社区当前可看到 GE、Runtime、HCCL、Operator、Transformer 加速库等大量项目。
但技术笔记里不建议直接写:“昇腾目前比 NVIDIA 更开源。”
原因是“开放程度”至少包含:
- Runtime 源码;
- Kernel 编程接口;
- 编译器核心;
- 虚拟 ISA/IR;
- 数学/神经网络库源码;
- 通信库;
- 驱动;
- 硬件 ISA;
- 框架上游贡献程度;
- 社区治理方式。
不同平台在不同层面的开放程度不同,没有一个简单的二元答案。
同样,“毕昇编译器是目前唯一闭源组件”也不建议直接作为事实写入。公开资料能够确认 BiSheng 工具及其功能,但是否、哪些内部编译器模块完整开放,应按具体仓库和版本逐项核实。
10. 从 AI Infra 视角学习这套软件栈
建议沿着一条模型请求实际执行路径学习:
用户请求
→ vLLM / SGLang / MindIE Scheduler
→ PyTorch / TorchNPU
→ Graph / Operator Dispatch
→ AOL / Custom Kernel
→ CANN Runtime
→ NPU
→ HCCL / UnifiedBus
→ 其他 NPU
每遇到性能问题,都问四个问题:
- 算子慢,还是调度慢?
- 算力瓶颈,还是 HBM / 网络带宽瓶颈?
- 单卡慢,还是多卡扩展效率差?
- 框架层、编译层、Runtime 层还是硬件层?
能够沿这条路径定位问题,就从“会使用昇腾”进入了“理解昇腾 AI Infra”。