Environment
- GPU: 8x AMD Instinct MI300X (gfx942),
get_gfx()=gfx942, get_cu_num()=304
- ROCm: 7.1.1
- aiter: reproduced on both
v0.1.19 and main @ 17f24ec6e (2026-08-07)
- vLLM: commit
4719a9b8f, VLLM_ROCM_USE_AITER=1
- Model:
deepseek-ai/DeepSeek-V4-Flash-0731, shape M=8192 N=1536 K=4096, dtype=bfloat16
Bug 1: cu_num mismatch hides the entire tuned file on this hardware
aiter/configs/model_configs/dsv4_a8w8_blockscale_bpreshuffle_tuned_gemm.csv has ~30 gfx942 rows for N=1536,K=4096, all with cu_num=80. get_CKGEMM_config() keys on (gfx, cu_num, M, N, K) using runtime get_cu_num() = 304 here, so no row in this file ever matches on this node, for any shape -- not just M=8192. Every shape silently falls through to "not found tuned config ... will use default config!"; for M=8192 the default has no valid kernel:
gemm_a8w8_blockscale_bpreshuffle failed for shape M=8192, N=1536, K=4096, dtype=torch.bfloat16, config=None: This GEMM is not supported!
Call path: vllm/models/deepseek_v4/amd/rocm.py:_bpre_attn_gemm (invoked from _fused_wqa_wkv_gemm during profile_run).
The file is otherwise dense here (M=...,3840,7296,7680,[gap],15360) -- M=8192 sits in a gap between two shapes that both already use the same kernel (opus_gemm_gfx942_a8w8_bs_bpreshuf_sb_tailm_v16_512x128x128x128_4x2_16x16x32_1x128x128, kernelId=11000).
Bug 2: opus backend fails to bake a referenced-but-untuned kernelId
Adding a corrected row (gfx942,304,8192,1536,4096,opus,11000,..., same kernel as neighbors) makes get_CKGEMM_config find it and module_deepgemm_opus JIT-builds -- but then:
[opus gen_instances] baked 0 tuned entries from 16 CSV file(s) into opus_gemm_lookup.h
...
TypeError: opus_gemm_a8w8_blockscale_bpreshuffle_tune(): incompatible function arguments.
Invoked with: <...aiter_tensor_t...> x5, 11000
"baked 0 tuned entries" -- the on-demand opus kernel-generation path doesn't register/bind kernelId=11000 for a shape absent from its tune set at build time, even though that ID is used by name in neighboring CSV rows for the same N,K.
Workaround
Neither fix alone is sufficient; currently routing this call around AITER entirely (forcing vLLM's _fused_wqa_wkv_gemm to use the generic MergedColumnParallelLinear path instead of _bpre_attn_gemm).
Environment
get_gfx()=gfx942,get_cu_num()=304v0.1.19andmain@17f24ec6e(2026-08-07)4719a9b8f,VLLM_ROCM_USE_AITER=1deepseek-ai/DeepSeek-V4-Flash-0731, shape M=8192 N=1536 K=4096, dtype=bfloat16Bug 1: cu_num mismatch hides the entire tuned file on this hardware
aiter/configs/model_configs/dsv4_a8w8_blockscale_bpreshuffle_tuned_gemm.csvhas ~30 gfx942 rows for N=1536,K=4096, all withcu_num=80.get_CKGEMM_config()keys on(gfx, cu_num, M, N, K)using runtimeget_cu_num()= 304 here, so no row in this file ever matches on this node, for any shape -- not just M=8192. Every shape silently falls through to "not found tuned config ... will use default config!"; for M=8192 the default has no valid kernel:Call path:
vllm/models/deepseek_v4/amd/rocm.py:_bpre_attn_gemm(invoked from_fused_wqa_wkv_gemmduringprofile_run).The file is otherwise dense here (M=...,3840,7296,7680,[gap],15360) -- M=8192 sits in a gap between two shapes that both already use the same kernel (
opus_gemm_gfx942_a8w8_bs_bpreshuf_sb_tailm_v16_512x128x128x128_4x2_16x16x32_1x128x128,kernelId=11000).Bug 2: opus backend fails to bake a referenced-but-untuned kernelId
Adding a corrected row (
gfx942,304,8192,1536,4096,opus,11000,..., same kernel as neighbors) makesget_CKGEMM_configfind it andmodule_deepgemm_opusJIT-builds -- but then:"baked 0 tuned entries" -- the on-demand opus kernel-generation path doesn't register/bind
kernelId=11000for a shape absent from its tune set at build time, even though that ID is used by name in neighboring CSV rows for the same N,K.Workaround
Neither fix alone is sufficient; currently routing this call around AITER entirely (forcing vLLM's
_fused_wqa_wkv_gemmto use the genericMergedColumnParallelLinearpath instead of_bpre_attn_gemm).