vllm 启动的参数解释,怎么才能将显存用到极致

vllm显存优化与参数调优指南
  1. 最关键的引擎参数(决定并发 & 显存分配)

批处理/并发相关
• --max-num-seqs
同时并行的序列(请求)上限。数值越大,并发越高,但需要更多 KV Cache 显存。和下一项共同决定批量大小。
• --max-num-batched-tokens
预填充(prefill)阶段单批可打包的 prompt token 上限;数值越大,prefill 吞吐越高,但占用更多显存与瞬时算力。官方调优文档建议基线是 2048,提升它通常能显著提高吞吐。

显存总盘子
• --gpu-memory-utilization
vLLM 预留给“模型执行器(权重 + 激活 + KV Cache)”的 显存比例(01,默认 0.9)。想“吃满”显存,就把它调到稳定上限(例如 0.90.95,视你的卡与驱动而定)。

上下文长度
• --max-model-len
本实例支持的最大上下文窗口。越大=每个请求的 KV Cache 越大。如果业务不需要超长上下文,把它下调能显著腾出显存给并发。(经验:很多 8B/32B 模型设 8k/16k 就够用,长文档另开“长上下文实例”)

并行切分
• --tensor-parallel-size
张量并行,把 同一个模型切到多张 GPU 上;适用于大模型“装不下单卡”的场景,或想用更多显存提升并发。注意 TP 会引入跨卡通信开销,规模太大时反而影响延迟。

为什么这些参数影响“能同时处理多少个请求”?
本质是 PagedAttention 把各请求的 KV Cache 分页管理,批调度 + 页表映射让显存碎片最小化并发最大化;因此“批量大小(上两项)+ 显存比例(上一项)+ 上下文长度”共同决定并发上限。

  1. 其他常用/重要参数(按主题)

模型装载
• --model(HF 名称或本地路径)、–revision、–trust-remote-code、–download-dir
指定模型与版本、是否信任自定义代码、下载缓存目录。
• --dtype(auto/float16/bfloat16/fp8…)
推理精度选择。bf16 稳定性好;fp8/量化能显著省权重显存,但KV Cache 仍常用 FP16/BF16(KV 低比特是活跃议题但不总是默认/稳定)。
• --tokenizer, --tokenizer-revision, --tokenizer-mode
指定/加速分词器。

服务端(OpenAI 兼容)
• --host, --port, --served-model-name(可多名别名)
起一个 OpenAI 兼容 HTTP 服务,客户端按 OpenAI SDK 直连即可。更多 server 级参数参见 vllm serve --help/Server Args 文档。
• --api-server-count
起多个 API 前端进程,对 Encoder/Embedding 这类“非自回归”模型的并发有时更有效(社区反馈)。

调度/时延优化
• --enable-chunked-prefill
让长 prompt 的预填充分块交错执行,减轻“队头阻塞”。
• --num-scheduler-steps
调度器每次可调度步数;适当增大可提升吞吐,但可能拉高尾延迟。(见社区案例)

观测与指标
• /metrics(Prometheus)导出:
可看到 vllm_running_requests、vllm_waiting_requests、vllm_gpu_memory_usage_bytes 等,直接用来判断是否“顶满”。

  1. “显存吃满”的两套实战配置

目标:在稳定前提下尽可能把显存用于 KV Cache 与批处理,提升吞吐/并发。下面给出两套“可抄作业”的思路,你可据机型/模型微调。

A) 吞吐优先(批大、压榨显存)

vllm serve /root/models/qwen3 \
  --host 0.0.0.0 --port 8000 \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.92 \
  --max-model-len 8192 \
  --max-num-batched-tokens 65536 \
  --max-num-seqs 512 \
  --enable-chunked-prefill \
  --served-model-name qwen3

调参逻辑:
• 把 gpu-memory-utilization 顶到 0.9+ 的稳定上限;
• 将 max-num-batched-tokens 大幅提高(如 32k/64k)以抬高 prefill 吞吐;
• 视卡/驱动把 max-num-seqs 拉到 256/512,观察 /metrics 的 waiting 是否下降;
• 把 max-model-len 设为够用的就行(8k/16k),给并发腾显存。

B) 时延优先(低抖动、首 Token 更快)

vllm serve /root/models/qwen3 \
  --host 0.0.0.0 --port 8000 \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.88 \
  --max-model-len 8192 \
  --max-num-batched-tokens 4096 \
  --max-num-seqs 128 \
  --served-model-name qwen3

调参逻辑:
• 降低 max-num-batched-tokens,减轻预填充“巨批”的排队;
• 降低 max-num-seqs,让 decode 阶段更平滑;
• gpu-memory-utilization 稍微收一档,提高稳定余量。

  1. 量化/并行的取舍要点
    • 量化(AWQ/GPTQ/FP8/Marlin 等)能显著降低权重显存,让你把省下的空间给 max-num-seqs 与 max-num-batched-tokens,通常能换来更高并发。但KV Cache 仍占大头(和上下文长度线性相关),量化对 KV 的节省有限(KV 低比特仍在推进/探索)。
    • TP(张量并行)越大,单实例可用总显存越多、可承载更大批/更长上下文,但跨卡通信变多;如果模型本来就很小,反而考虑 多副本(数据并行/多进程) + 负载均衡提升整体吞吐。

  1. 观测与压测:确定“真的吃满了”
    • 看日志或 /metrics:
    running_requests / waiting_requests、gpu_memory_usage_bytes、gpu_cache_usage_perc; waiting 长期 >0 说明还可加大批/并发或开副本。
    • 压测:
    用 hey/wrk/k6 持续增大并发,记录 首 token 延迟(TTFT)、每秒 tokens、错误率(出现 Server busy、OOM 就退一步)。社区在 encoder/embedding 场景还会调 --api-server-count 以提升并行度。

  1. 两条“省显存→提并发”的黄金法则
    1. 缩短上下文:把 --max-model-len 调到业务需要值即可,KV Cache ∝ 上下文长度,省下来的就是并发位。
    2. 批得更聪明:先把 --max-num-batched-tokens 拉高,再用 --max-num-seqs 填满“decode 并行度”,最后把 --gpu-memory-utilization 往上顶到稳定边缘。

  1. 兼容/平台小贴士
    • OpenAI 兼容启动与参数总览见 vLLM CLI/Server Args 文档;不确定时跑 vllm serve --help。
    • Ascend/TPU/其它 xPU:不同后端对参数支持略有差异(例如某些并行/调度项),以对应后端/发行版文档与 issue 说明为准。
    • **KV Cache CPU Offload(老版本特性)**在 v1 路线基本弃用;不要指望它解决吃满问题,直接在 GPU 侧做批和上下文的取舍更有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值