在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用vllm-optimization
星标2
分支0
更新时间2026年6月24日 09:40
vLLM 推理优化审计
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
vLLM 推理优化审计
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
DeepSpeed ZeRO 显存优化与训练加速
Flash Attention 版本选型与最佳配置
提交代码到远程仓库
NVIDIA Nsight Systems 系统级 GPU Profiling
Nsight Systems 自动检测、安装与升级
PyTorch Profiler 性能分析,提供算子级瓶颈定位
| name | vllm-optimization |
| description | vLLM 推理优化审计 |
| user-invocable | false |
针对使用 vLLM 推理框架的项目(包括独立推理部署和 RLHF/GRPO 训练中的推理组件),快速识别已采用和未采用的优化手段,提供针对性的吞吐、延迟和显存优化建议。
当识别到用户项目满足以下任一条件时自动触发:
vllm(如 from vllm import LLM、from vllm import SamplingParams、from vllm.engine)tensor_parallel_size(与 vllm 上下文共现)、gpu_memory_utilization、max_model_len、enforce_eager、enable_prefix_caching、enable_chunked_prefillvllmvllm serve、python -m vllm.entrypointsuse_vllm=True、vllm_mode、infer_backend: vllm)vllm_gpu_util、vllm_maxlen、vllm_mode、sleep_level、enable_sleep_mode你是 vLLM 推理优化专家。被调用时,请按照以下清单对目标项目进行全面审计。对每个检查项,判定其状态:已启用 / 未启用 / 建议启用 / 不适用,并给出具体的配置修改建议。
扫描项目的 Python 代码、配置文件和启动脚本,确定:
standalone_serve:独立部署推理服务(vllm serve / OpenAI 兼容 API)standalone_offline:离线批量推理(LLM() + generate())rlhf_server:RLHF/GRPO 训练中的独立推理服务(如 TRL vllm_mode="server")rlhf_colocate:RLHF/GRPO 训练中与训练器共享 GPU(如 TRL vllm_mode="colocate"、verl colocate)framework_integrated:通过训练框架集成(LlamaFactory infer_backend: vllm、ms-swift use_vllm: true)model 参数值,识别模型系列和参数量/system-resources 结果)tensor_parallel_size、pipeline_parallel_size、data_parallel_size| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 优化级别 | -O0 / -O1 / -O2(默认)/ -O3 | O2 是默认级别(完整编译+CUDA Graph)。O0 适合调试,O1 适合快速启动,O2/O3 适合生产 |
| CUDA Graph | enforce_eager: false(默认)或通过 -O 级别控制 | CUDA Graph 减少 kernel launch 开销。enforce_eager=True 禁用 CUDA Graph,调试或显存不足时使用 |
| torch.compile | 通过 -O1/-O2 自动启用compilation_config 高级配置 | V1 引擎默认启用。可自定义 cudagraph_capture_sizes 减少 CUDA Graph 显存占用 |
| V1 引擎 | vLLM ≥0.8 默认使用 V1 引擎 | V1 引擎优化:多进程架构、decode 优先调度、RECOMPUTE 抢占模式。确认版本 ≥0.8 |
| CUDA Graph 显存控制 | cudagraph_capture_sizes=[1,2,4,8,16] | 减少默认 capture sizes 可降低 CUDA Graph 显存占用,代价是更多 padding |
建议:
-O2(默认)或 -O3enforce_eager=True 释放 CUDA Graph 显存-O0(禁用所有编译和 CUDA Graph)| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| GPU 显存利用率 | gpu_memory_utilization: 0.92(默认) | 控制分配给模型+KV Cache 的显存比例。OOM 可降低,显存充裕可提至 0.95 |
| 最大序列长度 | max_model_len(默认从 model config 读取) | 限制最大序列长度可大幅减少 KV Cache 显存。设为实际最大需求而非模型上限 |
| KV Cache 量化 | kv_cache_dtype: "fp8" / "fp8_e4m3" / "fp8_e5m2"calculate_kv_scales: true | FP8 KV Cache 减少约 50% 缓存显存,轻微精度损失。H100/Ada+ 推荐 |
| Swap Space | swap_space(GiB) | CPU 内存用于 KV Cache 交换。增大可处理更多并发请求 |
| KV Cache Offload | kv_transfer_config: {"kv_connector": "OffloadingConnector", ...} | 将完成的 KV blocks 异步 DMA 到 CPU。多轮对话/长上下文场景 |
| Block Size | block_size: 16(默认) | KV Cache 块大小(token 数)。通常不需要调整 |
建议:
max_model_len 为实际最大值(如 4096 而非模型支持的 128K)kv_cache_dtype: "fp8" + calculate_kv_scales: truegpu_memory_utilization(0.93~0.95)| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 张量并行(TP) | tensor_parallel_size: N | 单节点内多 GPU 最常用方案。模型层内拆分。N = 最少满足显存需求的 GPU 数 |
| 流水线并行(PP) | pipeline_parallel_size: N | 层间拆分。可与 TP 组合(TP×PP = 总 GPU 数)。适合超大模型 |
| 数据并行(DP) | data_parallel_size: Ndata_parallel_backend: ray/mp | 多副本负载均衡。内部 DP 提供单端点多副本。TP×PP×DP = 总 GPU 数 |
| Expert 并行(EP) | enable_expert_parallel: true | MoE 模型专用(DeepSeek-V3、Qwen3MoE、Llama-4)。将专家分配到不同 GPU |
| DP + TP 组合 | --data-parallel-size 4 --tensor-parallel-size 2 | 8 GPU: 4 个 DP 副本 × 每副本 2 卡 TP |
建议:
| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 在线 FP8 量化 | quantization: "fp8_per_tensor" / "fp8_per_block" / "mxfp8" | 无需预量化模型,直接加载 BF16 权重在线量化。Hopper+ 推荐 fp8_per_block |
| AWQ 量化 | quantization: "awq" | 4-bit 权重量化。需预量化模型。Turing+ 支持 |
| GPTQ 量化 | quantization: "gptq" | 4-bit 权重量化。需预量化模型。Volta+ 支持 |
| BitsAndBytes | quantization: "bitsandbytes" | 4/8-bit 量化。灵活但性能略低。Volta+ 支持 |
| GGUF | quantization: "gguf" | llama.cpp 格式。支持多种量化位宽。全 GPU 支持 |
| Marlin Kernel | 自动选择(AWQ/GPTQ 预量化模型) | 高性能 4-bit kernel。Turing+ 自动启用 |
| 混合量化 | quantization_config: {"linear": "fp8_per_block", "moe": "fp8_per_tensor"} | 不同层类型用不同量化精度。MoE 模型特别有用 |
建议:
quantization: "fp8_per_block"(在线量化,无需预处理)quantization: "bitsandbytes" 4-bit| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 分块预填充 | enable_chunked_prefill: true(V1 默认开启) | 将大 prefill 拆块与 decode 交错,平衡 TTFT 和 ITL |
| 最大批处理 Token | max_num_batched_tokens: 2048(默认) | 每次迭代最大 token 数。增大→TTFT↓ 吞吐↑;减小→ITL↓ 延迟优先 |
| 最大并发序列 | max_num_seqs: 128(默认) | 每次迭代最大并发请求数。减小可降低 ITL |
| 前缀缓存 | enable_prefix_caching: true(V1 默认开启) | 自动缓存共享前缀的 KV Cache。多轮对话/RAG 场景大幅加速 |
| 最大部分预填充 | max_num_partial_prefills | 控制并发部分 prefill 操作数量 |
建议:
max_num_batched_tokens=8192+、max_num_seqs=256max_num_batched_tokens=2048、max_num_seqs=64enable_prefix_caching=truemax_num_seqs 避免抢占| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| Flash Attention 版本 | --attention-config.flash_attn_version=2/3/4 | FA2 通用;FA3 Hopper+;FA4 Blackwell(SM100+) |
| 注意力后端选择 | --attention-backend FLASH_ATTN / FLASHINFER / TRITON_ATTN | Ampere/Hopper: FLASH_ATTN 优先;Blackwell: FLASHINFER 优先 |
| MLA 后端 | FLASHMLA / FLASH_ATTN_MLA / TRITON_MLA / CUTLASS_MLA | DeepSeek 系列 MLA 架构专用 |
| FP8 注意力 | FA3 + kv_cache_dtype="fp8" 自动启用 | Hopper+FA3 可在 FP8 域执行 attention |
建议:
FLASH_ATTN + FA2/FA3FLASHINFER + FA4| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| EAGLE/EAGLE3 | speculative_config: {"method": "eagle", "model": "...", "num_speculative_tokens": 5} | 高收益推测解码。需下载对应 EAGLE 模型 |
| MTP(多 Token 预测) | speculative_config: {"method": "mtp", "num_speculative_tokens": 1} | 利用模型��生 MTP head(如 DeepSeek-V3)。无需额外模型 |
| Draft Model | speculative_config: {"method": "draft_model", "model": "...", "num_speculative_tokens": 5} | 使用同系列小模型。需额外显存 |
| N-gram | speculative_config: {"method": "ngram", "num_speculative_tokens": 5} | 轻量级,无需额外模型。重复性文本场景效果好 |
| Draft TP | speculative_config: {..., "draft_tensor_parallel_size": N} | Draft model 独立 TP 配置 |
建议:
| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| Sleep Mode | enable_sleep_mode: truellm.sleep(level=1/2) / llm.wake_up() | Level 1: offload 权重到 CPU;Level 2: 释放所有显存。RLHF colocate 必用 |
| Weight Transfer | weight_transfer_config: {"backend": "nccl"/"ipc"} | NCCL: 跨 GPU 传权重;IPC: 同 GPU CUDA IPC。训练后同步权重到推理引擎 |
| Colocate 模式 | vllm_mode: "colocate"(TRL)verl colocate | 推理与训练共享 GPU。必须配合 sleep mode 切换显存 |
| Server 模式 | vllm_mode: "server"(TRL)���立 vLLM 进程 | 推理独占 GPU,通过 HTTP 通信。更稳定但需额外 GPU |
| Async RL | POST /pause + POST /resumeengine.pause_generation() / engine.resume_generation() | 异步 RL:生成暂停→同步权重→恢复生成。避免阻塞 |
| 动态 LoRA | POST /v1/load_lora_adapter {"load_inplace": true} | RLHF 训练完一轮后热更新 LoRA 权重,无需重启 |
| Layerwise Reloading | QeRL 分层重载 | 量化权重热更新,不需重新编译 |
建议:
enable_sleep_mode=true,训练时 sleep(level=2),推理时 wake_up()load_lora_adapter(load_inplace=True) 热更新| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| LoRA 服务 | --enable-lora --lora-modules sql=path/动态加载 API | 多 LoRA 并发服务。运行时动态加载/卸载 |
| API Server 多进程 | --api-server-count 4 | 多个 API 处理进程,提升输入处理吞吐 |
| Disaggregated Prefill | --kv-transfer-config {"kv_connector": "NixlConnector"} | Prefill 和 Decode 分离到不同实例。独立扩缩容 |
| YAML 配置文件 | vllm serve --config config.yaml | 生产环境推荐使用 YAML 配置文件统一管理 |
| 多模态限制 | limit_mm_per_prompt: {"image": 3}mm_processor_kwargs: {"max_pixels": 768*768} | 控制多模态输入资源,防止 OOM |
建议:
--api-server-count 匹配 CPU 核数| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 快速 Tokenizer | VLLM_USE_FASTOKENS=1 | Rust 后端 BPE tokenizer,高 QPS 场景加速 |
| CPU 核心数 | 物理核心 ≥ 2 + N(N = GPU worker 数) | CPU 不足会成为隐性瓶颈。DP 场景需更多核 |
| Worker 进程方式 | VLLM_WORKER_MULTIPROC_METHOD=spawn | 默认 fork。某些环境需 spawn(如 CUDA MPS) |
| Dev Mode | VLLM_SERVER_DEV_MODE=1 | 启用 sleep/wake、weight transfer 等开发接口。RLHF 场景需要 |
| 长序列允许 | VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 | 允许 max_model_len 超过模型默认值 |
| 预抢占处理 | 监控 preemption 计数 | 频繁抢占 = KV Cache 不足。增大 gpu_memory_utilization 或减小并发 |
建议:
VLLM_USE_FASTOKENS=1VLLM_SERVER_DEV_MODE=12 + tensor_parallel_size + data_parallel_size根据使用模式和硬件条件,推荐最优配置组合:
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
dtype="auto", # BF16 on A100
gpu_memory_utilization=0.92,
max_model_len=8192, # 限制为实际需求
enable_prefix_caching=True, # V1 默认
enable_chunked_prefill=True, # V1 默认
max_num_seqs=128,
)
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--gpu-memory-utilization 0.92 \
--max-model-len 8192 \
-O2
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.93 \
--max-model-len 16384 \
--max-num-seqs 256 \
--max-num-batched-tokens 8192 \
--kv-cache-dtype fp8 \
-O2
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--data-parallel-size 4 \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.93 \
--kv-cache-dtype fp8 \
--max-num-batched-tokens 8192 \
--api-server-count 4 \
-O2
from trl import GRPOConfig
training_args = GRPOConfig(
use_vllm=True,
vllm_mode="colocate",
vllm_gpu_memory_utilization=0.4, # colocate 模式需分配较少显存
)
# vLLM 侧配置(自动生成)
# enable_sleep_mode=True
# 训练时自动 sleep(level=2),推理时自动 wake_up()
from trl import GRPOConfig
training_args = GRPOConfig(
use_vllm=True,
vllm_mode="server",
# vLLM 独立进程在单独 GPU 上运行
# 通过 HTTP API 通信,NCCL 同步权重
)
# 单独启动 vLLM server(RLHF 场景需 dev mode)
VLLM_SERVER_DEV_MODE=1 vllm serve model \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.92 \
--enable-sleep-mode \
-O2
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
quantization="fp8_per_block", # 在线 FP8 量化,无需预处理
gpu_memory_utilization=0.92,
max_model_len=4096,
max_num_seqs=64,
)
vllm serve deepseek-ai/DeepSeek-V3 \
--tensor-parallel-size 8 \
--enable-expert-parallel \
--kv-cache-dtype fp8 \
--gpu-memory-utilization 0.95 \
--max-model-len 8192 \
--attention-backend FLASHMLA \
-O2
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--speculative-config '{
"method": "eagle",
"model": "yuhuili/EAGLE-LLaMA3-Instruct-8B",
"num_speculative_tokens": 5
}' \
--gpu-memory-utilization 0.92 \
-O2
按以下格式输出审计结果:
# vLLM 推理优化审计报告
## 基本信息
- 模型:{model}({参数量})
- 使用模式:{standalone_serve / rlhf_colocate / rlhf_server / ...}
- 硬件:{GPU型号} x {数量}({显存}GB)
- vLLM 版本:{如可检测}
- GPU 架构:{Ampere / Hopper / ...}
## 审计结果总览
| 类别 | 得分 | 已启用 | 建议启用 |
|------|------|--------|----------|
| A. 引擎与编译优化 | x/5 | ... | ... |
| B. 显存管理 | x/6 | ... | ... |
| C. 并行策略 | x/5 | ... | ... |
| D. 量化策略 | x/6 | ... | ... |
| E. 调度与批处理 | x/6 | ... | ... |
| F. 注意力后端 | x/4 | ... | ... |
| G. 推测解码 | x/4 | ... | ... |
| H. RLHF/训练集成 | x/7 | ... | ... |
| I. 生产部署 | x/5 | ... | ... |
| J. 环境与调优 | x/4 | ... | ... |
| **总计** | **x/52** | | |
## 优先优化建议(按影响排序)
### P0 - 立即执行���显著收益,零风险)
1. ...
### P1 - 强烈推荐(明显收益,低风险)
1. ...
### P2 - 建议尝试(中等收益,需测试)
1. ...
## 推荐配置修改
(给出具体的代码/配置/启动命令修改)
开始
├── 显存不足(OOM)?
│ ├── 是 → 已量化?
│ │ ├── 否 → Hopper/Ada? → quantization: "fp8_per_block"
│ │ │ └── 其他 → 使用 AWQ/GPTQ 预量化模型
│ │ └── 是(已量化)
│ │ ├── 减小 max_model_len(限制为实际需求)
│ │ ├── 减小 max_num_seqs(如 64→32)
│ │ ├── enforce_eager=True(释放 CUDA Graph 显存)
│ │ ├── 增加 tensor_parallel_size(需更多 GPU)
│ │ └── 启用 KV Cache offloading
│ └── 否 → 继续性能优化
├── 吞吐不足?
│ ├── GPU 利用率低 → 增大 max_num_seqs / max_num_batched_tokens
│ ├── 单实例已满 → 启用 data_parallel_size(多副本)
│ ├── Tokenization 慢 → VLLM_USE_FASTOKENS=1 + --api-server-count
│ ├── 推测解码 → 启用 EAGLE/MTP/N-gram
│ └── 多模型共享 → LoRA 热加载(共享基座模型)
├── 延迟过高(TTFT)?
│ ├── 增大 max_num_batched_tokens(允许更大 prefill batch)
│ ├── 启用 prefix_caching(共享前缀复用)
│ └── Disaggregated Prefill(独立 prefill 实例)
├── 延迟过高(ITL)?
│ ├── 减小 max_num_batched_tokens(decode 优先)
│ ├── 减小 max_num_seqs(减少并发)
│ └── 推测解码(减少 decode 步数)
└── RLHF 场景?
├── Colocate 模式
│ ├── 必须 enable_sleep_mode=True
│ ├── 训练时 sleep(level=2)
│ ├── 推理时 wake_up()
│ └── 降低 gpu_memory_utilization(给训练留空间)
└── Server 模式
├── VLLM_SERVER_DEV_MODE=1
├── Weight Transfer (NCCL backend)
└── 或 Dynamic LoRA 热更新
| 模型规模 | 量化方式 | max_model_len | 并发能力 |
|---|---|---|---|
| 7-8B | BF16 | 32K | ~256 并发 |
| 7-8B | FP8 | 32K | ~384 并发 |
| 13-14B | BF16 | 16K | ~128 并发 |
| 30-34B | FP8 | 8K | ~64 并发 |
| 70B | 需 2+ GPU TP | - | - |
| 模式 | vLLM gpu_memory_utilization | 训练侧可用 | 说明 |
|---|---|---|---|
| Colocate(交替) | 0.4~0.5 | sleep 时释放全部 | sleep/wake 切换,总利用率高 |
| Colocate(并行) | 0.3~0.4 | 0.5~0.6 | 推理+训练同时占用,需精确分配 |
| Server(独立 GPU) | 0.92 | 100%(独立 GPU) | 各自独立,资源隔离 |
用于识别 vLLM 项目的关键词和文件模式:
| 类别 | 关键词/模式 |
|---|---|
| CLI | vllm serve、python -m vllm.entrypoints |
| 配置 | gpu_memory_utilization、tensor_parallel_size(vllm 上下文)、enforce_eager、enable_prefix_caching、enable_chunked_prefill、max_num_seqs、max_num_batched_tokens、kv_cache_dtype、speculative_config |
| import | from vllm import LLM、from vllm import SamplingParams、from vllm.engine、from vllm.config、import vllm |
| 依赖 | vllm(pip/conda) |
| RLHF 集成 | use_vllm=True(TRL)、vllm_mode(TRL)、infer_backend: vllm(LlamaFactory)、use_vllm: true(ms-swift)、enable_sleep_mode |
| 环境变量 | VLLM_USE_FASTOKENS、VLLM_SERVER_DEV_MODE、VLLM_WORKER_MULTIPROC_METHOD、VLLM_ALLOW_LONG_MAX_MODEL_LEN |