跳到内容

优化级别

概述

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 相同,但未来可能会包含更多更耗时或实验性的优化。

故障排除

常见问题

  1. 启动时间太长:使用 -O0-O1 以加快启动速度
  2. 编译错误:使用 debug_dump_path 获取更多调试信息
  3. 性能问题:确保在生产环境中使用 -O2