vLLM on the NVIDIA HGX B200 uses specialized CUDA kernel backends for attention and GEMM operations. Understanding these backends helps diagnose startup issues, explain warmup times, and tune performance.
FlashInfer is vLLM's primary attention backend on the NVIDIA HGX B200. It JIT-compiles CUDA kernels for the specific GPU architecture (sm_100 / Blackwell).
FlashInfer requires nvcc on PATH for JIT compilation:
Without this, vLLM falls back to a slower attention implementation. Verify FlashInfer is detected:
~/.cache/vllm/torch_compile_cache/FlashInfer is used automatically when available. Key behaviors:
nvcc not found:
Fix: export PATH="/usr/local/cuda/bin:$PATH"
Compilation cache stale after vLLM upgrade:
The cache rebuilds automatically on next launch.
DeepGEMM provides JIT-compiled FP8 GEMM kernels using CUTLASS templates. It's used automatically for FP8 models that benefit from specialized matrix multiply operations.
On the first launch of a DeepGEMM-using model, you'll see repeated compilation messages:
This takes ~5 minutes for GLM-5 and DeepSeek V3.2. Compiled kernels are cached and reused on subsequent launches.
DeepGEMM kernels are cached per-model:
DeepGEMM requires CUTLASS headers for compilation. If installed from source, you may need to symlink them:
The pip-installed version handles this automatically.
If DeepGEMM causes issues:
This falls back to standard FP8 GEMM kernels. Performance may decrease for models that benefit from DeepGEMM's optimized paths.
vLLM uses fused Mixture-of-Experts kernels that combine expert routing and GEMM into a single operation.
No pre-tuned FP8 MoE kernel configuration exists for the NVIDIA HGX B200 (sm_100) yet. vLLM logs this warning:
This is safe to ignore: performance is still strong with the default config. Tuned configs for Blackwell are expected in future vLLM releases.
vLLM 0.16.0's fused MoE kernel assumes DeepSeek V3-style grouped routing (n_group > 0). Models with n_group = 0 (including MiniMax M2.5) crash with:
Use vLLM 0.12.0 for affected models. See Troubleshooting.
vLLM 0.16.0 uses torch.compile with CUDA graphs for optimized execution:
vLLM pre-captures CUDA graphs for common batch sizes (1, 2, 4, 8, 16, ... up to 512). Requests are padded to the nearest capture size. This means:
--max-num-seqs flag limits the maximum capture sizeFor debugging or if torch.compile causes issues:
This disables both torch.compile and CUDA graphs. Expect 10-30% lower throughput but faster startup.
0 Comments
Be the first to comment and share your perspective with the community.