第二章 硬件选型与配置:GPU/TPU选型、CPU与内存配置、网络与存储方案

做AI训练,说白了就是跟硬件打交道。你算法写得再漂亮,硬件跟不上,照样白搭。我见过太多团队,模型设计得挺好,结果一跑起来,GPU利用率不到30%,钱花了不少,效率却低得可怜。

这一章,咱们就聊聊怎么选硬件、怎么配硬件。嗯,都是我在项目里踩过的坑,总结出来的经验。

2.1 GPU/TPU选型:别只看算力

选GPU,很多人第一反应就是看算力。其实没那么简单。你想想看,算力再高,显存不够,模型塞不进去,那不等于白搭?

我个人习惯,先看显存,再看算力。为什么?因为显存决定了你能跑多大的模型。比如你训练一个7B的LLM,用FP16精度,光模型参数就要14GB。加上优化器状态、梯度、激活值,没个40GB显存,根本跑不起来。

核心原则:显存优先,算力次之,带宽兜底。

具体怎么选?我列个表,你参考一下:

场景 推荐GPU 显存 算力(TFLOPS FP16) 参考价格
小模型实验(<1B参数) RTX 4090 24GB 82.6 1.3万
中等模型(1B-7B) A100 80GB 80GB 312 8万+
大模型(7B-70B) H100 80GB 80GB 989 25万+
超大模型(>70B) H100集群 / TPU v4 多卡聚合 分布式 百万级

小提示:如果你预算有限,可以考虑二手A100。我在项目中用过,性价比很高。但要注意,二手卡的水很深,一定要测过显存和散热再付款。

至于TPU,说实话,我接触得不多。但有一点可以确定:TPU更适合Google生态的用户。如果你用TensorFlow或JAX,TPU确实香。但PyTorch用户,还是老老实实用GPU吧。

2.2 CPU与内存配置:别让CPU拖后腿

很多人只关注GPU,忽略了CPU和内存。这是个常见的误区。我遇到过好几次,GPU算力爆表,但CPU处理数据太慢,导致GPU一直在空等。

为什么会这样?因为数据加载、预处理、分布式通信,这些活儿都是CPU干的。CPU跟不上,GPU就得歇着。

我的建议是:

  • CPU核心数:至少16核,推荐32核以上。核心数越多,数据加载的并行度越高。
  • CPU主频:3.0GHz以上。主频影响单线程性能,尤其是数据预处理环节。
  • 内存容量:至少是显存的2倍。比如你用80GB显存的A100,内存至少160GB。我习惯配到256GB,留点余量。
  • 内存带宽:DDR5或更高,带宽越大越好。带宽不够,数据搬运就会成为瓶颈。

警告:千万别用消费级CPU(比如i7、i9)跑大规模训练。它们的内存通道数太少,带宽根本不够。我见过有人用i9-13900K配A100,结果内存带宽只有40GB/s,GPU利用率不到20%。

嗯,这里还要提一下NUMA架构。如果你用的是双路服务器,一定要注意CPU和内存的亲和性。我曾经踩过这个坑:数据加载线程跑在CPU0上,但内存分配在CPU1上,结果跨NUMA访问,延迟高得离谱。

解决办法很简单:用numactl绑定CPU和内存节点。

# 绑定到CPU0和内存节点0
numactl --cpunodebind=0 --membind=0 python train.py

2.3 网络与存储方案:分布式训练的命脉

单卡训练,网络和存储的影响不大。但一旦上了多卡、多机,这两样就是命脉。

先说网络。分布式训练的核心是梯度同步。每个GPU算完自己的梯度,得发给别人,然后汇总。这个通信量有多大?你算算看:一个7B模型,用FP32梯度,每个梯度4字节,总共28GB。如果8张卡同步一次,通信量就是28GB × 8 = 224GB。

所以,网络带宽必须够。我的经验是:

  • 单机多卡:用NVLink或NVSwitch。带宽至少600GB/s。别用PCIe,带宽差一个数量级。
  • 多机多卡:用InfiniBand或RoCE。带宽至少100Gbps,推荐200Gbps或400Gbps。

再说存储。训练数据得从硬盘读到内存,再送到GPU。如果存储太慢,数据加载就会成为瓶颈。

我建议的存储方案:

  1. 本地NVMe SSD:放热数据,比如当前epoch的数据。读写速度至少3GB/s。
  2. 分布式文件系统:放冷数据,比如历史数据集。推荐Lustre或GPFS。
  3. 内存缓存:用mmap或tmpfs把数据映射到内存。适合小数据集。

小技巧:我习惯在训练前把数据全部加载到内存里。虽然启动慢一点,但训练过程中不会有任何IO延迟。前提是内存够大。

下面这张图,是我总结的硬件选型与配置的核心逻辑。你看一眼,应该能有个整体印象。

硬件选型与配置核心逻辑 AI训练硬件 GPU/TPU选型 CPU与内存配置 网络与存储方案 显存优先 算力次之 带宽兜底 多核高频 大内存高带宽 NUMA亲和性 NVLink/InfiniBand 本地NVMe + 分布式FS 内存缓存加速 核心原则:显存优先 → 算力次之 → 带宽兜底

2.4 避坑指南:我踩过的那些坑

最后,分享几个我亲身经历过的坑。你遇到了,至少知道怎么绕过去。

坑1:GPU利用率低

我曾经训练一个BERT模型,GPU利用率只有15%。查了半天,发现是数据加载线程数太少,CPU一直在等IO。后来把num_workers从4改成16,利用率直接飙到85%。

坑2:分布式训练通信超时

有一次做8机64卡训练,总是报通信超时。排查后发现是网络交换机配置不对,MTU值设成了1500,导致大包被分片。改成9000后,问题解决。

坑3:显存溢出

训练一个13B模型,显存总是差那么一点点。后来用了梯度检查点(gradient checkpointing),以少量计算换显存,成功塞了进去。嗯,这个技巧后面会详细讲。

好了,硬件选型这块就聊到这儿。记住一句话:没有最好的硬件,只有最合适的配置。下一章,咱们聊聊训练框架的选择,那又是另一番天地。

可可精品资料库