vLLM 资源评估:CPU 与内存配置方法
说明如何按 GPU worker 数量用“2 + N”估算 CPU 物理核心,并结合上下文长度、并发上限、CPU offload、缓存设置和压测指标调整 vLLM 资源参数。
评估 vLLM 的 CPU 与内存配置,先按 vLLM 优化调优文档 的 2 + N 规则估算物理核心下限,再从启动日志记录 GPU KV cache size 与最大并发,最后用受控负载结果校准参数。固定评估条件时,可通过 vllm serve --config config.yaml 加载 YAML;服务参数文档 规定 command line > config file values > defaults,因此应保留配置版本,并避免同时改变多类参数。
先把 CPU 下限与 N 的口径定下来
在 vLLM 优化调优文档 中,N 是目标部署的 GPU worker 数;最低物理核心数由 API server、engine core 和每个 GPU worker 组成。启用 hyperthreading 时,一个 vCPU 是一个 hyperthread,也就是半个物理核心。官方给出的最低值为:
物理核心下限 = 2 + N
启用 hyperthreading 时:vCPU 下限 = 2 × (2 + N)
这组公式只确定配置底线。若机器清单只显示 vCPU,应使用第二个公式核对,不要把逻辑核数直接写成物理核心;随后再结合目标上下文、请求长度和并发,观察进程并记录受控负载下的 CPU 与内存。
用 vllm serve 固定每轮参数
先用一个版本化配置文件固定本轮评估边界:
vllm serve --config config.yaml
根据 vLLM 服务 CLI 参数说明,--max-model-len 覆盖 prompt 与 output 的总上下文;未指定时从 model config 推导,设为 -1 或 auto 时选择 GPU 内存可容纳的最大长度。--max-num-seqs 限制单次迭代处理的序列数,--max-num-batched-tokens 限制单次迭代处理的 token 数。
--max-model-len YOUR_VALUE
--max-num-seqs YOUR_VALUE
--max-num-batched-tokens YOUR_VALUE
--gpu-memory-utilization YOUR_VALUE
--kv-cache-memory-bytes YOUR_VALUE
--cpu-offload-gb YOUR_VALUE
YOUR_VALUE 应根据 model config 和目标负载填写,不能当作固定默认值。内存边界最容易混用:同一 CLI 参数说明 将 --gpu-memory-utilization 定义为 model executor 使用的 GPU 内存比例,范围为 0 到 1,默认 0.92,且只约束当前实例;同一 GPU 上两个实例可以各设为 0.5。设置 --kv-cache-memory-bytes 后,会直接指定每张 GPU 的 KV cache 大小,并忽略 gpu_memory_utilization。--cpu-offload-gb 的单位是 GiB,按每张 GPU 设置,默认 0 表示不 offload;offload 需要快速 CPU-GPU interconnect,因为每次前向计算都会从 CPU 向 GPU 搬运部分模型。
单独核对 CPU RAM 的压力来源
CPU RAM 不能只根据 GPU 显存反向推算。vLLM 内存节约文档 记录,多模态处理器缓存默认占用 4 GiB CPU RAM,可通过 mm_processor_cache_gb 调整;仅适用于 CPU backend 的 KV cache 可通过 VLLM_CPU_KVCACHE_SPACE 调整,默认也是 4 GiB。CPU RAM 不足时,应分别检查这些设置,而不是把默认值直接当作机器需求。
这些文档没有给出脱离模型配置、并行方式和 offload 设置的统一 CPU RAM 总量公式。每轮应记录 offload 值、相关缓存设置、启动阶段的资源占用,以及受控负载阶段的 CPU 和内存。同一 内存节约文档 还指出,启用 tensor parallelism 后,每个进程都会读取完整 checkpoint,磁盘读取时间会随 tensor parallel size 增长。因此比较不同并行配置时,应把模型加载阶段与稳定服务阶段分开记录。
用启动日志和压测记录做验收
服务启动后,按照 并行与扩缩容说明 检查 GPU KV cache size:该日志行会报告 GPU KV cache 可同时容纳的 token 总数,以及由此得到的最大并发。它反映当前配置下的一次运行结果,不能直接当作其他模型或负载的容量保证。
压测时,根据 Benchmark CLI 文档,内置在线基准工具面向功能评估和回归测试。官方在线示例使用 /v1/completions 和 ShareGPT;评估 CPU 与内存时,应把下列负载参数写入测试记录:
--dataset-name sharegpt
--endpoint /v1/completions
--request-rate YOUR_VALUE
--max-concurrency YOUR_VALUE
--burstiness YOUR_VALUE
--request-rate 控制每秒目标请求数,默认 inf 会立即发送全部请求;--max-concurrency 限制未完成请求数,未设置时并发不受限制;--burstiness 使用 Gamma 分布塑造流量,1.0 对应 Poisson traffic。比较不同配置时,应保持数据集、请求生成方式、并发上限和指标定义一致。
报告中的请求吞吐量、输出 token 吞吐量和总 token 吞吐量可用来观察负载;TTFT 是客户端发出请求到收到首个 streamed output 的时间,ITL 是相邻 streamed output 之间的间隔,TPOT 则按每个请求计算并排除首个 token。重复对同一服务器运行基准可能复用 prefix cache,从而抬高吞吐量,因此不能把重复结果直接当作独立对照;不同工具的指标名称也未必标准化,应比较定义而非名称。
本文步骤依据正文所链接的官方文档整理,使用前应对照当前版本复核。