主题
CANN 软件栈全景
软件栈整体架构
CANN 软件栈是连接上层 AI 框架与底层昇腾硬件的完整软件体系。理解其分层结构是掌握 CANN 开发的基础。
┌──────────────────────────────────────────────────────────────┐
│ 用户应用层 │
│ AI 推理服务 / 训练任务 / 边缘部署应用 │
└──────────────────────────┬───────────────────────────────────┘
│
┌──────────────────────────▼───────────────────────────────────┐
│ AI 框架层 │
│ MindSpore PyTorch TensorFlow PaddlePaddle │
└──────────────────────────┬───────────────────────────────────┘
│ Framework Adaptor
┌──────────────────────────▼───────────────────────────────────┐
│ CANN 软件栈 │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 计算语言层(AscendCL) │ │
│ │ 设备管理 | 内存管理 | 模型推理 | 流管理 | DVPP │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 计算服务层 │ │
│ │ AOL算子库 | AOE调优引擎 | Framework Adaptor │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 计算编译层 │ │
│ │ 图编译器(GE) | TBE张量加速引擎 | ATC模型转换工具 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 计算执行层 │ │
│ │ Runtime运行时 | GE图引擎 | HCCL集合通信库 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────┬───────────────────────────────────┘
│
┌──────────────────────────▼───────────────────────────────────┐
│ 驱动层 │
│ NPU Driver(内核态 + 用户态) │
└──────────────────────────┬───────────────────────────────────┘
│
┌──────────────────────────▼───────────────────────────────────┐
│ 硬件层 │
│ 昇腾 AI 处理器(达芬奇架构) │
└──────────────────────────────────────────────────────────────┘CANN 安装包组成
CANN 软件包按功能分为多个独立安装包:
| 安装包 | 文件名示例 | 内容 |
|---|---|---|
| Toolkit | ascend-cann-toolkit_8.x_linux-aarch64.run | 完整开发工具链(ATC/AscendCL/TBE等) |
| NNRT | ascend-cann-nnrt_8.x_linux-aarch64.run | 推理运行时(部署用) |
| NNAE | ascend-cann-nnae_8.x_linux-aarch64.run | 训练运行时 |
| Kernels | ascend-cann-kernels-910b_8.x_linux.run | 预编译算子二进制 |
| HCCL | 包含在 Toolkit 中 | 集合通信库 |
安装目录结构
/usr/local/Ascend/
├── ascend-toolkit/
│ └── latest/
│ ├── bin/ # ATC、atc等工具
│ ├── lib64/ # 动态库
│ ├── include/ # 头文件(AscendCL等)
│ ├── python/ # Python 绑定
│ ├── opp/ # 算子库
│ └── tools/ # 辅助工具
├── driver/ # NPU 驱动
└── firmware/ # 固件环境变量配置
使用 CANN 前需要配置环境变量:
bash
# 设置 CANN 环境(通常加入 ~/.bashrc)
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 或手动设置
export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest
export PATH=${ASCEND_TOOLKIT_HOME}/bin:${ASCEND_TOOLKIT_HOME}/compiler/ccec_compiler/bin:$PATH
export LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:$LD_LIBRARY_PATH
export PYTHONPATH=${ASCEND_TOOLKIT_HOME}/python/site-packages:$PYTHONPATH
export ASCEND_OPP_PATH=${ASCEND_TOOLKIT_HOME}/opp
export ASCEND_AICPU_PATH=${ASCEND_TOOLKIT_HOME}各组件职责详解
AscendCL(应用开发接口)
- 面向应用开发者的 C/C++ API
- 提供设备管理、内存管理、模型推理、流管理等功能
- 是开发推理应用的主要入口
GE(图引擎)
- 接收来自框架的计算图(IR)
- 执行图优化(算子融合、内存复用等)
- 将优化后的图编译为可执行模型
- 在运行时管理图的执行
TBE(张量加速引擎)
- 算子开发框架
- 提供 DSL(领域特定语言)和 TIK(底层 API)两种开发模式
- 负责将算子描述编译为 AI Core 可执行的二进制
Ascend C
- 新一代算子编程语言(基于 C++)
- 替代 TBE TIK,提供更友好的开发体验
- 支持 CPU 侧仿真调试
ATC(模型转换工具)
- 离线模型转换命令行工具
- 将 ONNX/TensorFlow/Caffe 等格式转换为昇腾 .om 格式
- 在转换过程中执行图优化和算子编译
Runtime(运行时)
- 硬件资源管理(设备、流、事件)
- 任务下发与调度
- 内存管理(HBM 分配/释放)
- 错误处理与恢复
HCCL(集合通信库)
- 分布式训练的通信基础设施
- 支持 AllReduce、AllGather、Broadcast 等 12 种通信原语
- 自动感知网络拓扑,选择最优通信算法
AOE(调优引擎)
- 自动化性能调优
- OPAT:单算子调优
- SGAT:子图调优
- GDAT:梯度调优
AOL(算子加速库)
- 预置 1500+ 基础算子
- 100+ 融合算子
- 覆盖 CV、NLP、推荐等主流场景
CANN 版本与昇腾硬件对应关系
CANN 版本与硬件型号有严格的对应关系,使用前需确认兼容性:
| CANN 版本 | 支持硬件 | 备注 |
|---|---|---|
| CANN 7.x | 910/910B/310P | 稳定版 |
| CANN 8.0 | 910B/910C/310P | 主流版本 |
| CANN 8.1+ | 910C/Atlas A2 | 最新特性 |
始终使用与硬件驱动版本匹配的 CANN 版本,版本不匹配会导致运行时错误。开发工具链概览
| 工具 | 用途 |
|---|---|
atc | 模型转换命令行工具 |
npu-smi | NPU 状态监控(类似 nvidia-smi) |
| MindStudio | 集成开发环境(IDE) |
| Profiling 工具 | 性能分析 |
msame | 模型推理测试工具 |
acl_op_compiler | 单算子编译工具 |
典型开发流程
推理应用开发流程
1. 模型准备
训练好的模型(PyTorch/TF/ONNX)
↓
2. 模型转换(ATC)
atc --model=model.onnx --framework=5 --output=model
↓
3. 应用开发(AscendCL)
初始化 → 加载模型 → 准备输入 → 推理 → 获取输出
↓
4. 部署运行
在昇腾设备上运行推理应用自定义算子开发流程
1. 算子设计
确定算子功能、输入输出规格
↓
2. 算子实现(Ascend C / TBE)
编写 Kernel 函数
↓
3. 算子注册
注册到框架(PyTorch/MindSpore)
↓
4. 算子验证
精度验证 + 性能测试
↓
5. 调优(AOE)
自动调优获得最优 Tiling 参数