第二章:压测环境搭建:硬件选型与软件栈配置

好,咱们直接进入正题。压测环境搭建这事儿,说简单也简单,说复杂……嗯,我踩过的坑能写满一页A4纸。今天就把这些经验掰开揉碎了讲给你听。

2.1 硬件选型:GPU / TPU / NPU 怎么挑?

先聊硬件。很多人一上来就问「哪个最好?」。我的回答是:没有最好,只有最合适。

2.1.1 GPU:最通用的选择

目前90%的AI训练压测都在GPU上跑。我个人习惯用NVIDIA的A100或H100做基准测试。为什么?因为生态最成熟,CUDA、cuDNN、TensorRT这些工具链你基本绕不开。

核心指标看这几点:

  • 显存容量:决定了你能塞多大的batch size。我建议至少40GB起步,80GB更稳。
  • 显存带宽:直接影响数据搬运速度。H100的3.35TB/s带宽,比A100快了近一倍。
  • TFLOPS:理论算力,但别太迷信。实际吞吐受很多因素影响。

我的经验:如果你做LLM压测,显存带宽比算力更重要。我曾经在A100上跑175B模型,batch size死活上不去,换了H100后吞吐直接翻倍。

2.1.2 TPU:Google的专属利器

TPU这东西,说白了就是为TensorFlow量身定做的。如果你用PyTorch,我个人建议别碰TPU——兼容性问题会让你怀疑人生。

但如果你已经在Google Cloud上跑TensorFlow,TPU v4是个不错的选择。它的互联带宽极高,多卡扩展性比GPU强。我记得有一次帮客户做压测,8颗TPU v4的线性加速比能达到7.6,而同等规模的GPU集群只有6.8。

2.1.3 NPU:国产化的新选择

最近几年NPU(比如华为昇腾)开始冒头。说实话,我刚开始也不太信任,直到有一次在昇腾910B上跑ResNet-50压测……嗯,结果出乎意料地好。

注意:NPU的软件栈还不够成熟。我曾经遇到过算子兼容性问题,一个简单的LayerNorm在NPU上跑出了CPU的速度。建议先做小规模验证,再上大规模压测。

2.2 软件栈配置:CUDA、PyTorch/TensorFlow、Docker

硬件选好了,接下来就是搭软件栈。这部分我踩过的坑最多,你仔细听。

2.2.1 CUDA版本:别乱升级

很多人觉得CUDA越新越好。错!稳定压倒一切。

我建议用CUDA 11.8或12.1这两个版本。为什么?因为PyTorch和TensorFlow的主流版本都对这些CUDA版本做过充分测试。

# 检查CUDA版本
nvcc --version

# 推荐版本组合
CUDA 11.8 + PyTorch 2.0.1
CUDA 12.1 + PyTorch 2.1.0

避坑指南:我曾经在CUDA 12.0上跑PyTorch 2.0,结果Dataloader莫名其妙卡死。后来发现是CUDA 12.0的bug,降级到11.8就解决了。所以,别追新。

2.2.2 PyTorch vs TensorFlow:选哪个?

这个问题我经常被问到。我的回答是:看团队。

对比项 PyTorch TensorFlow
调试体验 动态图,方便调试 静态图,性能更优
分布式支持 torch.distributed 成熟 tf.distribute 也不错
社区生态 学术界主流 工业界更广
压测工具 torch.profiler 好用 TensorBoard 强大

我个人习惯用PyTorch做压测。原因很简单:torch.profiler太好用了。你想想看,能直接看到每个算子的耗时、显存占用、带宽利用率,调试起来多方便。

2.2.3 Docker:环境隔离的利器

压测环境最怕什么?环境不一致。今天在这台机器上跑得好好的,换一台就崩了。Docker就是来解决这个问题的。

# 我的标准Dockerfile
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04

RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

RUN pip install torch==2.0.1+cu118 \
    torchvision==0.15.1+cu118 \
    --extra-index-url https://download.pytorch.org/whl/cu118

RUN pip install tensorflow==2.12.0

# 压测工具
RUN pip install nvidia-ml-py3 psutil

CMD ["/bin/bash"]

注意:Docker镜像别太大。我见过有人把整个conda环境打包进去,结果镜像20GB+,拉取就要半小时。建议只装必要依赖,其他用volume挂载。

2.3 网络与存储检查

硬件和软件都配好了,但还有一个隐形杀手——网络和存储。这两个地方出问题,压测结果基本废了。

2.3.1 网络:别让带宽成为瓶颈

多卡训练时,网络带宽直接决定通信效率。我建议至少用100Gbps的InfiniBand或RoCE。

怎么检查?用这个命令:

# 检查网络带宽
ib_write_bw -a -d mlx5_0

# 检查延迟
ibping -c 100 -s 1024

如果发现带宽低于理论值的80%,嗯,你得排查一下了。我曾经遇到过网卡固件版本不匹配的问题,升级后带宽从60Gbps飙到了95Gbps。

2.3.2 存储:IOPS和吞吐量

数据加载速度跟不上训练速度,GPU就得干等着。这就是所谓的IO瓶颈。

我建议用NVMe SSD做本地缓存,或者用高性能分布式存储(比如Lustre、GPFS)。

# 测试存储性能
fio --name=test --ioengine=libaio --rw=randread \
    --bs=4k --size=1G --numjobs=4 --runtime=60 \
    --group_reporting

我的经验:如果IOPS低于10万,或者吞吐量低于2GB/s,你的存储大概率是瓶颈。我曾经在HPC集群上跑压测,发现数据加载占了30%的时间,后来加了本地NVMe缓存,训练时间直接缩短了25%。

2.4 知识体系总览

说了这么多,我画张图帮你理清思路:

压测环境搭建知识体系 硬件选型 • GPU:A100/H100 • TPU:v4/v5 • NPU:昇腾910B • 显存/带宽/算力 • 多卡互联拓扑 软件栈配置 • CUDA 11.8/12.1 • PyTorch 2.0+ • TensorFlow 2.12+ • Docker环境隔离 • 版本兼容性检查 网络与存储 • InfiniBand/RoCE • 100Gbps+带宽 • NVMe SSD缓存 • 分布式存储 • IOPS/吞吐量测试 核心原则:稳定 > 性能 > 新版本 先验证单卡,再扩展多卡;先小规模,再大规模

这张图把整个压测环境搭建的核心要素都串起来了。你仔细看,硬件、软件、网络存储这三块缺一不可。任何一个环节出问题,压测结果都会失真。

最后说一句:环境搭建别图快。我见过太多人急着跑压测,结果发现是环境问题导致数据不准,白白浪费几天时间。稳扎稳打,把每一步都验证到位,后面才能跑得顺畅。

可可精品资料库