Ascend/pytorch 仓库源码分析整理,涵盖插件架构、核心模块、算子融合、HCCL 分布式训练等关键技术点。内容面向有一定深度学习框架基础的技术读者。
一项目概述
1.1 什么是 torch_npu
torch_npu 是华为昇腾官方开发的 Ascend Extension for PyTorch(昇腾 PyTorch 扩展插件),核心使命是让 PyTorch 框架能够无缝驱动 昇腾 NPU,使开发者无需修改 PyTorch 代码即可调用昇腾 AI 处理器的强大算力。
torch_npu 就是那个转接头——它一头接 PyTorch 的标准接口,另一头接昇腾 NPU 的底层硬件,让两边顺畅配合。
1.2 核心技术定位
| 层级 | 技术 | 说明 |
|---|---|---|
| 应用层 | PyTorch 前端 API | 开发者写的 torch.nn、torch.optim 等标准 PyTorch 代码 |
| 适配层 | torch_npu 插件 | 本项目的核心——做框架到硬件的桥接 |
| 中间件层 | CANN | 昇腾配套的异构计算架构,负责算子调度 |
| 硬件层 | 昇腾 NPU | 实际执行计算的 AI 处理器(910B / 310P 等) |
二整体架构
2.1 仓库目录结构
Ascend/pytorch/
├── torch_npu/ # 🏠 主 Python 包(核心实现)
│ ├── __init__.py # 入口文件,初始化所有子模块
│ ├── _afd/ # AFD 模块:Ascend Framework Dispatcher(分布式推理调度)
│ ├── _inductor/ # PyTorch Inductor 后端适配
│ │ └── ascend_npu_ir/ # 基于 MLIR 的 IR 和代码生成
│ ├── contrib/ # 自定义算子/模块(融合注意力、量化等)
│ │ ├── function/ # fused_attention, nms, iou 等
│ │ └── module/ # multihead_attention, deform_conv 等
│ ├── npu/ # NPU 底层实现(amp、graphs、memory、streams 等)
│ │ ├── aclnn/ # ACLNN 算子 API
│ │ └── npugraph_ex/ # NPUGraph 推理优化
│ └── profiler/ # 性能分析工具
├── torchnpugen/ # 代码生成工具——生成自定义算子注册代码
│ ├── autograd/ # 自动微分代码生成
│ └── templates/ # C++/Python 代码模板
├── third_party/ # 第三方依赖
│ ├── acl/ # ACL 运行时头文件和 stub
│ ├── hccl/ # HCCL(昇腾集合通信库)
│ ├── dcmi/ # DCMI(设备管理接口)
│ └── torch-mlir/ # MLIR 编译器基础设施
└── examples/ # 示例代码
2.2 模块依赖关系
三核心模块详解
3.1 torch_npu/__init__.py —— 入口初始化
这是插件的"总开关",负责以下关键任务:
- 设备冲突检测:检查是否同时加载了多个加速器(如同时有 NPU 和 CUDA),防止资源冲突
- 加载 NPU 底层库:导入
torch_npu.npu,背后会加载libhccl.so(集合通信库)和libascendcl.so(ACL 运行时) - 注册所有子模块:AMP 混合精度、
_afd调度、_inductor编译后端、contrib自定义算子、profiler 等 - 猴子补丁(Monkey Patch):为 PyTorch 原生 Tensor 和 Module 添加 NPU 特定的方法和属性
- CANN 版本检查:确保安装的 CANN 版本与当前插件版本兼容
import torch
import torch_npu.npu
import torch_npu._afd
import torch_npu._inductor
from torch_npu import contrib, profiler
# 为 Tensor/nn.Module 打补丁,添加 .npu() 等方法
from torch_npu.utils import _add_tensor_methods, _apply_module_patch
# 注册 inductor 后端
torch._inductor.config.npu_backend = "mlir" # MLIR 后端
3.2 torch_npu._afd/ —— AFD 分布式推理调度模块
什么是 AFD? AFD 是昇腾的分布式推理调度框架。在超大模型(如 MoE 大语言模型)推理时,需要将计算分配到多个 NPU 设备上,AFD 负责协调"Attention 计算"和"FFN(前馈网络)计算"之间的数据流转和调度时序。
核心类是 ScheduleContextHolder,封装了分布式推理中复杂的调度逻辑:
class ScheduleContextHolder:
"""管理分布式推理的调度上下文"""
def __init__(self,
schedule_mode: int, # 0=调度FFN, 1=调度Attention
session_num: int, # 会话数量
micro_batch_num: int, # 微批次数量
selected_expert_num: int, # MoE 中选中的专家数量
expert_num: int, # 专家总数
attn_to_ffn_token_size: int,
ffn_to_attn_token_size: int,
...):
底层通过 torch_npu._C._afd.ScheduleContextHolder 调用 C++ 实现。
3.3 torch_npu._inductor/ —— Inductor 编译后端
科普:PyTorch Inductor 是什么?
PyTorch 2.0 引入了 torch.compile(),它的工作流程分为三层:
- TorchDynamo(前端):将动态图代码"快照"成 FX Graph
- AOTAutograd:对 FX Graph 进行图级别 + 算子级别的分解
- Inductor(后端):接收分解后的算子图,生成高效的设备特定代码
Inductor 的核心思想是融合编译——把相邻的多个小算子(如 ReLU + Conv2d)合并成一个大算子,避免中间结果写回内存的开销,大幅提升计算效率。
昇腾 Inductor 的两套实现
| 后端 | 路径 | 说明 |
|---|---|---|
| 传统 Triton 后端 | torch_npu/_inductor/codegen/triton.py | 基于 Triton 生成内核代码,在 NPU 上模拟执行,过渡方案 |
| 新一代 MLIR 后端 ⭐ | torch_npu/_inductor/ascend_npu_ir/ | 基于 MLIR 的代码生成,昇腾核心投入方向 |
MLIR 科普
类比建筑施工:MLIR 像一套从建筑设计图 → 结构施工图 → 钢筋水泥配料单的完整图纸系统,每层图纸都有专门的优化工具。
Inductor-MLIR 三级架构
| 组件 | 层级 | 作用 |
|---|---|---|
| Dynamo | 前端编译器 | 将 PyTorch 动态图代码捕获为 FX Graph |
| Inductor-MLIR | 核心编译器 | 将 FX Graph 转为 MLIR 多层级 IR,进行算子融合、类型优化、图化简 |
| MLIR CodeGen | 代码生成器 | 针对昇腾硬件生成专属高性能底层代码 |
三种等效使用方式:
# 方式1:config 配置
import torch_npu._inductor
torch._inductor.config.npu_backend = "mlir"
torch.compile(model)(x)
# 方式2:环境变量
import os
os.environ['TORCHINDUCTOR_NPU_BACKEND'] = 'mlir'
torch.compile(model)(x)
# 方式3:compile options
torch.compile(model, options={"npu_backend": "mlir"})(x)
3.4 torch_npu.npu/ —— NPU 底层实现
这是最接近 CANN / ACL 的层,提供 NPU 的核心能力:
| 子模块 | 功能 |
|---|---|
amp/ | 混合精度训练——FP16/BF16 自动转换,配合 GradScaler 防止下溢 |
graphs/ | NPU 图模式——torch.npu.Graph 用于批量执行优化 |
streams/ | 计算流——torch.npu.Stream 类似于 CUDA Stream,用于异步并行 |
memory/ | 内存管理——NPU 显存分配和复用策略 |
aclnn/ | ACLNN 算子 API——昇腾新一代算子接口库 |
npugraph_ex/ | NPUGraph 推理优化——用于生产级推理部署 |
3.5 torch_npu.contrib/ —— 自定义融合算子
PyTorch 原生算子不能满足所有需求,昇腾提供了一套高度优化的自定义算子,分两类:
自定义函数(Function):
fused_attention:融合的 Self-Attention(QKV 投影 + Scaled Dot-Product Attention + Dropout)fuse_add_softmax_dropout:融合 Add + Softmax + Dropoutmatmul_transpose:矩阵乘 + 转置融合nms:非极大值抑制(目标检测后处理)iou、anchor_generator、bbox_coder:检测相关工具
自定义模块(Module):
multihead_attention:融合多头注意力模块deform_conv:可变形卷积linear_a8w8_quant:INT8 量化线性层bidirectional_lstm:双向 LSTM
3.6 torchnpugen/ —— 代码生成工具
这个工具是给插件开发者用的——它能自动生成大量模板化的代码,减少人工维护成本。
gen_autograd.py:自动生成反向传播(autograd)相关代码gen_variable_type.py:生成VariableType(PyTorch 自动微分核心类)相关代码gen_backend_stubs.py:生成后端算子注册代码templates/:C++ 和 Python 代码模板
简单来说,torchnpugen 是"用代码生成代码"的工具链,让插件开发者不需要手动编写大量重复性的算子注册逻辑。
四算子融合技术详解
本章节专门拆解"算子融合"技术——这是现代 AI 编译器提升计算性能的核心手段。
4.1 为什么要融合?——性能瓶颈的根源
在深度学习模型中,计算不是唯一的瓶颈,内存访问往往才是真正的性能天花板。
举个例子,一个经典的 ResNet Block 包含以下操作序列:
如果把每个算子都独立执行,会发生什么?
每一次"内存写入 + 内存读取"(即中间结果写回)都是一次显存的读写操作。HBM 的带宽虽然很高,但和算力相比,内存访问速度远跟不上计算速度——这就好比工厂流水线做得很快,但原材料配送跟不上。
4.2 算子融合如何提升 NPU 性能
昇腾 NPU 的算力(TFLOPS)和内存带宽(HBM)之间存在"算力/带宽比"瓶颈。融合策略通过以下三个维度提升性能:
4.2.1 减少内存访问次数
融合后,中间结果不需要写回 HBM,可以在片上缓存(On-Chip Cache)中直接流转。以 Conv+Bias+ReLU 为例:
- 融合前:需要 3 次独立的内存读写
- 融合后:只需 1 次写回,理论上可节省 60%~80% 的内存带宽占用
4.2.2 提高指令并行度
昇腾 NPU 有专门的张量计算单元和向量计算单元,可以同时工作。融合后,编译器可以更聪明地安排指令流水线(Instruction Pipelining),让"上一个算子的尾部"和"下一个算子的头部"并行执行,最大化硬件利用率。
4.2.3 减少 kernel 启动开销
每次调用一个 NPU kernel(核函数),都有固定的启动开销(kernel launch overhead),包括参数传递、线程块调度等。融合后,原本 N 个 kernel 的启动变成 1 个,启动开销降低 N 倍。
4.3 典型融合模式
卷积系列融合
| 融合模式 | 包含算子 | 适用场景 | 性能收益 |
|---|---|---|---|
| Conv + Bias + ReLU | 卷积 → 偏置加 → 激活 | 几乎所有 CNN 基本单元 | 50%+ |
| Conv + BatchNorm | 卷积 → 批归一化 | 训练阶段推理加速 | 可融合为单个 Conv |
| Conv + Add + ReLU | 两分支卷积 → 加法 → 激活 | ResNet 残差连接 | 40%+ |
| Conv + Sigmoid | 卷积 → Sigmoid | Segmentation 输出层 | 减少 2 次显存读写 |
矩阵运算融合
| 融合模式 | 包含算子 | 适用场景 | 性能收益 |
|---|---|---|---|
| MatMul + Add + ReLU/GELU | 矩阵乘 → 偏置加 → 激活 | MLP/FFN 层(大模型核心) | 60%+ |
| MatMul + Transpose | 矩阵乘 → 转置 | Transformer Q/K/V 投影 | 显著减少访存 |
| Linear + Dropout | 线性层 → Dropout | 训练阶段 | 减少 kernel 启动次数 |
Attention 融合
| 融合模式 | 包含算子 | 适用场景 | 性能收益 |
|---|---|---|---|
| QKV Projection Fusion | 三个独立 MatMul → 合并为一次大矩阵乘 | Transformer 标准实现 | 减少 2/3 的内存访问 |
| Scaled Dot-Product Attention | Softmax(QK^T)V 全流程 | 所有 Self-Attention | 性能提升 2~5 倍 |
| Attention + Dropout + Add + FFN | 完整 Transformer Block 核心 | LLM 训练/推理 | 巨大收益 |
元素级融合(Elementwise Fusion)
适用于没有数据依赖的"逐元素操作":
典型模式:Add + Softmax + Dropout、LayerNorm + Dropout、GELU + Add 等。
4.4 昇腾 NPU 的融合实现机制
4.4.1 Inductor-MLIR 融合优化流程
4.4.1 Inductor-MLIR 融合优化流程
在昇腾的 Inductor-MLIR 框架中,融合发生在 MLIR 的多个层级:
融合 Pass(Pass)是编译器中的一个优化步骤,它会遍历 MLIR 图,识别出可以融合的算子模式,然后用融合后的算子替换原有序列。
4.4.2 融合的数学前提
算子能融合,必须满足数据依赖约束:
# ✅ 可以融合:b 仅仅依赖 a,没有其他分支
a = conv(x)
b = relu(a)
# ✅ 可以融合:残差连接,add 只依赖 conv 和 input,可融合
out = relu(conv(x) + x)
# ❌ 不能融合:c 依赖 b 和 a,必须等两者都完成
a = conv(x)
b = relu(a)
c = add(b, some_other_branch) # 不能和前面的 relu 融合
编译器需要分析这个数据流图(Data Flow Graph),找到"没有分支逃逸"的算子序列,才能安全融合。
4.4.3 contrib 融合算子的手工注册
除了编译器自动融合,torch_npu.contrib 还提供了手工优化的高性能融合算子:
from torch_npu.contrib.module import multihead_attention
# 直接使用融合版 Multi-Head Attention
model = multihead_attention(embed_dim=512, num_heads=8)
这些手工融合算子经过专门优化,通常比编译器自动融合效果更好,适用于对性能敏感的关键路径。
五HCCL 分布式训练详解
本章节深入剖析 HCCL 在多机多卡训练中的通信机制——这是大模型分布式训练的核心基础设施。
5.1 为什么分布式训练需要集合通信?
先理解一个基本矛盾:
- 单卡算力有限:一块昇腾 NPU 的算力再强,也装不下千亿参数大模型的全部参数
- 模型必须分布在多卡甚至多机上:参数、梯度、优化器状态需要分散存储
- 训练是迭代的:每一步迭代都需要"所有卡上的梯度汇到一起求平均、更新参数,再分发下去"
这就产生了通信需求——多张卡之间必须频繁交换数据(梯度、参数)。
5.2 集合通信的四大基本算子
HCCL 提供了 4 种最基础的集合通信(Collective Communication)操作,理解它们是理解分布式训练的基础:
5.2.1 AllReduce —— 最核心的算子
作用:多卡上的数据分别求和,结果广播给所有卡(每个人都得到一份完整的和)
在大模型训练中的意义:梯度 AllReduce 是同步优化器(如 SGD)的核心步骤。想象成:每个人算出自己部分的梯度,然后所有人把梯度累加,再各自用同样的梯度更新参数——只有这样所有人的参数才能保持同步。
AllReduce 的实现算法:常见的有 Ring-AllReduce(环形算法)和 Tree-AllReduce(树形算法):
- Ring-AllReduce:N 张卡排成一个环,每个卡只和邻居通信,N-1 轮完成。通信量和卡数无关,适合大带宽高延迟网络。
- Tree-AllReduce:逻辑上是二叉树结构,O(log N) 轮完成,适合低延迟网络。
昇腾 HCCL 根据拓扑自动选择最优算法。
5.2.2 Broadcast —— 一发全收
作用:一张卡(root)上的数据复制到所有其他卡
典型使用场景:参数初始化、主卡(rank 0)加载预训练模型后广播给所有卡。
5.2.3 AllGather —— 人人贡献拼成完整图
作用:每张卡贡献自己的数据片段,最终所有人都拿到完整的拼接结果
典型使用场景:流水线并行(Pipeline Parallelism)中,每个 stage 输出了自己部分的激活值,需要拼成完整的激活序列传给下一个 stage。
5.2.4 ReduceScatter —— 先求和再分散
作用:先把所有卡的数据求和,然后按块分散给不同卡(每张卡拿到总和中属于自己的那片)
典型使用场景:和 AllGather 配对使用,构成完整的数据并行梯度同步流程。
5.3 多机多卡通信拓扑
5.3.1 单机多卡(Same-Host Multi-Card)
5.3.2 多机多卡(Multi-Host)
HCCL 会自动感知拓扑:在初始化时探测网卡、交换机拓扑,选择最优的路由策略。
5.4 分布式训练中的 HCCL 调用流程
5.4.1 初始化
import torch
import torch.distributed as dist
import torch_npu # 自动加载 HCCL
# 初始化分布式环境
dist.init_process_group(
backend="nccl", # 在昇腾上实际是 HCCL,但兼容 NCCL 接口
init_method="env://",
world_size=8, # 总卡数
rank=0 # 当前卡的编号(0~7)
)
# 设置当前设备
torch.cuda.set_device(rank) # 在昇腾上等效于 torch.npu.set_device()
torch.distributed 的 backend 参数在昇腾上写 "nccl" 实际会路由到 HCCL,因为昇腾实现了与 NCCL 兼容的接口,PyTorch 分布式训练的代码几乎不需要修改就能跑在昇腾上。
5.4.2 数据并行训练(最常见的场景)
数据并行是最简单粗暴的并行策略——每个卡有完整的模型副本,各自处理不同的数据 batch,然后在梯度更新前通过 AllReduce 同步梯度:
for data, target in dataloader:
# 1. 前向传播(每卡独立)
output = model(data)
loss = loss_fn(output, target)
# 2. 反向传播(每卡独立算出本地梯度)
loss.backward() # 此时每卡的梯度只是本地 batch 的,不是全局的!
# 3. 梯度 AllReduce —— 🎯 HCCL 的核心时刻
for param in model.parameters():
dist.all_reduce(param.grad, op=dist.ReduceOp.SUM)
param.grad /= world_size
# 4. 参数更新(每卡独立,但梯度相同 → 参数同步)
optimizer.step()
5.4.3 集合通信的异步执行
HCCL 支持异步启动——通信可以和其他计算并行执行(overlap):
# 异步 AllReduce,不阻塞等待结果
handle = dist.all_reduce(param.grad, op=dist.ReduceOp.SUM, async_op=True)
# 立即开始下一个计算(通信和计算 overlap)
loss2 = model2(input)
handle.wait() # 等通信完成后再使用结果
param.grad /= world_size
optimizer.step()
这叫通信与计算重叠(Computation-Communication Overlap),是分布式训练性能调优的核心手段。
5.5 HCCL 性能优化技巧
5.5.1 梯度通信与计算重叠
最有效的优化手段之一。在反向传播的同时,启动上一次迭代的梯度通信:
# 伪代码示意
for i, (data, target) in enumerate(dataloader):
output = model(data)
loss = loss_fn(output, target)
# 🎯 关键:反向的同时启动通信
# 反向传播从最后一层往前算,算完最后一层的梯度时,
# 最后一层的 AllReduce 可以和更早层的计算并行
loss.backward()
PyTorch 的 DistributedDataParallel(DDP)自动做了这个优化——它在反向传播时将梯度同步启动,极大减少了通信开销。
5.5.2 通信算子融合(Gradient Bucketing)
如果每次通信单个梯度张量,开销很大。DDP 会把多个小梯度张量打包成一个 bucket,一次通信搞定:
昇腾 HCCL 配合 PyTorch DDP 自动做 bucket 优化。
5.5.3 通信带宽优化
| 优化方向 | 具体做法 | 效果 |
|---|---|---|
| 使用高速网络 | 部署 RoCEv2 或 IB 网络,比 TCP 快 5~10 倍 | 跨机通信延迟大幅降低 |
| 调整卡间拓扑 | 同机器内卡数最大化,减少跨机通信 | 减少跨机带宽竞争 |
| 梯度压缩 | FP16 梯度通信(天然压缩一半) | 通信量减半 |
| 自适应路由 | HCCL 自动选择最优路径 | 平均带宽利用率提升 20%+ |
六第三方依赖(third_party/)
6.1 ACL(Ascend CL)——昇腾计算库
ACL(Ascend Caffe Library,后来改叫 Ascend CL)是昇腾的运行时库,提供了:
- 张量操作(
aclTensor) - 算子执行(
aclOp) - 内存管理(
aclrt) - 图编译(
ge— Graph Engine)
6.2 HCCL —— 集合通信库
HCCL 是昇腾的多卡通信库,相当于 NVIDIA 的 NCCL,提供:
AllReduce(多卡梯度求和)Broadcast(广播)AllGather(收集)ReduceScatter(分散求和)
在大模型分布式训练中,HCCL 是多 NPU 卡间数据同步的关键。
6.3 DCMI —— 设备管理
DCMI 是昇腾的设备管理接口,负责 NPU 设备的发现、初始化、状态查询等底层操作。
七关键设计思想
7.1 零入侵接入(Zero-Invasive Integration)
torch_npu 设计的核心原则是:最小化对用户代码的修改。理想情况下,用户只需:
import torch
import torch_npu # 这一行就够了
device = torch.device("npu")
model = MyModel().to(device) # 正常写法,torch_npu 自动处理
7.2 猴子补丁(Monkey Patch)
PyTorch 的扩展机制决定了插件需要"修补"一些关键类。torch_npu 通过 _add_tensor_methods()、_apply_module_patch() 等函数为 PyTorch 的:
torch.Tensor— 添加.npu()等方法torch.nn.Module— 修改forward()以支持 NPU 特定优化torch.Storage— 支持 NPU 显存管理
7.3 版本匹配策略
PyTorch 版本演进很快,CANN 版本也在迭代,torch_npu 采用了严格的版本对齐策略:
- 分支命名:
{PyTorch版本}-{CANN版本},如v2.7.1-7.3.0 - PyTorch 2.1.0 ~ 2.8.0 都有对应的插件版本
- 长期支持(LTS)分支维护 3.5 年,常规分支维护 1 年
八快速入门示例
8.1 最简验证(确认安装成功)
import torch
import torch_npu # 激活插件
x = torch.randn(2, 2).npu() # 在 NPU 上创建张量
y = torch.randn(2, 2).npu()
z = x @ y # 矩阵乘法
print(z)
8.2 混合精度训练
from torch_npu.npu.amp import GradScaler, autocast
scaler = GradScaler()
for data, target in dataloader:
with autocast():
output = model(data)
loss = loss_fn(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
8.3 torch.compile 编译加速(MLIR 后端)
import os
os.environ['TORCHINDUCTOR_NPU_BACKEND'] = 'mlir'
import torch
import torch_npu
model = MyModel().npu()
model = torch.compile(model, options={"npu_backend": "mlir"})
output = model(input_npu)
8.4 分布式数据并行(DDP)训练
import os
import torch
import torch.distributed as dist
import torch_npu
# 启动方式(2机8卡示例)
# torchrun --nnodes=2 --nproc_per_node=4 --node_rank=0 --master_addr=10.0.0.1 train.py
dist.init_process_group(backend="nccl", init_method="env://")
torch.cuda.set_device(dist.get_rank())
model = MyModel().npu()
model = torch.nn.parallel.DistributedDataParallel(model)
for data, target in dataloader:
output = model(data)
loss = loss_fn(output, target)
loss.backward() # DDP 自动做 AllReduce
optimizer.step()
九支持的硬件(Atlas 全系列)
9.1 Atlas 训练系列产品
| 产品系列 | 型号 | 芯片 | 显存 | 功耗 | 架构特点 |
|---|---|---|---|---|---|
| Atlas 900 | Atlas 900 PoD(集群) | Ascend 910 | HBM | 50kW+(集群级) | 超大规模训练集群,支持千卡互联,液冷散热 |
| Atlas 900 | Atlas 900 A2 | Ascend 910B | HBM | 机柜级 | 企业级训练集群,液冷设计 |
| Atlas 800 | Atlas 800 (910B) | Ascend 910B | 64GB HBM2e | 400W | 4U 4卡,单机训练主力 |
| Atlas A2 训练系列 | Atlas 800T A2 | Ascend 910B | 64GB | 400W | 训练推理兼顾 |
| Atlas A2 训练系列 | Atlas 900I A2 | Ascend 910B | 64GB | 300W | 2U 设计,高密度训练 |
9.2 Atlas 推理系列产品
| 产品系列 | 型号 | 芯片 | 显存 | 功耗 | 架构特点 |
|---|---|---|---|---|---|
| Atlas A2 推理系列 | Atlas 800I A2 | Ascend 310B | 大模型优化 | 300W | 企业级推理服务器,支持 Llama/ChatGLM 等大模型 |
| Atlas A3 推理系列 | Atlas 800I A3 | Ascend 310B | 大模型支持 | 300W | 新一代推理卡,LLM 推理优化 |
| Atlas A3 推理系列 | Atlas 300I A3 | Ascend 310B | 大模型支持 | 300W | 推理模块卡,适用于服务器集成 |
| Atlas A2 DC | Atlas 800 A2 DC | Ascend 910B | 训练/推理兼顾 | 400W | 数据中心通用,A2 代 |
9.3 Atlas 加速卡(Module / Card 形态)
| 产品形态 | 型号 | 芯片 | 显存 | 说明 |
|---|---|---|---|---|
| PCIe 加速卡 | Atlas 300I | Ascend 310 | 15GB | 推理卡,单槽位 |
| PCIe 加速卡 | Atlas 300T | Ascend 310 | 15GB | 训练推理双用途 |
| PCIe 加速卡 | Atlas 300I A2 | Ascend 310B | 大模型优化 | A2 代推理卡 |
| OAM 加速模块 | Atlas 300T A2 | Ascend 910B | 64GB HBM | OAM 标准形态,高带宽 |
| OAM 加速模块 | Atlas 300T A3 | Ascend 910B | 64GB HBM | A3 代 OAM 模块 |
9.4 芯片代际对照表
| 芯片名称 | 代际 | 定位 | 主要应用 |
|---|---|---|---|
| Ascend 310 | 第1代 | 推理 | 推理加速,边缘计算 |
| Ascend 310B | 第1.5代 | 推理优化 | 大模型推理优化,A2/A3 推理卡 |
| Ascend 910 | 第1代 | 训练 | 大规模训练 |
| Ascend 910B | 第2代 | 训练旗舰 | 主力训练芯片,A2/A3 全系列 |
| Ascend 910C | 第3代 | 超大规模训练 | 新一代训练芯片(规划中) |
十技术总结
技术栈全景图
- 前端框架:PyTorch 1.11+
- 编译器后端:Inductor(Triton + MLIR)
- 中间表示:MLIR(多层级 IR)
- 通信库:HCCL(多卡集合通信)
- 运行时:ACL(Ascend CL)+ CANN
- 代码生成:torchnpugen(自动生成)
- 混合精度:AMP(FP16/BF16)
- 算子融合:Inductor-MLIR 自动融合 + contrib 手工融合
- 分布式训练:PyTorch DDP + HCCL(全套集合通信)
十一参考资料
- 昇腾社区官网:https://www.hiascend.com/
- CANN 安装指南:https://www.hiascend.com/cann
- PyTorch 官方:https://pytorch.org/
- GitHub 镜像仓库:https://github.com/Ascend/pytorch