第二章:云端训练芯片——四大阵营的技术博弈

各位同学,今天我们来聊聊云端训练芯片。这个领域,说白了就是AI的“发动机”。没有它,再好的算法也只是纸上谈兵。

我入行那会儿,训练一个ResNet-50要跑好几天。现在呢?几个小时就搞定了。这背后,是芯片架构的疯狂迭代。我个人习惯把云端训练芯片分成四大阵营:NVIDIA、Google、AMD,还有咱们国产的华为昇腾和寒武纪。咱们一个一个来看。

2.1 NVIDIA GPU:从“游戏卡”到“AI霸主”

NVIDIA的故事,大家都熟悉。但你可能不知道,它最早是给游戏做显卡的。我2012年做深度学习时,用的还是GTX 580。那时候CUDA生态刚起步,文档少得可怜,踩坑是家常便饭。

2.1.1 架构演进:从Kepler到Hopper

NVIDIA的架构演进,我总结为“每两年一次大升级”。咱们看几个关键节点:

架构 发布年份 核心改进 我的评价
Kepler (GK系列) 2012 SMX单元、动态并行 入门级,现在看太老了
Maxwell (GM系列) 2014 能效比大幅提升 当年做推理的首选
Pascal (GP系列) 2016 NVLink、FP16支持 我第一个大规模集群用的就是它
Volta (GV系列) 2017 Tensor Core、独立线程调度 AI训练的转折点
Turing (TU系列) 2018 RT Core、INT4/TensorRT优化 推理更强,训练一般
Ampere (GA系列) 2020 第三代Tensor Core、稀疏化 目前最主流的训练卡
Hopper (GH系列) 2022 Transformer引擎、DPX指令 专门为大模型设计

嗯,这里要注意:Volta架构的Tensor Core是个分水岭。它把矩阵乘法从通用计算单元里独立出来,专门做混合精度训练。我记得当时第一次跑FP16训练,速度直接翻倍,但精度损失几乎为零。从那以后,我就再也没用过纯FP32训练了。

核心观点:NVIDIA的成功,60%靠硬件,40%靠CUDA生态。你想想看,如果没有cuDNN、TensorRT这些库,再强的GPU也只是个“裸金属”。

2.1.2 避坑指南:显存带宽是瓶颈

我曾经在一个项目中,用A100训练GPT-2模型。理论算力足够,但实际吞吐量只有峰值的40%。查了半天,发现是显存带宽不够。模型参数太大,频繁在HBM和SRAM之间搬运数据。后来用了模型并行+梯度累积,才把利用率提上去。

警告:别只看算力(TFLOPS),更要看显存带宽(GB/s)。对于大模型,带宽往往比算力更关键。

2.2 Google TPU:为TensorFlow量身定做的“怪物”

Google的TPU,是个很有意思的产品。它不像NVIDIA那样“通用”,而是专门为TensorFlow优化的。说白了,就是“一条路走到黑”。

2.2.1 TPU架构原理

TPU的核心是Systolic Array(脉动阵列)。这东西听起来高大上,其实原理很简单:把多个乘法器排成矩阵,数据像流水一样“流”过它们。这样做的好处是,数据复用率高,功耗低。

我举个例子:假设你要做两个4x4矩阵的乘法。用传统GPU,需要16个乘法器并行工作,每个乘法器都要从内存取数据。而TPU的脉动阵列,只需要把数据从左边和上边“推”进去,结果从右边和下边“流”出来。中间的数据搬运,几乎为零。

小技巧:如果你用TPU训练,记得把batch size设大一点。TPU对大批量数据特别友好,小batch反而效率低。我一般设到1024以上。

2.2.2 TPU的演进

  • TPU v1 (2016):只做推理,不支持训练。当时主要用于Google搜索的RankBrain。
  • TPU v2 (2017):加入训练能力,支持FP32/FP16混合精度。我2018年在Google Cloud上用过,速度比V100快30%。
  • TPU v3 (2018):算力翻倍,液冷散热。嗯,这代开始支持BF16,精度比FP16好。
  • TPU v4 (2021):光互联,支持4096颗芯片互联。说实话,这规模我还没机会用,太贵了。

为什么会这样?Google把TPU做成“黑盒”,你只能通过TensorFlow/PyTorch的API调用。好处是用户不用管底层细节,坏处是灵活性差。我有个朋友想在上面跑自定义算子,折腾了两周没搞定。

2.3 AMD ROCm:开源生态的“搅局者”

AMD的ROCm,我一直觉得是“被低估的选手”。它走的是开源路线,对标CUDA。但说实话,生态成熟度还差一截。

2.3.1 ROCm的核心组件

组件 功能 对标NVIDIA
HIP CUDA代码移植工具 CUDA Runtime
MIOpen 深度学习加速库 cuDNN
RCCL 多卡通信库 NCCL
ROCgdb 调试工具 cuda-gdb

我个人习惯用HIP做代码移植。大部分CUDA代码,改几行就能跑在AMD卡上。但要注意,有些CUDA特有的API(比如cudaGraph)没有对应实现,需要自己写替代方案。

我的经验:如果你团队有CUDA开发经验,转ROCm大概需要1-2周适应期。但如果是新手,建议直接学HIP,别碰CUDA了。

2.3.2 避坑指南:驱动兼容性

我曾经在Ubuntu 20.04上装ROCm 5.0,折腾了三天。原因是内核版本不兼容。后来发现,ROCm对Linux内核版本要求很严格,必须用官方推荐的版本。建议用Ubuntu 22.04 LTS + ROCm 5.4以上版本,省心很多。

警告:ROCm目前只支持Linux,不支持Windows。如果你团队用Windows开发,建议用WSL2或者直接上Linux。

2.4 国产算力:华为昇腾与寒武纪

国产芯片这几年进步很快。我2019年第一次用华为昇腾910,当时觉得“能用,但不好用”。现在昇腾910B,已经能跟A100掰手腕了。

2.4.1 华为昇腾:从“能用”到“好用”

昇腾的核心是Da Vinci架构。它跟NVIDIA最大的不同是:采用“达芬奇”核心,每个核心包含3个Cube(矩阵计算单元)、2个Vector(向量计算单元)和1个Scalar(标量计算单元)。这种设计,对Transformer类模型特别友好。

我举个例子:在昇腾上跑BERT训练,性能能达到A100的80%。但要注意,昇腾的软件栈CANN(华为自己的CUDA)还在完善中。有些算子需要自己手写TBE(Tensor Boost Engine)代码。

小技巧:用昇腾时,尽量用华为官方提供的ModelZoo模型。自己从PyTorch转过来的模型,性能可能打折扣。我一般先在ModelZoo里找,找不到再自己转。

2.4.2 寒武纪:AI芯片的“老兵”

寒武纪是国内最早做AI芯片的公司之一。它的思元系列,主打“通用性”。跟昇腾不同,寒武纪的芯片可以跑各种框架(TensorFlow、PyTorch、PaddlePaddle等)。

但说实话,寒武纪的生态比华为差一些。我2021年用思元270时,文档不全,社区也不活跃。最近听说思元590性能不错,但还没机会实测。

我的建议:如果做国产化替代,优先选华为昇腾。生态更成熟,技术支持也更好。寒武纪适合有自研能力的团队,可以深度定制。

2.5 知识体系总览

下面这张图,是我自己整理的云端训练芯片知识体系。你可以把它当作“地图”,随时回来查阅。

云端训练芯片知识体系 NVIDIA GPU Google TPU AMD ROCm 国产算力 架构:Kepler→Hopper 核心:Tensor Core 生态:CUDA + cuDNN 架构:Systolic Array 核心:脉动阵列 生态:TensorFlow专属 架构:CDNA系列 核心:HIP + MIOpen 生态:开源、兼容CUDA 华为:Da Vinci架构 寒武纪:思元系列 生态:CANN / 自研 选型建议 • 追求极致性能 & 生态成熟 → NVIDIA • 大规模集群 & TensorFlow重度用户 → Google TPU • 开源 & 成本敏感 → AMD ROCm • 国产化 & 政策合规 → 华为昇腾 / 寒武纪

2.6 市场测算:谁在赚钱?

最后聊点实际的。根据我看到的行业数据,2023年云端训练芯片市场大概是这样的:

  • NVIDIA:市场份额约85%。A100/H100供不应求,交期长达6个月。
  • Google TPU:内部使用为主,不对外销售。但通过Google Cloud提供服务,间接赚钱。
  • AMD:市场份额约5%。MI250/MI300性能不错,但生态拖后腿。
  • 国产芯片:合计约3%。华为昇腾增长最快,寒武纪在收缩。

嗯,这里要注意:国产芯片的市场份额虽然小,但增速很快。我预计到2025年,国产芯片在云端训练市场的份额能达到10%以上。原因很简单:政策驱动 + 性价比。

我的判断:未来3年,云端训练芯片会从“一超多强”变成“多极竞争”。NVIDIA依然领先,但Google、AMD、华为都会蚕食它的份额。作为工程师,多掌握几种平台总没错。

好了,这一章就到这里。记住:芯片选型没有银弹,只有最适合你场景的方案。下一章,我们聊聊推理芯片,那又是另一番天地了。


公众号:蓝海资料掘金营,微信deep3321