第1章:压测环境准备

做性能压测,环境准备是地基。地基没打好,后面测出来的数据全是废的。我见过太多团队,花大价钱买了GPU,结果因为软件版本不匹配,跑起来各种报错。今天咱们就把这块捋清楚。

1.1 GPU选型:算力与显存的博弈

选GPU,说白了就是看两个指标:算力和显存。算力决定你能跑多快,显存决定你能装多大模型。

核心原则:显存容量 ≥ 模型参数 × 2.5(以FP16为例)

举个例子,一个70B参数的模型,用FP16精度,光模型权重就要140GB。加上KV Cache、中间激活值,你至少需要350GB显存。这时候单卡H100(80GB)肯定不够,得考虑多卡并行。

我个人习惯,选型时先算一笔账:

  • 小模型(7B以下):单卡A100 80GB或H100 80GB就够了
  • 中等模型(13B-34B):建议2-4卡A100/H100
  • 大模型(70B+):至少8卡起步,H100优先

我在项目中遇到过,有人用A100 40GB跑13B模型,结果显存爆了。嗯,这里要注意:40GB和80GB虽然都是A100,但显存差一倍,价格差不少,千万别买错。

1.2 CPU与内存:别让CPU拖后腿

很多人只盯着GPU,忽略了CPU和内存。其实,CPU负责调度、数据预处理、后处理,这些环节慢了,GPU再快也白搭。

组件 推荐配置 说明
CPU核心数 ≥32核 vLLM的调度线程、数据加载都需要CPU
内存容量 ≥512GB 加载模型、缓存数据、中间结果
内存带宽 ≥200GB/s 影响数据从内存到GPU的传输速度

你想想看,如果内存只有128GB,加载一个70B模型(FP16约140GB)都装不下,更别提跑了。我曾经踩过这个坑,当时图便宜配了256GB内存,结果模型加载就花了半小时,压测时还频繁swap,性能惨不忍睹。

1.3 网络:多卡通信的生命线

多卡并行时,网络就是生命线。GPU之间通信慢,整个集群都在等你。

避坑指南:我曾经用千兆以太网跑8卡并行,结果通信延迟比计算还高。后来换成InfiniBand,吞吐量直接翻了3倍。

网络选型建议:

  • 单机多卡:NVLink/NVSwitch优先,带宽可达600GB/s
  • 多机多卡:InfiniBand HDR(200Gbps)或NDR(400Gbps)
  • 最低要求:RoCE v2(100Gbps),但延迟比IB高

1.4 软件栈:版本匹配是门玄学

软件版本不匹配,报错能让你怀疑人生。我整理了一套经过验证的版本组合:

组件 推荐版本 备注
CUDA 12.1 / 12.4 vLLM 0.4+ 对CUDA 12支持更好
PyTorch 2.1.2 / 2.2.0 建议用官方预编译包
vLLM 0.4.2 / 0.5.0 最新稳定版优先
cuDNN 8.9.7 与CUDA 12.1配套
NCCL 2.19.3 多卡通信必备

为什么推荐这些版本?说白了,vLLM的PagedAttention对CUDA版本有依赖,太老的版本不支持某些算子优化。我试过CUDA 11.8跑vLLM 0.5.0,编译都过不去。

1.5 Docker环境搭建:一次配置,到处运行

Docker是环境复制的利器。我习惯用Dockerfile把环境固化下来,这样换机器、换团队,都能复现同样的结果。

下面是我常用的Dockerfile模板:

# 基于官方PyTorch镜像
FROM pytorch/pytorch:2.1.2-cuda12.1-cudnn8-devel

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    git \
    wget \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# 安装vLLM
RUN pip install vllm==0.4.2

# 安装压测工具
RUN pip install \
    aiohttp \
    transformers \
    datasets \
    requests

# 设置工作目录
WORKDIR /workspace

# 暴露端口
EXPOSE 8000

CMD ["/bin/bash"]

构建镜像:

docker build -t vllm-benchmark:0.4.2 .

启动容器:

docker run --gpus all \
  --shm-size=32g \
  -v /data/models:/models \
  -p 8000:8000 \
  -it vllm-benchmark:0.4.2

小技巧:--shm-size一定要设大一点,默认64MB根本不够用。我一般设32GB,多卡并行时甚至设64GB。

1.6 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以对照着检查自己的环境:

压测环境准备核心逻辑 硬件层 GPU 算力 + 显存 CPU + 内存 调度 + 数据加载 网络 多卡通信 存储 模型加载 软件层 CUDA 12.1 / 12.4 PyTorch 2.1.2 / 2.2.0 vLLM 0.4.2 / 0.5.0 NCCL + cuDNN 通信 + 算子 环境层 Docker容器化 版本匹配验证 压测工具链

这张图展示了三层架构:硬件层是基础,软件层是桥梁,环境层是保障。每一层都环环相扣,缺一不可。

总结一下:环境准备不是简单的「装个软件就完事」。GPU选型要看模型规模,CPU内存要匹配,网络要满足多卡通信,软件版本要严格对齐。把这些都搞定了,压测才能跑出真实数据。

专注资料整理