
前言
搞清楚昇腾 910 的硬件结构,很多性能优化的手段就不需要死记硬背了------理解了底层,上层该怎么做是自然推导出来的。
一、达芬奇架构的核心:Cube、Vector、Scalar
昇腾 910 的 AI Core 采用达芬奇架构,每个 AI Core 里有三种计算单元:
| 计算单元 | 功能 | 典型算子 | 性能特点 |
|---|---|---|---|
| Cube Unit | 矩阵乘法 | Conv、MatMul、Linear | 1 个周期算 16×16×16 的矩阵乘 |
| Vector Unit | 向量运算 | ReLU、Softmax、Add | 1 个周期处理 256 个 FP16 元素 |
| Scalar Unit | 标量控制 | 循环、分支、地址计算 | 类似 CPU 的标量处理 |
三种单元可以并行工作。Cube 在算矩阵乘的时候,Vector 可以同时做激活函数,Scalar 在准备下一批数据的地址。这个设计让 Conv+ReLU 这种连续操作不用等前一步算完再开始。
910 有 64 个 AI Core,每个 AI Core 有独立的 Cube、Vector、Scalar。这意味着理论上 64 个算子可以同时在不同 Core 上执行(如果数据没有依赖的话)。
二、存储层次:从 HBM 到 UB
数据在不同存储之间搬来搬去,是性能调优的核心问题。昇腾 910 的存储层次:
| 存储层级 | 容量 | 带宽 | 延迟 | 用途 |
|---|---|---|---|---|
| HBM | 32GB | 1.2TB/s | ~100ns | 模型权重、KV Cache |
| L2 Cache | 共享 8MB | ~10TB/s | ~20ns | 热点数据缓存 |
| UB(Unified Buffer) | 每核 128KB | ~30TB/s | ~5ns | 算子计算的输入输出 |
| 寄存器 | 每核 64KB | - | ~1ns | 临时变量、累加器 |
数据搬运的瓶颈
一次矩阵乘法的计算量是 2 × M × K × N FLOPs。数据搬运量是 (M×K + K×N + M×N) × sizeof(float16)。当矩阵不够大的时候,搬运时间大于计算时间------这就是「带宽瓶颈」。
910 的 Cube Unit 峰值算力是 256 TFLOPS(FP16),HBM 带宽是 1.2TB/s。一个 FP16 元素占 2 字节,所以「计算/带宽」的平衡点是:
计算量 / 搬运量 = 256T / (1.2T / 2) = 427
也就是说,每个字节搬运过来,需要做 427 次 FP16 运算才能打满算力。这解释了为什么小 batch 推理慢------矩阵太小,算力浪费了。
三、多卡互联:HCCS 和 PCIe
910 的多卡互联有两种方式:
HCCS(Huawei Cache Coherence System)
910 内部用的互联协议,带宽 392GB/s(全双工),延迟 <1us。同服务器内的卡间通信走 HCCS,适合 AllReduce 等集合通信。
PCIe 4.0
跨服务器通信走 PCIe,带宽 64GB/s(x16),延迟 5-10us。比 HCCS 慢 6 倍,所以跨机训练的通信开销远大于单机。
互联拓扑图
单机8卡拓扑:
[NPU0] ←HCCS→ [NPU1] ←HCCS→ [NPU2] ←HCCS→ [NPU3]
↕ HCCS ↕ HCCS ↕ HCCS ↕ HCCS
[NPU4] ←HCCS→ [NPU5] ←HCCS→ [NPU6] ←HCCS→ [NPU7]
HCCL 做拓扑感知的时候,会优先用 HCCS 通道,避开 PCIe 的瓶颈。
四、为什么适合跑大模型
大模型(LLaMA、GPT 等)的推理特征是:大矩阵乘法 + 长序列 KV Cache。昇腾 910 的硬件设计正好匹配这两个特征:
大矩阵乘法 :Cube Unit 的 16×16×16 矩阵乘,在 batch 大、序列长的时候利用率最高。一个 LLaMA-7B 的 Linear 层,输入矩阵是 [batch×seq, 4096],权重矩阵是 [4096, 4096],乘出来是 [batch×seq, 4096]。batch=8、seq=2048 的时候,矩阵乘法的数据量足够打满 Cube Unit。
长序列 KV Cache:32GB 的 HBM 可以存下长序列的 KV Cache。LLaMA-7B 在 910 上,batch=8、序列 4096,KV Cache 只占 16GB,还有余量。加上 PagedAttention 的按需分配,显存利用率能到 90%。
多卡并行:HCCS 的 392GB/s 带宽,让 AllReduce 的通信开销控制在 15% 以内(8 卡训练)。对比 NVLink 的 600GB/s,差距不大,而且 HCCL 的拓扑感知能弥补一部分差距。
五、跟 A100 的硬指标对比
| 指标 | 昇腾 910 | NVIDIA A100 |
|---|---|---|
| FP16 算力 | 256 TFLOPS | 312 TFLOPS |
| INT8 算力 | 512 TOPS | 624 TOPS |
| HBM 容量 | 32GB | 40GB/80GB |
| HBM 带宽 | 1.2TB/s | 1.6TB/s |
| 互联带宽 | 392GB/s (HCCS) | 600GB/s (NVLink) |
| AI Core / SM 数量 | 64 | 108 |
| 功耗 | 310W | 400W |
910 的绝对算力低于 A100,但功耗也低 23%。在算力/功耗比上,910 是 826 GFLOPS/W,A100 是 780 GFLOPS/W。加上国产芯片的采购成本和供应链优势,910 在大规模部署时的性价比不输 A100。
六、软件栈怎么适配硬件
昇腾的软件栈(CANN)是针对达芬奇架构深度优化的:
- GE:根据 Cube/Vector/Scalar 的并行能力做算子调度
- ATC:编译时选择 Cube 或 Vector 实现,匹配 AI Core 的计算能力
- AOE:搜索最优的 tile 大小,让 UB 的利用率最大化
- HCCL:根据 HCCS 拓扑选择通信路径
理解硬件架构之后,这些软件优化的逻辑就不难理解了------都是在匹配硬件的特点,让数据流动和计算能力对齐。
参考资源
- 昇腾 910 产品页:https://www.hiascend.com/product/ascend910
- 达芬奇架构白皮书:https://www.hiascend.com/document/detail/zh/CANN/
- CANN 性能优化指南:https://www.hiascend.com/document/detail/zh/CANN/
- HCCL 通信库文档:https://www.hiascend.com/document/detail/zh/CANN/
总结
昇腾 910 的硬件设计围绕两个核心:Cube Unit 做大矩阵乘法、HBM 存大模型权重和 KV Cache。理解了存储层次和计算单元的并行能力,就能推导出大部分优化手段------大 batch 打满 Cube、减少 HBM 搬运用 UB 缓存、HCCS 拓扑感知降低通信延迟。910 的绝对算力虽然不如 A100,但算力功耗比更优,加上国产供应链优势,大规模部署的性价比不输竞品。