[Docs] Point users at --disable-flashinfer-autotune (#61489)

Signed-off-by: mgoin <mgoin64@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Misha GoinandClaude Opus 5.5 authored and GitHub committed 2026-10-21 10:55:26 -04:00
1 parent 85752a43c3
commit b6078025b4
24 files changed
+51 -45

No files matched your search

+1 -1
View File
@@ -120,7 +120,7 @@ def run_worker(args):
if args.disable_flashinfer_autotune:
# FP4-MoE autotuner is unstable under CUDA-graph capture on Blackwell;
# re-enable (--no-disable-flashinfer-autotune) only for non-FP4 models.
llm_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
llm_kwargs["enable_flashinfer_autotune"] = False
if mode == "replayssm":
llm_kwargs.update(use_replayssm=True, replayssm_buffer_len=args.buffer_len)
+3 -3
View File
@@ -37,7 +37,7 @@ Settings:
- `-cc.cudagraph_mode=NONE`
- `-cc.mode=NONE` (also resulting in `-cc.custom_ops=["none"]`)
- `-cc.pass_config.fuse_...=False` (all fusions disabled)
- `--kernel-config.enable_flashinfer_autotune=False`
- `--disable-flashinfer-autotune`
### `-O1`: Fast Optimization
@@ -49,7 +49,7 @@ Settings:
- `-cc.cudagraph_mode=PIECEWISE`
- `-cc.mode=VLLM_COMPILE`
- `--kernel-config.enable_flashinfer_autotune=True`
- `--enable-flashinfer-autotune`
Fusions:
@@ -84,6 +84,6 @@ in the future that are more time-consuming or experimental.
### Common Issues
1. **Startup Time Too Long**: Use `-O0` or `-O1` for faster startup
1. **Startup Time Too Long**: Use `-O0` or `-O1` for faster startup, or pass `--disable-flashinfer-autotune` to skip only FlashInfer autotuning
2. **Compilation Errors**: Use `debug_dump_path` for additional debugging information
3. **Performance Issues**: Ensure using `-O2` for production
+2 -2
View File
@@ -247,7 +247,7 @@ variants:
- "16384"
- "--gpu-memory-utilization"
- "0.9"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
- "--stream-interval"
- "20"
extra_env:
@@ -829,7 +829,7 @@ guide: |
--speculative-config '{"method":"eagle3","model":"Inferact/MiniMax-M3-EAGLE3-GQA","num_speculative_tokens":3,"attention_backend":"FLASHINFER","use_local_argmax_reduction":true}' \
--max-model-len 1048576 --max-num-batched-tokens 16384 --max-num-seqs <S> \
--compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","cudagraph_capture_sizes":[<sizes from the table>,256,512,1024,2048]}' \
--gpu-memory-utilization 0.9 --no-enable-flashinfer-autotune --stream-interval 20 --language-model-only \
--gpu-memory-utilization 0.9 --disable-flashinfer-autotune --stream-interval 20 --language-model-only \
--kv-events-config '{"publisher":"zmq","topic":"kv-events","enable_kv_cache_events":true,"endpoint":"tcp://*:5200"}' \
--reasoning-parser minimax_m3 --dyn-reasoning-parser minimax_m3 --dyn-tool-call-parser minimax_m3
```
@@ -24,7 +24,7 @@ model:
supports_dcp: true
base_args:
- "--trust-remote-code"
- "--kernel-config.enable_flashinfer_autotune=False"
- "--disable-flashinfer-autotune"
base_env: {}
dependencies:
@@ -122,7 +122,7 @@ guide: |
vllm serve deepseek-ai/DeepSeek-V3.2 \
--tensor-parallel-size 8 \
--trust-remote-code \
--kernel-config.enable_flashinfer_autotune=False \
--disable-flashinfer-autotune \
--tokenizer-mode deepseek_v32 \
--tool-call-parser deepseek_v32 \
--enable-auto-tool-choice \
@@ -271,7 +271,7 @@ guide: |
- `VLLM_FLASHINFER_AUTOTUNE_SKIP_OPS` excludes the FP4 block-scale MoE op from
FlashInfer's startup autotuning. Export it if autotuning that op fails or costs more
startup time than it earns back on your FlashInfer build; it is a tuning knob, not a
requirement. The Advanced row's `--no-enable-flashinfer-autotune` turns autotuning
requirement. The Advanced row's `--disable-flashinfer-autotune` turns autotuning
off wholesale instead.
- `--max-model-len 32768` bounds KV cache for the benchmark. The checkpoint advertises
1M tokens; that is **not** what was measured, and 1M-token KV needs far more memory
@@ -591,7 +591,7 @@ strategy_overrides:
hardware_overrides:
hopper:
extra_args:
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
blackwell:
# Replaces recipe-level blackwell override: keeps the FP4 indexer cache
# but drops --moe-backend deep_gemm_mega_moe (TP-only path uses the
@@ -599,7 +599,7 @@ strategy_overrides:
extra_args:
- "--attention_config.indexer_kv_dtype"
- "mxfp4"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
rtx_pro_6000_8x:
extra_args:
- "--attention_config.indexer_kv_dtype"
@@ -183,7 +183,7 @@ hardware_overrides:
- "0.95"
- "--max-num-seqs"
- "512"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
- "--compilation-config"
- '{"mode": 0, "cudagraph_mode": "FULL_DECODE_ONLY"}'
blackwell:
@@ -214,14 +214,14 @@ strategy_overrides:
hardware_overrides:
hopper:
extra_args:
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
blackwell:
# Replaces recipe-level blackwell override: keeps the FP4 indexer cache
# but drops any variant-level --moe-backend selection (TP-only uses
# the default MoE backend).
extra_args:
- "--attention_config.indexer_kv_dtype=mxfp4"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
single_node_tep:
extra_args:
- "--compilation-config"
@@ -485,7 +485,7 @@ guide: |
```text
--tokenizer-mode deepseek_v4 --trust-remote-code
--kv-cache-dtype fp8 --block-size 256
--no-disable-hybrid-kv-cache-manager --no-enable-flashinfer-autotune
--no-disable-hybrid-kv-cache-manager --disable-flashinfer-autotune
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV4","use_prefill_query_quantization":true,"indexer_kv_dtype":"mxfp4"}'
--speculative-config '{"method":"dspark","num_speculative_tokens":6,"draft_sample_method":"probabilistic","rejection_sample_method":"block"}'
```
@@ -675,7 +675,7 @@ guide: |
--numa-bind --numa-bind-nodes 0 0 1 1
--tokenizer-mode deepseek_v4 --trust-remote-code
--max-model-len 1048576 --kv-cache-dtype fp8 --block-size 256
--no-disable-hybrid-kv-cache-manager --no-enable-flashinfer-autotune
--no-disable-hybrid-kv-cache-manager --disable-flashinfer-autotune
--attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV4","use_prefill_query_quantization":true,"indexer_kv_dtype":"mxfp4"}'
--speculative-config '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block"}'
)
+4 -4
View File
@@ -289,7 +289,7 @@ hardware_overrides:
- "--moe-backend"
- "marlin"
- "--disable-custom-all-reduce"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
- "--max-num-batched-tokens"
- "4096"
- "--attention-backend"
@@ -303,7 +303,7 @@ hardware_overrides:
extra_args:
- "--load-format"
- "fastsafetensors"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
- "--max-model-len"
- "1048576"
- "--kv-cache-dtype"
@@ -638,7 +638,7 @@ strategy_overrides:
- "--max-num-batched-tokens"
- "16384"
- "--no-disable-hybrid-kv-cache-manager"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
env:
VLLM_KIMI_K3_SHARD_SP_SHARED_EXPERT: "1"
decode:
@@ -841,7 +841,7 @@ guide: |
--compilation-config "{\"cudagraph_mode\":\"FULL_AND_PIECEWISE\",\"cudagraph_capture_sizes\":[$CAPTURES]}" \
--speculative-config "{\"model\":\"Inferact/Kimi-K3-DSpark\",\"attention_backend\":\"TOKENSPEED_MLA\",\"method\":\"dspark\",\"num_speculative_tokens\":$K,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\"}" \
--enable-prefix-caching --prefix-match-unit 128 \
--no-enable-flashinfer-autotune \
--disable-flashinfer-autotune \
--moe-backend auto --load-format fastsafetensors \
--stream-interval 10 --language-model-only --trust-remote-code \
--enable-auto-tool-choice --tool-call-parser kimi_k3 --reasoning-parser kimi_k3 \
@@ -79,7 +79,7 @@ variants:
h200: 2
description: "NVFP4 checkpoint requiring at least 180 GB aggregated VRAM: W4A4 with TP1 on B300/GB300 or TP2 on B200/GB200, and W4A16 with TP4 on H100 or TP2 on H200."
extra_args:
- "--kernel-config.enable_flashinfer_autotune=False"
- "--disable-flashinfer-autotune"
extra_env:
FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED: "1"
mxfp4:
@@ -163,7 +163,7 @@ variants:
hardware_overrides:
nvidia:
extra_args:
- "--kernel-config.enable_flashinfer_autotune=False"
- "--disable-flashinfer-autotune"
extra_env:
FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED: "1"
mi300x:
@@ -309,7 +309,7 @@ guide: |
--tool-call-parser inkling \
--enable-auto-tool-choice \
--tensor-parallel-size 1 \
--kernel-config.enable_flashinfer_autotune=False \
--disable-flashinfer-autotune \
--trust-remote-code
```
+3 -3
View File
@@ -75,7 +75,7 @@ variants:
vram_minimum_gb: 651
description: "Weight-only NVFP4 (group size 16) on the routed MoE expert matmuls only; attention, norms, sconv, shared experts, routers, embeddings, and the layer 0-1 dense MLPs stay BF16. ~542 GB on disk. On Hopper, the MoE kernel dequantizes the NVFP4 expert weights to BF16 on the fly."
extra_args:
- "--kernel-config.enable_flashinfer_autotune=False"
- "--disable-flashinfer-autotune"
extra_env:
FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED: "1"
mxfp4:
@@ -143,7 +143,7 @@ variants:
vram_minimum_gb: 2400
description: "Full BF16 checkpoint (~1.8 TB on disk). Runs on Hopper and Blackwell."
extra_args:
- "--kernel-config.enable_flashinfer_autotune=False"
- "--disable-flashinfer-autotune"
extra_env:
FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED: "1"
@@ -292,7 +292,7 @@ guide: |
--tool-call-parser inkling \
--enable-auto-tool-choice \
--tensor-parallel-size 4 \
--kernel-config.enable_flashinfer_autotune=False \
--disable-flashinfer-autotune \
--trust-remote-code
```
+1 -1
View File
@@ -135,7 +135,7 @@ strategy_hardware:
hardware_overrides:
hopper:
extra_args:
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
blackwell:
# FP8 KV cache only works on Blackwell for this model; Hopper runs BF16 KV.
extra_args:
+1 -1
View File
@@ -150,7 +150,7 @@ variants:
- "w2_weight"
- "--load-format"
- "fastsafetensors"
- "--no-enable-flashinfer-autotune"
- "--disable-flashinfer-autotune"
- "--moe-backend"
- "flashinfer_trtllm"
w4a8:
+3 -3
View File
@@ -103,7 +103,7 @@ def test_tp1_fp8_fusions(
model_kwargs["hf_overrides"] = hf_overrides(n_layers)
model_kwargs["load_format"] = "dummy"
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
compilation_config = dict(
use_inductor_graph_partition=inductor_graph_partition,
@@ -180,7 +180,7 @@ def test_tp1_fp4_fusions(
model_kwargs["hf_overrides"] = hf_overrides(n_layers)
model_kwargs["load_format"] = "dummy"
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
compilation_config = dict(
use_inductor_graph_partition=inductor_graph_partition,
@@ -226,7 +226,7 @@ def test_tp1_fp4_mixed_precision_act_fusion(
model_kwargs["hf_overrides"] = hf_overrides(n_layers)
model_kwargs["load_format"] = "dummy"
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
compilation_config = dict(
use_inductor_graph_partition=inductor_graph_partition,
+3 -3
View File
@@ -109,7 +109,7 @@ def test_tp2_ar_rms_fp8_fusions(
model_kwargs["hf_overrides"] = hf_overrides(n_layers)
model_kwargs["load_format"] = "dummy"
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
model_kwargs["disable_custom_all_reduce"] = False
if current_platform.is_rocm() and (
"llama-3" in model_name_lower or "qwen" in model_name_lower
@@ -202,7 +202,7 @@ def test_tp2_ar_rms_fp4_fusions(
model_kwargs["hf_overrides"] = hf_overrides(n_layers)
model_kwargs["load_format"] = "dummy"
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
model_kwargs["disable_custom_all_reduce"] = False
compilation_config = dict(
@@ -280,7 +280,7 @@ def test_tp2_ar_rms_fusions(
model_kwargs["load_format"] = "dummy"
model_kwargs["model_impl"] = model_impl
model_kwargs["max_model_len"] = 1024
model_kwargs["kernel_config"] = {"enable_flashinfer_autotune": False}
model_kwargs["enable_flashinfer_autotune"] = False
model_kwargs["disable_custom_all_reduce"] = False
compilation_config = dict(
@@ -9,7 +9,7 @@ server_args: >-
--gpu-memory-utilization 0.90
--tensor-parallel-size 4
--load-format fastsafetensors
--no-enable-flashinfer-autotune
--disable-flashinfer-autotune
--max-model-len 1048576
--max-num-batched-tokens 16384
--max-num-seqs 128
@@ -8,7 +8,7 @@ server_args: >-
--max-model-len 8192
--tensor-parallel-size 1
--quantization humming
--kernel-config.enable_flashinfer_autotune=False
--disable-flashinfer-autotune
env:
VLLM_HUMMING_ONLINE_QUANT_CONFIG: '{"dtype":"int6","hadamard_block_size":-1}'
VLLM_HUMMING_INPUT_QUANT_CONFIG: '{"dtype":"int8"}'
@@ -8,6 +8,6 @@ server_args: >-
--max-model-len 8192
--tensor-parallel-size 1
--quantization humming
--kernel-config.enable_flashinfer_autotune=False
--disable-flashinfer-autotune
env:
VLLM_HUMMING_ONLINE_QUANT_CONFIG: '{"dtype":"int6","hadamard_block_size":-1}'
@@ -7,7 +7,7 @@ server_args: >-
--enforce-eager
--max-model-len 8192
--quantization humming
--kernel-config.enable_flashinfer_autotune=False
--disable-flashinfer-autotune
env:
VLLM_HUMMING_ONLINE_QUANT_CONFIG: '{"dtype":"int6","hadamard_block_size":-1}'
VLLM_HUMMING_INPUT_QUANT_CONFIG: '{"dtype":"int8"}'
@@ -7,6 +7,6 @@ server_args: >-
--enforce-eager
--max-model-len 8192
--quantization humming
--kernel-config.enable_flashinfer_autotune=False
--disable-flashinfer-autotune
env:
VLLM_HUMMING_ONLINE_QUANT_CONFIG: '{"dtype":"int6","hadamard_block_size":-1}'
+1 -1
View File
@@ -44,7 +44,7 @@ BASE_ARGS = [
"--language-model-only",
"--load-format",
"dummy",
"--no-enable-flashinfer-autotune",
"--disable-flashinfer-autotune",
"--enable-prompt-tokens-details",
# Default max_num_seqs OOMs one GPU during warmup.
"--max-num-seqs",
@@ -113,7 +113,7 @@ def _generate(
gpu_memory_utilization=0.7,
# Timing-based kernel selection is the dominant source of cross-boot
# numeric noise; disable it so the comparison bounds stay tight.
kernel_config={"enable_flashinfer_autotune": False},
enable_flashinfer_autotune=False,
)
try:
# Guard against a vacuous comparison: verify every worker is in the
@@ -61,7 +61,7 @@ def test_mtp_sharded_sampling_equivalence(monkeypatch: pytest.MonkeyPatch):
max_num_seqs=len(test_prompts),
# Timing-based kernel selection is the dominant source of
# cross-boot numeric noise; disable for a tight comparison.
kernel_config={"enable_flashinfer_autotune": False},
enable_flashinfer_autotune=False,
)
try:
# Guard against a vacuous comparison: verify every worker is
+2 -1
View File
@@ -278,7 +278,8 @@ class KernelConfig:
"""
enable_flashinfer_autotune: bool = None # type: ignore[assignment]
"""If True, run FlashInfer autotuning during kernel warmup."""
"""Benchmark FlashInfer kernel implementations during warmup and use the
fastest. Enabled by default except at `-O0`; disable for faster startup."""
enable_rocm_segmented_attn_autotune: bool = False
"""If True, autotune ROCm segmented attention during kernel warmup on RDNA GPUs."""
+7 -2
View File
@@ -461,7 +461,8 @@ def flashinfer_autotune(runner: "GPUModelRunner", *, skip_attn: bool = False) ->
cache_root = resolve_flashinfer_autotune_v2_root()
if is_leader:
logger.info_once(
"Using FlashInfer managed autotune cache (root=%s)",
"Using FlashInfer managed autotune cache (root=%s). Pass "
"--disable-flashinfer-autotune to skip autotuning.",
cache_root if cache_root is not None else "flashinfer default",
)
autotune_context = autotune_v2(
@@ -475,7 +476,11 @@ def flashinfer_autotune(runner: "GPUModelRunner", *, skip_attn: bool = False) ->
f"{cache_path.stem}_dp{dp_rank}_rank{world.rank_in_group}{cache_path.suffix}"
)
if is_leader:
logger.info_once("Using FlashInfer autotune cache file: %s", cache_path)
logger.info_once(
"Using FlashInfer autotune cache file: %s. Pass "
"--disable-flashinfer-autotune to skip autotuning.",
cache_path,
)
if _all_ranks_have_matching_cache(cache_path, tune_group):
loaded = tuner.load_configs(str(cache_path))