硬件选型与配置:GPU/TPU选型、CPU与内存配置、网络与存储方案
做AI训练这么多年,我踩过最大的坑,往往不是模型本身,而是硬件选型。你想想看,一个模型调了三个月,结果发现GPU显存不够、CPU喂不饱、网络带宽卡脖子——那种感觉,真的让人想砸键盘。
这一章,咱们就聊聊硬件选型那些事。我会把我在多个千卡集群上的实战经验,掰开了揉碎了讲给你听。
GPU/TPU选型:别只看算力
很多人选GPU,第一反应就是看TFLOPS。其实这不对。我见过太多团队买了顶配A100,结果跑小模型时效率还不如V100。
核心原则:匹配你的模型规模
- 小模型(<1B参数):RTX 4090或A10就够。显存24GB,性价比极高
- 中等模型(1B-10B):A100 80GB是黄金选择。我习惯用8卡A100做DP+TP混合并行
- 大模型(>10B):H100或TPU v4。显存带宽是关键,H100的3.35TB/s带宽能省大量通信时间
关键指标对比
| 指标 | A100 80GB | H100 80GB | TPU v4 |
|---|---|---|---|
| 显存带宽 | 2.0 TB/s | 3.35 TB/s | 1.2 TB/s |
| FP16算力 | 312 TFLOPS | 989 TFLOPS | 275 TFLOPS |
| 互联带宽 | 600 GB/s (NVLink) | 900 GB/s (NVLink) | 1.6 TB/s (ICI) |
| 适用场景 | 通用训练 | 大模型预训练 | Google生态专用 |
我的经验:如果你用PyTorch+Megatron,选NVIDIA卡。如果你用JAX+TensorFlow,TPU可能更香。别混用,我试过,维护成本翻倍。
CPU与内存配置:别让CPU成为瓶颈
很多人觉得CPU不重要,随便配个双路Xeon就行。嗯,我以前也这么想,直到有一次数据加载卡了整整两天。
CPU选型要点:
- 核心数:至少32核。我习惯用AMD EPYC 64核,性价比比Intel高30%
- 频率:3.0GHz以上。数据预处理是CPU密集型的
- 内存:每GPU配128GB系统内存。比如8卡机器,至少1TB内存
我曾经踩过的坑:有次配了512GB内存跑175B模型,结果数据预处理时内存直接爆了。后来发现是PyTorch DataLoader的num_workers开太多,每个worker都复制了一份数据。改成共享内存后,内存占用降了60%。
内存配置建议:
- 系统内存:GPU显存的2-3倍
- 使用NUMA绑定:每个GPU绑定最近的CPU和内存节点
- 开启大页内存:2MB大页能减少TLB miss
网络与存储方案:数据流动的生命线
网络和存储,说白了就是让数据能快速流动。我见过最惨的情况:集群算力利用率只有30%,因为网络带宽不够,GPU一直在等数据。
网络选型:
- 节点内:NVLink/NVSwitch,带宽至少600GB/s
- 节点间:InfiniBand HDR 200Gbps或RoCE v2 100Gbps
- 拓扑:Fat-Tree或Dragonfly,避免单点瓶颈
网络带宽计算公式:
所需带宽 = 模型大小 × 2 / 计算时间
例如:175B模型,每步计算0.5秒
所需带宽 = 175GB × 2 / 0.5s = 700GB/s
需要至少8条100Gbps链路
存储方案:
- 热数据:NVMe SSD,RAID 0,读写至少10GB/s
- 温数据:分布式文件系统,如Lustre或GPFS
- 冷数据:对象存储,如MinIO或Ceph
我的习惯:训练时把数据全部缓存到本地NVMe。虽然占用空间,但能避免网络抖动。我一般预留500GB-1TB本地缓存。
知识体系结构图
实战配置示例
给你一个我最近用的配置单,跑175B模型,8卡H100节点,共32节点:
# 单节点配置
GPU: 8 × H100 80GB SXM
CPU: 2 × AMD EPYC 9654 (96核)
内存: 2TB DDR5 4800MHz
网络: 8 × InfiniBand HDR 200Gbps
存储: 4 × NVMe 7.68TB (RAID 0)
系统: Ubuntu 22.04 + CUDA 12.1
注意:这个配置单看起来豪华,但实际跑起来,网络带宽还是有点紧。我建议如果预算允许,上400Gbps的InfiniBand NDR。别问我怎么知道的——有一次all-reduce卡了整整3秒,我差点把键盘吃了。
好了,硬件选型这块就聊到这儿。记住一句话:没有最好的硬件,只有最合适的配置。你想想看,花大价钱买H100跑BERT,那不是杀鸡用牛刀吗?
想要更多资料,联系可可