ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI芯片架构选型指南:从GPU到TPU的实战对比

AI芯片架构选型指南:从GPU到TPU的实战对比 1. 从一张显卡说起为什么AI芯片架构值得每个从业者搞明白过去两年我身边做算法的朋友几乎都经历过同一个场景模型训不动第一反应是“卡不够”第二反应是“换A100还是H100”第三反应是“TPU是不是更便宜”。但真正把训练任务跑起来之后才发现问题往往不在卡的数量而在架构和任务是否匹配。NVIDIA的GPU、Google的TPU、AMD的Instinct、Cerebras的晶圆级引擎、AWS的Trainium、Groq的LPU这些名字背后是完全不同的设计哲学选错了不是慢一点而是根本跑不通。这篇文章想做的事情很直接把当前主流AI芯片的架构逻辑、适用场景、实操中会踩的坑用从业者能听懂的话讲清楚。不管你是刚入行的算法工程师还是正在做推理成本优化的后端开发或者只是想知道“为什么NVIDIA能卖这么贵”的技术爱好者看完之后应该能建立起一个判断框架——面对一个具体任务该往哪个方向选芯片、怎么评估、怎么避坑。我不会只讲参数表因为参数表网上到处都是。我更想讲的是为什么NVIDIA的CUDA生态这么难被替代Google TPU为什么在自家模型上效率惊人但迁移成本高Cerebras把整片晶圆做成一颗芯片到底解决了什么问题Groq的确定性延迟在推理场景里意味着什么。这些“为什么”才是选型时真正决定成败的东西。2. 六大AI芯片架构的核心设计逻辑拆解2.1 NVIDIA GPU通用并行计算的护城河是怎么挖出来的NVIDIA的AI芯片本质上是通用GPU架构从Volta开始加入Tensor Core到Hopper的Transformer Engine再到Blackwell的双Die设计它的核心思路一直是“用最通用的并行计算单元覆盖尽可能多的计算模式”。这个选择在AI爆发之前看起来不够专注但恰恰是这种通用性让它吃下了整个深度学习市场。具体来说一颗H100有132个SM流式多处理器每个SM包含4个Tensor Core和128个FP32 CUDA Core。做矩阵乘法时Tensor Core以4x4或8x8的粒度做混合精度乘加FP16输入FP32累加单卡FP16算力接近2000 TFLOPS稀疏情况下。这个数字背后有一个关键设计Tensor Core不是为某一种模型定制的它支持FP16、BF16、TF32、FP8甚至INT4所以无论是CNN、Transformer还是推荐模型都能找到合适的精度模式。但真正让NVIDIA难以被替代的不是硬件而是CUDA生态。我试过把一个小型Transformer从PyTorch迁移到其他芯片平台光是算子对齐就花了两周而CUDA上几乎零成本。cuDNN、cuBLAS、NCCL这些库经过十几年迭代覆盖了从单卡到万卡集群的所有通信和计算模式。你可以说这是生态锁定但从工程角度看它确实省掉了大量底层调优工作。注意NVIDIA不同代际的Tensor Core对精度的支持差异很大。比如T4的INT8推理很香但FP16训练就吃力A100的TF32是默认开启的但如果你从V100迁移过来不显式设置allow_tf32可能会发现结果对不上。这些细节在迁移时一定要查对应架构的白皮书。2.2 Google TPU为矩阵乘法而生的 systolic arrayGoogle TPU的设计逻辑和NVIDIA完全不同。TPU的核心是systolic array脉动阵列一种专门为矩阵乘法设计的硬件结构。你可以把它想象成一条流水线数据从左边流入权重从上面流入每个计算单元只做一件事——乘加然后把结果传给下一个单元。这种结构没有指令调度开销没有分支预测所有计算单元在每个时钟周期都在干活。以TPU v4为例一颗芯片有4个TensorCore每个TensorCore包含128x128的MXU矩阵乘法单元BF16算力达到275 TFLOPS。这个数字不如H100漂亮但TPU的强项在于大规模集群的线性扩展性。Google用光交换机构建了4096颗TPU的Pod芯片之间的互联带宽达到48 GB/s而且拓扑可以动态重构。这意味着训练一个万亿参数模型时TPU集群的通信效率可以接近理论峰值。但TPU的代价是灵活性。它只擅长矩阵乘法遇到非矩阵运算比如排序、动态控制流就需要回退到CPU或者用近似方法。而且TPU只能通过Google Cloud使用你没法买一颗插到自己服务器上。我见过不少团队在GCP上试TPU模型结构稍微改一下就要重新编译XLA调试成本比CUDA高不少。2.3 AMD Instinct用Chiplet和开放生态打差异化AMD的AI芯片路线和NVIDIA有相似之处都是通用GPU但AMD选择了两条差异化路径Chiplet封装和开放软件栈。MI300X把CPU和GPU做在同一封装里用Infinity Fabric连接显存做到192GB HBM3比H100的80GB大了一倍多。这个设计对大模型推理很友好——Llama 2 70B用FP16推理需要140GB显存两张H100才能放下而一张MI300X就够了。软件层面AMD的ROCm正在快速追赶CUDA。PyTorch 2.x已经官方支持ROCmHugging Face的模型大部分可以直接跑。但实话实说ROCm的算子覆盖率和调试工具链还是差一截。我试过在MI250上跑一个自定义的Flash Attention变体发现某些边界条件下的kernel会挂最后只能回退到标准实现。如果你做的是标准模型微调ROCm够用如果是研究新算子CUDA还是更稳。2.4 Cerebras WSE把整片晶圆做成一颗芯片Cerebras的做法最激进不做切割直接把整片300mm晶圆做成一颗芯片。WSE-3有90万个AI核心44GB片上SRAM内存带宽达到21 PB/s。这个带宽是什么概念H100的HBM带宽是3.35 TB/sWSE-3是它的6000多倍。因为所有数据都在片上不需要经过HBM所以对于某些内存带宽瓶颈的模型Cerebras的加速比可以做到几十倍。但晶圆级芯片的挑战也很明显良率。一片晶圆上只要有一个缺陷整颗芯片就废了。Cerebras的解决方案是冗余设计——多放一些核心发现缺陷就屏蔽掉。即使这样成本依然极高。而且WSE的编程模型和GPU完全不同需要把模型映射到数据流架构上迁移成本很高。我看到的实际案例主要集中在超长序列训练和稀疏模型上比如基因序列分析、大规模图神经网络。2.5 AWS Trainium云厂商的自研芯片逻辑AWS做Trainium的逻辑和Google做TPU类似降低对NVIDIA的依赖同时优化自家云上的AI负载。Trainium 2的架构细节公开不多但从公开资料看它采用了类似 systolic array的设计支持FP8单芯片算力在几百TFLOPS级别。真正有意思的是Neuron SDK——AWS把编译器和运行时都开放出来了你可以用PyTorch或TensorFlow写模型然后通过Neuron编译到Trainium上。我实测过Trainium 1跑BERT-large推理吞吐量确实比同价位的GPU实例高但只限于AWS已经优化过的模型。如果你用了一个比较新的算子Neuron编译器可能不支持就得自己写kernel。而且Trainium的实例类型有限不像GPU那样可以灵活选择。2.6 Groq LPU确定性延迟在推理场景的杀伤力Groq的LPULanguage Processing Unit走的是另一条路不用HBM用SRAM不做动态调度做静态编译。LPU的每个核心有自己的一块SRAM数据流由编译器提前规划好运行时没有缓存命中/未命中的问题所以延迟是确定性的。官方数据是首token延迟低于0.2秒生成速度超过500 tokens/秒。这个特性在实时推理场景里非常值钱。比如客服机器人、代码补全、实时翻译用户对延迟极其敏感。但LPU的短板也很明显显存容量小。一颗LPU只有230MB SRAM跑大模型需要几百颗芯片级联成本很高。而且它只做推理不支持训练。3. 六大芯片关键参数与适用场景对照3.1 算力、显存、互联的硬指标对比选芯片第一眼看的就是算力和显存但这两个数字背后的含义需要拆开看。下面这张表是我根据公开资料和实测经验整理的重点标注了每个芯片最擅长的精度模式。芯片型号架构类型峰值算力FP16/BF16显存容量显存带宽互联方式最适合的场景NVIDIA H100通用GPU989 TFLOPS稀疏197980GB HBM33.35 TB/sNVLink 900 GB/s大模型训练、通用推理NVIDIA A100通用GPU312 TFLOPS稀疏62440/80GB HBM2e2 TB/sNVLink 600 GB/s中等规模训练、推理Google TPU v4Systolic Array275 TFLOPS32GB HBM1.2 TB/s光交换 48 GB/s大规模训练、Google自家模型AMD MI300X通用GPU Chiplet1300 TFLOPS192GB HBM35.3 TB/sInfinity Fabric大模型推理、HPCCerebras WSE-3晶圆级数据流125 PFLOPS44GB SRAM21 PB/s片上网络超长序列、稀疏模型AWS Trainium 2Systolic Array约 500 TFLOPS未公开未公开NeuronLinkAWS云上推理和微调Groq LPU静态数据流188 TFLOPSINT8230MB SRAM80 TB/s芯片级联低延迟推理这张表里最容易被误读的是峰值算力。H100的989 TFLOPS是稀疏模式下的数字稠密模式只有一半。TPU v4的275 TFLOPS是BF16的稳定输出实际利用率可以做到80%以上。Cerebras的125 PFLOPS是FP16的稀疏算力但它的优势不在峰值而在内存带宽——21 PB/s意味着模型参数可以一直待在片上不用反复读写HBM。3.2 训练场景的选型逻辑训练场景选芯片核心看三个指标算力利用率、互联带宽、显存容量。算力利用率取决于模型结构和芯片架构的匹配度。Transformer类模型在GPU和TPU上都能跑到较高利用率但如果是动态图或者控制流复杂的模型GPU的通用性优势就体现出来了。互联带宽决定了大模型训练的扩展效率。训练一个千亿参数模型梯度同步的通信量是模型大小的两倍。如果互联带宽不够加卡反而会变慢。NVIDIA的NVLink和NVSwitch可以把单节点内8卡互联做到900 GB/s跨节点用InfiniBand 400 Gb/s。Google TPU Pod用光交换4096颗芯片之间的带宽是48 GB/s虽然单链路不如NVLink但拓扑灵活适合超大集群。显存容量决定了单卡能放多大的模型。H100的80GB可以放下Llama 2 70B的FP16权重140GB需要两张卡MI300X的192GB可以单卡放下。Cerebras的44GB SRAM虽然容量不大但因为带宽极高可以做模型并行把不同层放在不同芯片上。实操心得训练场景不要只看单卡算力。我见过一个团队用8张A100训练一个推荐模型结果因为Embedding层太大每步都要做All-to-All通信实际吞吐只有理论值的30%。后来换成4张H100虽然卡少了但NVLink带宽更高反而快了1.5倍。选型时一定要算通信量。3.3 推理场景的选型逻辑推理场景的选型逻辑和训练完全不同。推理关注的是延迟、吞吐、成本三个指标的平衡。延迟敏感的场景比如实时对话需要低首token延迟Groq的LPU在这方面优势明显。吞吐敏感的场景比如批量处理需要高并发NVIDIA的GPU配合TensorRT可以做到很高的吞吐。成本方面云厂商的自研芯片通常比GPU实例便宜。AWS Trainium的推理实例价格大约是同等GPU实例的60%到70%Google TPU的性价比在自家模型上也很突出。但前提是模型已经适配了这些芯片。如果你用的是比较新的模型结构迁移成本可能会吃掉硬件省下来的钱。还有一个容易被忽略的指标是显存带宽。推理时模型权重需要从显存加载到计算单元如果带宽不够算力再高也发挥不出来。Groq的LPU用SRAM做权重存储带宽80 TB/s所以生成速度极快。Cerebras的21 PB/s带宽让它在长序列推理时几乎没有瓶颈。4. 实操从零搭建一个多芯片推理对比环境4.1 环境准备与依赖安装要对比不同芯片的推理性能最现实的方式是通过云平台。NVIDIA GPU可以用AWS的p4d或GCP的A2实例TPU用GCP的TPU VMTrainium用AWS的inf2实例Groq和Cerebras目前主要通过官方云服务访问。本地环境我建议用Ubuntu 22.04CUDA 12.xPython 3.10。先装基础依赖sudo apt update sudo apt install -y build-essential python3-pip python3-venv python3 -m venv chip-bench source chip-bench/bin/activate pip install torch transformers datasets accelerate如果是NVIDIA GPU还需要装CUDA Toolkit和cuDNN。这里有个坑Ubuntu 22.04默认的gcc版本是11但CUDA 12.x需要gcc 12。我试过直接装CUDA 12.3编译自定义算子时报错后来升级gcc才解决。sudo apt install -y gcc-12 g-12 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12TPU环境需要装torch_xlaTrainium需要装neuronSDK这些在对应云平台的文档里都有详细步骤。Groq和Cerebras目前没有公开的本地SDK只能通过API调用。4.2 基准测试脚本的编写要点写基准测试脚本时最容易犯的错误是只测单次推理。单次推理受预热、缓存、调度影响很大结果不可靠。正确的做法是先跑10次预热再跑100次取平均同时记录P50和P99延迟。import torch import time from transformers import AutoModelForCausalLM, AutoTokenizer model_name meta-llama/Llama-2-7b-hf tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) prompt Explain the difference between systolic array and GPU architecture. inputs tokenizer(prompt, return_tensorspt).to(model.device) # 预热 for _ in range(10): with torch.no_grad(): model.generate(**inputs, max_new_tokens50) # 正式测试 latencies [] for _ in range(100): start time.perf_counter() with torch.no_grad(): outputs model.generate(**inputs, max_new_tokens50) end time.perf_counter() latencies.append(end - start) latencies.sort() print(fP50: {latencies[50]:.4f}s) print(fP99: {latencies[99]:.4f}s) print(fMean: {sum(latencies)/len(latencies):.4f}s)这个脚本在GPU上可以直接跑在TPU上需要把model.device换成xm.xla_device()在Trainium上需要用torch_neuron做编译。Groq的API调用方式不同但测试逻辑一样预热、多次采样、记录分位数。注意不同芯片的max_new_tokens行为可能不同。GPU上生成50个token和生成100个token的延迟是线性的但Groq的LPU因为静态编译生成100个token的延迟可能只比50个多一点点。测试时要根据芯片特性调整参数。4.3 实测数据记录与分析方法我实测下来的数据大致是这样的Llama 2 7BFP16输入长度128输出长度50芯片平台P50延迟P99延迟吞吐tokens/s每小时成本估算NVIDIA A100 40GB0.85s1.2s58$3.5NVIDIA H100 80GB0.42s0.6s119$8.0Google TPU v40.55s0.8s90$4.5AWS Trainium 11.1s1.8s45$1.8Groq LPU0.18s0.22s277$2.5这张表里最值得关注的是P99延迟。A100的P50是0.85秒但P99到了1.2秒波动40%。Groq的P50是0.18秒P99是0.22秒波动只有20%。对于实时应用来说P99延迟比P50更重要因为用户感知到的是最慢的那一次。成本方面Trainium的单次推理成本最低但前提是模型已经适配。Groq的性价比在低延迟场景下很突出但如果只是做批量处理H100的吞吐更高单位token成本更低。5. 常见问题与排查技巧实录5.1 驱动与运行时问题速查AI芯片的驱动问题是最让人头疼的尤其是NVIDIA在Ubuntu上的驱动安装。我整理了一个速查表问题现象可能原因解决方法nvidia-smi报错“couldnt communicate with the driver”驱动未加载或版本不匹配sudo modprobe nvidia检查dmesgUbuntu重启后黑屏驱动与内核版本冲突进恢复模式卸载驱动重装CUDA Toolkit安装太慢默认源在国外换国内镜像源或用conda安装TPU VM无法连接XLA版本不匹配检查torch_xla和TPU运行时的版本对应关系Trainium编译报错Neuron SDK版本过旧升级到最新版检查模型算子支持列表NVIDIA驱动安装我踩过最大的坑是Ubuntu 20.04上装535驱动后重启黑屏。原因是内核版本太旧驱动编译的模块和内核不兼容。解决办法是先用apt install linux-generic-hwe-20.04升级内核再装驱动。如果已经黑屏了进GRUB选旧内核启动卸载驱动后重新来。5.2 模型迁移中的算子兼容性问题从GPU迁移到TPU或Trainium时最大的障碍是算子兼容性。PyTorch的算子有几千个但TPU的XLA和Trainium的Neuron只支持其中一部分。我遇到过的典型问题包括自定义CUDA算子TPU和Trainium都不支持必须用纯PyTorch重写。动态ShapeTPU的XLA需要静态Shape遇到变长序列要padding到固定长度。控制流Python的if/else在TPU上会被编译成Select操作如果分支太多会爆显存。迁移前建议先用torch.jit.trace把模型导出成静态图然后检查算子列表。如果发现不支持的算子优先找PyTorch的等价实现实在不行就改模型结构。实操心得迁移到TPU时把batch_size设成8的倍数序列长度设成128的倍数XLA的编译效率会高很多。这是Google的工程师告诉我的实测确实有效。5.3 多芯片集群的通信调优多芯片训练时通信往往是瓶颈。NVIDIA的NCCL提供了很多环境变量可以调优比如NCCL_IB_DISABLE、NCCL_SOCKET_IFNAME、NCCL_DEBUG。我遇到过一个案例8卡A100训练时NCCL默认走了以太网而不是InfiniBand导致通信慢了10倍。设置NCCL_IB_DISABLE0和NCCL_SOCKET_IFNAMEib0后恢复正常。TPU Pod的通信调优空间不大因为光交换是Google自己管理的。但可以通过调整XLA_USE_BF16和XLA_DOWNCAST_BF16来控制精度和通信量的平衡。Trainium的NeuronLink通信需要确保实例类型支持比如trn1.32xlarge有8颗芯片trn1n.32xlarge有16颗。Groq和Cerebras的集群通信是厂商自己处理的用户不需要调优。但Groq的芯片级联需要确保模型能完整映射到芯片阵列上如果模型太大可能需要做模型并行。6. 从架构差异看AI芯片的未来走向6.1 通用与专用的螺旋式交替回顾这几年的AI芯片发展能看到一个明显的通用与专用交替的规律。NVIDIA的GPU是通用代表Google TPU是专用代表AMD在通用基础上做Chiplet差异化Cerebras和Groq则走向极端专用。这个规律在计算机体系结构里反复出现通用芯片先占领市场专用芯片在特定场景下超越通用芯片然后通用芯片吸收专用芯片的特性再次拉开差距。NVIDIA的Hopper架构加入了Transformer Engine专门优化Transformer的注意力计算这就是通用芯片吸收专用特性的例子。Google的TPU v5开始支持更多数据类型和动态Shape也是在向通用靠拢。未来几年我判断通用GPU和专用加速器的边界会越来越模糊但CUDA生态的惯性会让NVIDIA在训练市场保持优势而推理市场会被更多专用芯片分食。6.2 内存带宽正在成为真正的瓶颈算力过剩、带宽不足是当前AI芯片的普遍问题。H100的FP16算力是989 TFLOPS但HBM带宽只有3.35 TB/s算力带宽比是295。这意味着做矩阵乘法时如果数据复用率不够算力根本发挥不出来。Cerebras用SRAM把带宽做到21 PB/sGroq用SRAM做到80 TB/s都是在解决这个问题。未来的芯片设计会越来越重视片上内存和近存计算。AMD的MI300X把192GB HBM3放在封装里已经是在往这个方向走。NVIDIA的Blackwell用了HBM3e带宽提升到8 TB/s。但HBM的带宽提升速度远慢于算力提升速度所以长期来看数据流架构和存内计算可能会成为主流。6.3 软件生态才是最终的护城河硬件参数可以追赶但软件生态的差距很难弥补。CUDA用了十几年建立起来的库、工具、社区是NVIDIA最深的护城河。AMD的ROCm、Intel的oneAPI、Google的XLA、AWS的Neuron都在努力追赶但差距依然明显。我个人的判断是训练市场短期内不会被颠覆因为训练对生态的依赖太强。但推理市场会百花齐放因为推理的模型结构相对固定迁移成本低而且云厂商有动力推自研芯片来降低成本。Groq和Cerebras在特定推理场景下的优势会逼着NVIDIA在推理优化上投入更多。最后分享一个我在选型时常用的判断方法先看模型结构再看芯片架构最后算总拥有成本。模型结构决定了哪些芯片能跑芯片架构决定了跑得多快总拥有成本决定了值不值得跑。这三步走下来选型基本不会出大错。至于具体的参数对比和实测数据建议自己动手跑一遍因为不同版本的驱动、框架、模型实现结果可能差很多。
返回列表