高性能大语言模型推理服务框架。PagedAttention、连续批处理、多并行策略,从单卡到千卡集群的完整参数指南。
vLLM 是当前最流行的大语言模型推理服务框架。核心特性包括 PagedAttention 显存管理、连续批处理调度、多维度并行策略和丰富的量化支持。由加州大学伯克利分校开发并开源。
| 版本 | 特性 |
|---|---|
| v0.4+ | PagedAttention V2 · 推测解码 (EAGLE / N-Gram / PARD) |
| v0.5+ | 分离式推理 (Disaggregated Prefill/Decode) |
| v0.6+ | 专家并行 EP · LMCache 集成 · Chunked Prefill |
| v0.8+ | V1 引擎重构 · 多 LoRA · NUMA 绑定 |
| 最新 | 200+ 模型 · MTP 推测 · KV 传输多后端 (NIXL/UCX/GDS) |
单节点是 vLLM 部署的基础形态。合理的参数配置直接影响推理性能与显存开销——错误配置可能导致 OOM 或 GPU 利用率不足。
--gpu-memory-utilization 0.9 # 显存占比 0~1
--tensor-parallel-size 4 # 张量并行度,偶数 ≤ 8
--dtype bfloat16 # 数据类型:bf16 / fp16 / fp32
gpu-memory-utilization=0.9,生产环境常用 0.9-0.95,显存不足时下调至 0.8--max-model-len 8192 # 最大上下文长度
--max-num-seqs 64 # 批次最大序列数
--max-num-batched-tokens 8192 # 批次最大 token 数
降低 max-num-seqs 减少显存压力;增大 max-num-batched-tokens 提升吞吐
--optimization-level
vLLM 内置参数
控制 CUDA Graph 等内部优化策略的激进程度。可选值 0(最低)到 3(最高),级别越高吞吐越大,但显存占用和启动开销也相应增加。默认 2。
| 参数 | 默认值 | 说明 | 调优方向 |
|---|---|---|---|
--gpu-memory-utilization | 0.9 | KV cache 显存占比 (0~1) | ↓ 解决 OOM,↑ 增吞吐 |
--tensor-parallel-size | 1 | 张量并行 GPU 数 | 偶数,一般 ≤ 8 |
--dtype | auto | 数据类型选择 | A100/H100 用 bfloat16 |
--max-num-seqs | 动态 | 批次最大序列数 | ↓ 减少显存压力 |
--max-num-batched-tokens | 动态 | 批次最大 token 数 | ↑ 增吞吐,↓ 降延迟 |
--block-size | 16 | vLLM block 大小 | CPU 场景用 32 |
--swap-space | 4 | CPU 交换空间 (GB) | 大模型可增加 |
--enforce-eager | False | 禁用 CUDA graph | OOM 时启用,降显存 |
--optimization-level | 2 | 优化级别,控制 CUDA graph 和算子融合 | 0 降显存 · 2 生产 · 3 最高吞吐 |
量化减少模型权重比特数,以少量精度损失换取大幅显存节省。GPU 架构兼容性是一个关键选择因素。
| 量化方法 | H100/H200 | A100/A800 | V100 | RTX 4090 | 推荐场景 |
|---|---|---|---|---|---|
| FP8 (e4m3) | ✅ 原生 | ⚠ 模拟 | ✗ | ⚠ 模拟 | H100 首选量化 |
| INT8 AWQ | ✅ | ✅ | ✅ | ✅ | 通用生产推理 |
| GGUF | ✅ | ✅ | ✅ | ✅ | CPU 卸载场景 |
| INT4 | ✅ | ✅ | ⚠ | ✅ | 极致显存优化 |
--max-num-batched-tokens 256
--enable-chunked-prefill
--block-size 64
--max-num-batched-tokens 16384
--gpu-memory-utilization 0.95
--optimization-level 2
--gpu-memory-utilization 0.8
--quantization fp8
--swap-space 16
--dtype float32
--enforce-eager
--seed 42
vLLM 支持四种并行策略的自由组合:总 GPU = TP × PP × DP × EP。选择合适的组合方式是在成本和性能之间找到最优解的关键。
# 所有节点运行相同的命令,Ray 自动发现
--tensor-parallel-size 8
--pipeline-parallel-size 2
--distributed-executor-backend ray
# 主节点(node-rank 0)
-tp 8 -pp 2
--nnodes 2
--node-rank 0
--master-addr 192.168.1.100
# 工作节点(node-rank 1)
-tp 8 -pp 2
--nnodes 2
--node-rank 1
--master-addr 192.168.1.100
--headless
| 部署规模 | 推荐组合 | 总 GPU | 适用场景 |
|---|---|---|---|
| 单机 4 卡 | TP=4 | 4 | 小模型多卡加速 |
| 单机 8 卡 | TP=8 | 8 | 70B 标准部署 |
| 单机 8 卡 | TP=4, PP=2 | 8 | 减少 TP 通信开销 |
| 2 节点 16 卡 | TP=8, PP=2 | 16 | 跨节点推理 |
| 4 节点 32 卡 | TP=8, PP=2, DP=2 | 32 | 中大规模高吞吐 |
| 16 节点 128 卡 | TP=8, PP=2, DP=8 | 128 | 大规模生产集群 |
| 后端 | 参数 | 场景 |
|---|---|---|
| Ray | --dist-executor-backend ray | 多节点集群(默认) |
| Multiprocessing | --dist-executor-backend mp | 单节点多卡 |
# GPUDirect RDMA 容器配置
docker run --gpus all \
--ipc=host --shm-size=16G \
vllm/vllm-openai
# 排查通信问题
NCCL_DEBUG=TRACE vllm serve ...
# 网络拓扑优化
NCCL_NET=IB # InfiniBand
NCCL_IB_HCA=mlx5_0:1 # 指定 IB 网卡
vLLM 的生态集成能力大幅扩展了推理场景:LMCache 分布式 KV Cache 实现 3-10x 延迟优化,多种推测解码方法覆盖不同需求,完善的 API 兼容性适配现有工具链。
pd_role: sender,缓冲区 1GBpd_role: receiver,缓冲区 2GBLMCACHE_CONFIG_FILE 引用
# 仅用环境变量,无需 YAML 文件
LMCACHE_CHUNK_SIZE=256 \
LMCACHE_REMOTE_URL=redis://127.0.0.1:6379 \
LMCACHE_LOG_LEVEL=INFO \
vllm serve <model> \
--kv-transfer-config '{
"kv_connector":"LMCacheConnectorV1Dynamic",
"kv_role":"kv_both"
}'
# lmcache.yaml (Prefill 发送节点)
local_cpu: False
enable_pd: True
transfer_channel: nixl
pd_role: sender
pd_buffer_size: 1073741824
pd_buffer_device: cuda
nixl_backends: [UCX]
# 启动
LMCACHE_CONFIG_FILE=./lmcache.yaml vllm serve ...
| 变量 | 默认值 | 说明 |
|---|---|---|
LMCACHE_CONFIG_FILE | None | YAML 配置文件路径(分离式 PD 必需) |
LMCACHE_CHUNK_SIZE | 256 | KV cache 存储的 token 分块大小 |
LMCACHE_REMOTE_URL | None | 远程存储 URL,支持 Redis、S3 等后端 |
LMCACHE_LOG_LEVEL | INFO | 日志级别:DEBUG / INFO / WARNING |
LMCACHE_FORCE_SKIP_SAVE | False | 跳过 KV cache 保存(调试用) |
LMCACHE_OFFLOAD_RPC_PORT | 100 | Offload RPC 端口 |
LMCACHE_RESP_HOST | None | Redis RESP 主机地址 |
LMCACHE_RESP_PORT | None | Redis RESP 端口 |
| 连接器 | 配置 | kv_role | 传输方式 | 场景 |
|---|---|---|---|---|
| LMCacheConnectorV1 | kv_connector: "LMCacheConnectorV1" | kv_both | LMCache 分布式缓存 | 多轮对话加速 |
| P2pNcclConnector | kv_connector: "P2pNcclConnector" | producer / consumer | GPU 间 NCCL 直连 | 单机分离式推理 |
| NixlConnector | kv_connector: "NixlConnector" | producer / consumer | 网络传输 (UCX/GDS) | 跨节点分离式推理 |
--kv-transfer-config '{
"kv_connector":"P2pNcclConnector",
"kv_role":"kv_producer",
"kv_buffer_size":"1e9",
"kv_port":"21001"
}'
--kv-transfer-config '{
"kv_connector":"P2pNcclConnector",
"kv_role":"kv_consumer",
"kv_buffer_size":"8e9",
"kv_port":"22001"
}'
推测解码使用一个较小的草稿模型快速生成候选 token,再由目标模型验证,在保证输出质量的同时降低延迟。核心参数 num_speculative_tokens 控制每步提议 token 数。
| 方法 | 延迟 | 额外模型 | 低 QPS | 高 QPS |
|---|---|---|---|---|
| EAGLE | 高收益 | 是 | 最佳 | 中高 |
| EAGLE3 | 高收益 | 是 | 最佳 | 中高 |
| PARD | 高收益 | 是 | 高 | 中高 |
| Draft Model | 高收益 | 是 | 高 | 中 |
| N-Gram | 低中 | 否 | 低 | 中 |
| Suffix | 低中 | 否 | 低 | 中 |
| MTP | 高收益 | 视模型 | 高 | 中高 |
--speculative-config '{
"method":"eagle",
"model":"yuhuili/EAGLE-LLaMA3-8B",
"num_speculative_tokens":3,
"draft_tensor_parallel_size":1
}'
--speculative-config '{
"method":"ngram",
"num_speculative_tokens":4,
"prompt_lookup_min":2,
"prompt_lookup_max":5
}'
vLLM 提供完整的 OpenAI API 兼容接口,支持 Chat Completions、Completions、Embeddings 等主流端点,可直接替换 OpenAI API 调用。
/v1/chat/completions — 聊天补全/v1/completions — 文本补全/v1/embeddings — 向量嵌入/v1/models — 模型列表/health — 健康检查/metrics — Prometheus 指标--model Qwen/Qwen2.5-7B--trust-remote-code — 允许 HuggingFace 加载模型仓库中的自定义 Python 代码(模型架构、分词器等)。部分新模型使用 transformers 未内置的自定义架构,需要通过此参数授权执行仓库中的 modeling 文件。安全提醒:请确保模型来源可信--hf-config-path 指定配置文件--hf-model-pattern 模型加载过滤/metrics 端点暴露,支持自定义标签vllm:num_requests_running — 当前运行请求数vllm:kv_cache_usage_perc — KV Cache 使用率vllm:time_to_first_token_seconds — TTFT 延迟vllm:e2e_request_latency_seconds — 端到端延迟--log-level 控制日志级别# vLLM 官方 Docker 镜像
docker pull vllm/vllm-openai
# K8s 关键配置
resources:
nvidia.com/gpu: 8
env:
- name: NCCL_IB_HCA
value: mlx5_0
volumeMounts:
- mountPath: /dev/shm
name: dshm
emptyDir:
medium: Memory
sizeLimit: "16Gi"
# LangChain 调用
ChatOpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed",
model="Qwen2.5-7B"
)
# LlamaIndex
Vllm(model="Qwen2.5-7B")
# Ray 集群模式
RAY_DASHBOARD_ADDR=127.0.0.1:8265 \
vllm serve <model> \
--distributed-executor-backend ray
# 查看集群状态
ray status
ray list nodes
vLLM 在 /metrics 端点暴露丰富的 Prometheus 指标,覆盖引擎状态、请求 SLO、KV Cache 效率等维度,可直接接入 Grafana 监控大屏。生产环境建议搭配 --log-level info 和 --kv-cache-metrics-sample 开启 KV 块级指标。
| 指标名称 | 类型 | 含义 | 监控目的 |
|---|---|---|---|
| vllm:num_requests_running | Gauge | 当前正在运行的请求数 | 引擎负载饱和度 |
| vllm:num_requests_swapped | Gauge | 被 swap 到 CPU 的请求数 | 显存压力信号 |
| vllm:num_requests_waiting | Gauge | 排队等待的请求数 | 请求堆积程度 |
| vllm:kv_cache_usage_perc | Gauge | KV Cache 使用百分比 | 显存瓶颈预警(>0.9 风险) |
| vllm:prefix_cache_hits | Counter | Prefix Cache 命中数 | 前缀复用效率 |
| vllm:prefix_cache_queries | Counter | Prefix Cache 查询总数 | 计算命中率 = hits / queries |
| vllm:prompt_tokens_total | Counter | 累计处理的 Prompt Token 数 | 总体流量规模 |
| vllm:generation_tokens_total | Counter | 累计生成的 Token 数 | 总体输出量 |
| vllm:request_success_total | Counter | 累计成功请求数 | 服务可用性 |
Histogram 类型指标提供 _count、_sum 和 _bucket,可按百分位(p50/p90/p99)计算延迟 SLO。
| 指标名称 | 含义 | 典型告警阈值 |
|---|---|---|
| vllm:time_to_first_token_seconds | 首 Token 延迟(TTFT) | p99 > 5s 告警 |
| vllm:inter_token_latency_seconds | Token 间延迟(TPOT) | p99 > 200ms 告警 |
| vllm:e2e_request_latency_seconds | 端到端请求延迟 | 视业务场景 |
| vllm:request_prompt_tokens | 每个请求的 Prompt Token 数 | 超长请求分布 |
| vllm:request_generation_tokens | 每个请求的生成 Token 数 | max_tokens 分布 |
| vllm:request_prefill_time_seconds | Prefill 阶段耗时 | 长 Context 场景关注 |
| vllm:request_decode_time_seconds | Decode 阶段耗时 | 长生成场景关注 |
需要 --kv-cache-metrics-sample 参数开启,用于分析缓存效率和内存压力。
| 指标名称 | 含义 | 分析价值 |
|---|---|---|
| vllm:kv_block_lifetime_seconds | KV Block 从创建到释放的生存时间 | 缓存压力 & 分页效率 |
| vllm:kv_block_idle_before_evict_seconds | Block 被逐出前的空闲时间 | Cache 策略有效性 |
| vllm:kv_block_reuse_gap_seconds | Block 两次复用之间的间隔 | 前缀复用率 |
由 prometheus_fastapi_instrumentator 自动采集,反映 API 网关层健康状况。
| 指标名称 | 类型 | 含义 |
|---|---|---|
| http_requests_total | Counter | HTTP 请求总数(按 method/path/status 分) |
| http_request_size_bytes | Gauge | 请求体大小(按 method/path 分) |
| http_response_size_bytes | Gauge | 响应体大小(按 method/path 分) |
| http_request_duration_seconds | Histogram | HTTP 请求处理延迟(按 method/path 分) |
scrape_configs:
- job_name: 'vllm'
scrape_interval: 10s
static_configs:
- targets: ['localhost:8000']
metrics_path: /metrics
# p99 TTFT
histogram_quantile(0.99,
rate(vllm:time_to_first_token_seconds_bucket[5m]))
# KV Cache 使用率
vllm:kv_cache_usage_perc
# 请求吞吐量
rate(vllm:request_success_total[5m])
每个场景说明优化目标、参数选择理由和完整配置。关键在于理解"为什么这样设置"——知其然,更要知其所以然。
--gpu-memory-utilization 0.9:保留 10% 显存给模型权重和临时缓冲区。7B 模型权重约 14GB(bf16),KV cache 和其余开销之间需要留出余量,0.9 是稳妥的起点。--max-num-seqs 64:开发测试场景并发请求量一般不高,64 足以支撑多轮并发测试。调低此值可降低显存压力。--enable-prefix-caching:开启前缀缓存后,相同 system prompt 的 KV cache 可复用,开发阶段反复测试相同 prompt 时显著减少 Prefill 计算。vllm serve Qwen/Qwen2.5-7B-Instruct \
--gpu-memory-utilization 0.9 \
--max-num-seqs 64 \
--enable-prefix-caching
--gpu-memory-utilization 0.7:仅分配 70% 显存给 KV cache,预留更多空间给模型权重。边缘设备显存有限,宁可降低吞吐也要避免 OOM。--enforce-eager:禁用 CUDA graph 优化。CUDA graph 需要额外显存来缓存计算图,禁用后以速度换显存,适合显存极度受限场景。--swap-space 16:将 16GB CPU 内存作为 KV cache 溢出缓冲区。当 GPU 显存不足时将部分 KV cache 换出到 CPU,牺牲速度保可用性。vllm serve <model> \
--enforce-eager \
--gpu-memory-utilization 0.7 \
--swap-space 16 \
--max-num-seqs 16
--speculative-config EAGLE:推测解码用草稿模型快速生成候选 token,目标模型只需验证,减少串行解码步数。低 QPS 场景下草稿模型不会争抢 GPU,收益最显著。--max-num-batched-tokens 256:限制批次 token 数上限,确保每个请求不必等待队列中其他请求的 token 处理完。值越小,单个请求的首 token 延迟(TTFT)越低。vllm serve <model> \
--speculative-config '{
"method":"eagle",
"model":"yuhuili/EAGLE-LLaMA3-8B",
"num_speculative_tokens":3
}' \
--max-num-batched-tokens 256 \
--tensor-parallel-size 4
--tensor-parallel-size 8:70B 模型权重约 140GB(bf16),单张 A100(80GB) 无法容纳。8 卡 TP 将权重切分到每卡约 17.5GB,同时 KV cache 也可分摊到各卡。--gpu-memory-utilization 0.95:8×80GB 总显存 640GB,预留 5% 给模型权重以外开销已足够。高比值让 KV cache 有更大空间支撑高并发。--max-num-batched-tokens 8192:兼顾延迟和吞吐的平衡点。低于 8192 则 GPU 利用率不足,高于此值 TTFT 会明显增加。--dtype bfloat16:A100/H100 原生支持 bf16,相比 fp16 有更好的数值稳定性。fp32 显存翻倍,不推荐。vllm serve meta-llama/Llama-3.1-70B-Instruct \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.95 \
--max-num-batched-tokens 8192 \
--dtype bfloat16 \
--optimization-level 2
--max-num-batched-tokens 16384:大批次让 GPU 计算单元满载。vLLM 的连续批处理在批次足够大时 GPU 利用率从 40% 提升到 90%+。--enable-chunked-prefill:将长 prompt 切块,与 decode 交错执行,避免单个长 prompt 的 Prefill 阻塞后续 decode。--gpu-memory-utilization 0.95:尽可能多的显存用于 KV cache,以支持更大的并发批次。vllm serve <model> \
--max-num-batched-tokens 16384 \
--enable-chunked-prefill \
--gpu-memory-utilization 0.95 \
--max-num-seqs 128 \
--optimization-level 2
--max-model-len 131072:显式设置为 128K。注意 KV cache 随上下文长度线性增长,128K 约消耗 40-80GB 显存(取决于模型)。--enable-chunked-prefill:长 prompt 的 Prefill 计算量巨大,分块处理避免单次 Prefill 长时间占用 GPU。--max-num-batched-tokens 4096:长上下文下每个请求本身 token 数就大,批次上限设太高易 OOM。4096 在长序列和 GPU 利用率之间取得平衡。--block-size 64:大 block 减少 PagedAttention 的内存管理开销。长序列时 block 管理开销显著,64 比默认 16 减少 75% 的管理操作。vllm serve <model> \
--max-model-len 131072 \
--enable-chunked-prefill \
--max-num-batched-tokens 4096 \
--block-size 64 \
--gpu-memory-utilization 0.9
--enable-expert-parallel:将 MoE 层的不同 expert 分配到不同 GPU,每卡只计算其负责的 expert,大幅降低单卡计算量和显存需求。--tensor-parallel-size 8:将 attention 和 shared expert 等非 MoE 部分用 TP 切分。EP + TP 组合是 MoE 推理的标准做法。vllm serve deepseek-ai/DeepSeek-V3 \
--enable-expert-parallel \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.9 \
--dtype bfloat16
--quantization fp8:将权重从 bf16 转为 fp8(e4m3),大小减半。H100 的 FP8 Tensor Core 原生支持,计算速度不降反升。精度损失约 0.1-0.5%。--kv-cache-dtype fp8_e4m3:KV cache 也使用 FP8 存储,进一步减半。e4m3 格式在 LLM 场景下精度表现良好。--gpu-memory-utilization 0.95:FP8 量化后显存余量更充裕,可以支撑更大的并发批次。vllm serve <model> \
--quantization fp8 \
--kv-cache-dtype fp8_e4m3 \
--gpu-memory-utilization 0.95 \
--tensor-parallel-size 8 \
--dtype bfloat16
--tensor-parallel-size 8:限制在单节点内,利用 NVLink 高速通信。TP 通信密集,跨网络执行会严重降速。--pipeline-parallel-size 2:PP 跨节点通信量远小于 TP,适合跨机部署。PP=2 将模型层分两段,节点间只需传输中间激活。--data-parallel-size 8:DP 无通信开销,每个副本独立处理请求。8 个 DP 副本线性扩展吞吐 8 倍。--distributed-executor-backend ray:多节点必须使用 Ray 作为分布式后端,负责节点发现和任务调度。vllm serve <model> \
--tensor-parallel-size 8 \
--pipeline-parallel-size 2 \
--data-parallel-size 8 \
--distributed-executor-backend ray \
--gpu-memory-utilization 0.9
LMCACHE_CONFIG_FILE:指定 LMCache 配置,定义 KV cache 存储后端(GPU/CPU/磁盘/远程)。对话场景优先 GPU 或 CPU 内存以降低读取延迟。"kv_connector":"LMCacheConnectorV1":将 KV cache 写入 LMCache 的分布式存储。多轮对话中历史 KV cache 从缓存直接读取,无需重新 Prefill。LMCACHE_CONFIG_FILE=./lmcache.yaml \
vllm serve <model> \
--kv-transfer-config '{
"kv_connector":"LMCacheConnectorV1Dynamic",
"kv_role":"kv_both",
"kv_connector_module_path":
"lmcache.integration.vllm.lmcache_connector_v1"
}'
--trust-remote-code:部分模型(包括多模态、新架构模型)的配置中引用了 HuggingFace 仓库内的自定义 Python 代码,如 modeling_llava.py、tokenization_qwen.py 等。transformers 默认禁止执行远程代码以防止安全风险,此参数授权加载。不仅多模态需要,DeepSeek-V3、Qwen2.5 等使用自定义模型架构的也需启用。请确保模型来源可信。--max-model-len 8192:图像编码后产生大量视觉 token(一张图约 256-1024 tokens),8K 上下文在理解和 token 消耗间取得平衡。--limit-mm-per-prompt:限制每轮图片/视频数量,防止多张高分辨率图片导致显存爆炸。vllm serve <model> \
--trust-remote-code \
--max-model-len 8192 \
--limit-mm-per-prompt '{
"image":5,"video":1
}' \
--gpu-memory-utilization 0.9
涵盖单节点、多节点、生态集成的全部核心参数与常用环境变量,快速定位最佳配置。
覆盖从显存管理到分布式通信的完整推理栈
| 参数名 | 默认值 | 可选值 | 说明 | 建议值 |
|---|---|---|---|---|
--model |
必需 | 模型名 / HuggingFace 路径 | 指定要加载的模型名称或路径 | Qwen/Qwen2.5-7B |
--gpu-memory-utilization |
0.9 |
0.0 ~ 1.0 |
KV cache 占用 GPU 显存比例 | 生产 0.9~0.95,OOM 时 0.8 |
--tensor-parallel-size |
1 |
偶数,≤ 8 | 张量并行 GPU 数量 | 7B=1~2,13~34B=4,70B=8 |
--dtype |
auto |
auto / float16 / bfloat16 / float32 | 推理数据类型 | A100/H100 用 bfloat16 |
--max-model-len |
模型默认 | int,≤ 模型最大上下文 | 最大上下文长度(prompt + 生成) | 对话 8K,文档 32K~128K |
--max-num-seqs |
动态计算 | 16 ~ 256 |
批次最大并行序列数 | 延迟敏感 16~32,吞吐 64~256 |
--max-num-batched-tokens |
动态计算 | 256 ~ 65536 |
批次最大 token 总数 | 延迟低 256,吞吐高 16384 |
--quantization |
None | fp8 / fp8_e4m3 / fp8_e5m2 / awq / gguf / squeezellm | 模型权重量化方法 | H100 用 fp8,通用用 awq |
--kv-cache-dtype |
auto | auto / fp8_e4m3 / fp8_e5m2 | KV cache 存储数据类型 | H100+fp8 时用 fp8_e4m3 |
--block-size |
16 |
8 / 16 / 32 / 64 |
PagedAttention 内存块大小 | GPU 默认 16,CPU 32,长序列 64 |
--swap-space |
4 |
int(单位 GB) | KV cache CPU 交换空间 | 大模型 16~32 |
--enforce-eager |
False | flag | 禁用 CUDA graph,减少显存 | OOM 时启用 |
--optimization-level |
2 |
0: 无 / 1: 部分 / 2: 完整(默认) / 3: 激进 | 优化级别,控制 CUDA graph 和算子融合 | 默认 2;显存紧张 0;吞吐极致 3 |
--enable-prefix-caching |
False | flag | 启用自动前缀 KV cache 复用 | 重复 prompt 场景启用 |
--enable-chunked-prefill |
auto | flag | 将长 prefill 分块执行,避免阻塞 | 吞吐优先场景启用 |
--seed |
None | int | 随机种子,保证可复现性 | 调试用 42 |
| 参数名 | 默认值 | 可选值 | 说明 | 建议值 |
|---|---|---|---|---|
--nnodes |
1 |
int | 总节点数。Ray 后端自动检测,仅 mp 后端需显式声明 | 2~16 |
--node-rank |
0 |
0 ~ nnodes-1 |
当前节点编号。Ray 后端自动分配,仅 mp 后端需显式声明 | 主节点 0,工作节点 1+ |
--master-addr |
localhost |
IP 地址 | 主节点地址。仅 mp 后端需要,Ray 后端通过 Ray 集群发现 | 主节点内网 IP |
--master-port |
2222 |
int(端口号) | 主节点通信端口。仅 mp 后端需要 | 默认 2222 |
--pipeline-parallel-size |
1 |
int | 流水线并行度,跨节点分割层 | 2~4(跨节点推荐 2) |
--tensor-parallel-size |
1 |
偶数 ≤ 8 | 张量并行度,单节点内分割权重 | 8(利用 NVLink) |
--data-parallel-size |
1 |
int | 数据并行度,模型副本数 | 按扩展需求设定 |
--distributed-executor-backend |
ray |
ray / mp | 分布式执行器后端 | 多节点用 ray,单机多卡用 mp |
--headless |
False | flag | 工作节点模式(不启动 API 服务) | 工作节点必须启用 |
--numa-bind |
False | flag | 自动绑定 NUMA 节点优化性能 | 多插槽服务器启用 |
| 参数名 | 默认值 | 可选值 | 说明 | 建议值 |
|---|---|---|---|---|
--kv-transfer-config |
None | JSON 字符串 | KV 传输配置:连接器类型、节点角色、缓冲区大小等,完整 JSON 结构见下方 | 见下方配置详解 |
--speculative-config |
None | JSON 字符串 | 推测解码配置:方法、草稿模型、候选 token 数等,完整 JSON 结构见下方 | 见下方配置详解 |
--enable-expert-parallel |
False | flag | MoE 模型启用专家并行 | DeepSeek-V3 等 MoE 模型启用 |
--served-model-name |
model 名称 | string | API 中暴露的模型名 | 自定义别名 |
--trust-remote-code |
False | flag | 信任 HuggingFace 远程自定义代码。安全风险:会执行仓库中的 Python 文件 | 新架构模型、多模态模型需要 |
--limit-mm-per-prompt |
None | JSON | 限制每轮多模态输入数量 | {"image":5,"video":1} |
--host |
0.0.0.0 |
IP 地址 | API 服务绑定地址 | 默认 0.0.0.0 |
--port |
8000 |
int | API 服务端口 | 默认 8000 |
--api-server-count |
1 |
int | API 服务器进程数,多进程提高并发 | 高并发可 ≥ 2 |
--log-level |
INFO | DEBUG / INFO / WARNING / ERROR | 日志级别 | 生产 INFO,排查用 DEBUG |
--kv-transfer-config 完整 JSON 结构| 子字段 | 类型 | 必填 | 说明 | 可选值 / 示例 |
|---|---|---|---|---|
kv_connector | string | 是 | KV 传输连接器类型 | LMCacheConnectorV1Dynamic / P2pNcclConnector / NixlConnector |
kv_role | string | 是 | 本节点角色 | kv_producer(Prefill) / kv_consumer(Decode) / kv_both |
kv_rank | int | 否 | 节点逻辑编号(手动指定) | 0(Prefill) / 1(Decode) |
kv_connector_module_path | string | 按连接器 | 自定义连接器的 Python 模块导入路径 | lmcache.integration.vllm.lmcache_connector_v1 |
kv_buffer_size | string | 否 | 传输缓冲区大小 | 1GB / 2GB / 512MB |
kv_rank_override | int | 否 | 覆盖自动分配的 kv_rank | 0 ~ N-1 |
kv_ip | string | Nixl 需要 | Nixl 连接的目标 IP | 192.168.1.100 |
kv_port | int | Nixl 需要 | Nixl 连接的目标端口 | 12345 |
--kv-transfer-config '{
"kv_connector": "LMCacheConnectorV1Dynamic",
"kv_role": "kv_both",
"kv_connector_module_path":
"lmcache.integration.vllm.lmcache_connector_v1"
}'
--kv-transfer-config '{
"kv_connector": "P2pNcclConnector",
"kv_role": "kv_producer",
"kv_buffer_size": "1GB"
}'
--kv-transfer-config '{
"kv_connector": "NixlConnector",
"kv_role": "kv_consumer",
"kv_buffer_size": "2GB",
"kv_ip": "192.168.1.100",
"kv_port": 12345
}'
LMCACHE_CONFIG_FILE=./lmcache.yaml \
--kv-transfer-config '{
"kv_connector": "LMCacheConnectorV1Dynamic",
"kv_role": "kv_producer",
"kv_connector_module_path":
"lmcache.integration.vllm.lmcache_connector_v1"
}'
--speculative-config 完整 JSON 结构| 子字段 | 类型 | 适用方法 | 说明 | 可选值 / 示例 |
|---|---|---|---|---|
method | string | 全部 | 推测解码方法 | eagle / eagle3 / pard / ngram / suffix / mtp |
model | string | EAGLE/PARD | 草稿模型路径或名称 | EAGLE-LLaMA3-8B / draft-model-path |
num_speculative_tokens | int | 全部 | 每步推测的候选 token 数 | 3 ~ 8,推荐 5 |
draft_tensor_parallel_size | int | EAGLE | 草稿模型的 TP 度 | 1 ~ 8,默认 1 |
prompt_lookup_min | int | N-Gram | N-Gram 最小匹配长度 | 2 |
prompt_lookup_max | int | N-Gram | N-Gram 最大匹配长度 | 5 |
max_draft_len | int | 全部 | 草稿序列最大长度 | 512 ~ 2048 |
spacy_draft | bool | Suffix | 启用 spaCy 句式匹配 | true / false |
--speculative-config '{
"method": "eagle",
"model": "EAGLE-LLaMA3-8B",
"num_speculative_tokens": 5,
"draft_tensor_parallel_size": 1
}'
--speculative-config '{
"method": "ngram",
"num_speculative_tokens": 5,
"prompt_lookup_min": 2,
"prompt_lookup_max": 5
}'
--speculative-config '{
"method": "mtp",
"num_speculative_tokens": 3
}'
--speculative-config '{
"method": "pard",
"model": "draft-model",
"num_speculative_tokens": 5
}'
以下按现象分类,每个问题列出根因、诊断方法和解决方案,由简到繁逐步推进。
nvidia-smi 查看显存使用率;vllm:kv_cache_usage_perc 监控指标 > 0.9 触发预警。
--gpu-memory-utilization 0.8 降低显存占比--max-num-seqs 32 减少并发批大小--quantization fp8 或 AWQ 量化权重--swap-space 16 增加 CPU 交换空间--enforce-eager 禁用 CUDA graph(等价 optimization-level 0)vllm:time_to_first_token_seconds 和 vllm:inter_token_latency_seconds 的 p99 分位。
--enable-chunked-prefill 将长 prefill 切分;--max-num-batched-tokens 256 限制批大小--optimization-level 2 启用 CUDA Graph;--block-size 64 减少 block 管理开销--tensor-parallel-size 4 → 2(通信开销可能超计算加速收益)vllm:num_requests_running 是否未达上限;nvidia-smi 检查 GPU 计算/显存利用率 < 80%。
--max-num-batched-tokens 16384 + --max-num-seqs 128--enable-prefix-caching 复用公共前缀(对话历史、System Prompt)--data-parallel-size 4 或 8 横向扩展--optimization-level 2(默认)启用 CUDA Graph + 算子融合--enable-chunked-prefill 避免 prefill 阻塞 decode--api-server-count 2 提高 HTTP 并发处理能力NCCL_DEBUG=TRACE 查看通信拓扑和带宽;nvlink-status 检查 NVLink 连接;ibstatus 检查 InfiniBand 链路。
--ipc=host --shm-size=16G;启用 InfiniBandNCCL_IB_HCA=mlx5_0 指定 IB 网卡;NCCL_NET=IB 强制 IB 协议