优化级别¶
概述¶
vLLM 提供 4 个优化级别(-O0、-O1、-O2、-O3),允许用户在启动时间和性能之间进行权衡。
-O0:无优化。启动速度最快,但性能最低。-O1:快速优化。进行简单的编译和快速算子融合(fusions),以及 PIECEWISE(分段)cudagraphs。-O2:默认优化。包含额外的编译范围、更多的算子融合以及 FULL_AND_PIECEWISE cudagraphs。-O3:激进优化。目前等同于-O2,但未来可能会加入更多耗时或实验性的优化。
所有优化级别的默认设置都可以通过手动设定底层标志来实现。用户设置的标志优先级高于优化级别的默认设置。
级别总结与使用示例¶
# CLI usage
python -m vllm.entrypoints.api_server --model RedHatAI/Llama-3.2-1B-FP8 -O1
# Python API usage
from vllm.entrypoints.llm import LLM
llm = LLM(
model="RedHatAI/Llama-3.2-1B-FP8",
optimization_level=2 # equivalent to -O2
)
-O0:无优化¶
尽可能快速启动——不进行自动调优、不进行编译、不使用 cudagraphs。此级别适用于开发和调试的初始阶段。
设置
-cc.cudagraph_mode=NONE-cc.mode=NONE(同时会导致-cc.custom_ops=["none"])-cc.pass_config.fuse_...=False(禁用所有算子融合)--kernel-config.enable_flashinfer_autotune=False
-O1:快速优化¶
优先保证快速启动,但仍启用编译和 cudagraphs 等基本优化。该级别在大多数开发场景中实现了良好平衡,既能加快启动速度,又能确保代码不会破坏 cudagraphs 或编译流程。
设置
-cc.cudagraph_mode=PIECEWISE-cc.mode=VLLM_COMPILE--kernel-config.enable_flashinfer_autotune=True
算子融合 (Fusions)
-cc.pass_config.fuse_norm_quant=True*-cc.pass_config.fuse_act_quant=True*-cc.pass_config.fuse_act_padding=True†
* 这些融合仅在算子使用自定义内核时启用,否则 Inductor 融合效果更佳。
† 这些融合仅针对 ROCm,且需要 AITER。
-O2:完全优化(默认)¶
以额外的启动时间为代价优先提升性能。此级别推荐用于生产环境工作负载,因此也是默认设置。由于增加了编译范围,此级别的算子融合可能需要更长的编译时间。
设置(在 -O1 基础上)
-cc.cudagraph_mode=FULL_AND_PIECEWISE-cc.pass_config.fuse_allreduce_rms=True-cc.pass_config.fuse_rope_kvcache=True†
† 这些融合仅针对 ROCm,且需要 AITER。
-O3:激进优化¶
此级别目前与 -O2 相同,但未来可能会包含更多更耗时或实验性的优化。
故障排除¶
常见问题¶
- 启动时间太长:使用
-O0或-O1以加快启动速度 - 编译错误:使用
debug_dump_path获取更多调试信息 - 性能问题:确保在生产环境中使用
-O2