[DeepSeek] V4.1-Flash: point the AMD image at a ROCm nightly and select the CK a8w4 MoE experts - #962
Fangzhou-Ai wants to merge 2 commits into
Conversation
The deepseekv41-flash-0909 tag predates vllm-project/vllm#56503, which moves the mHC delayed pre block off the eager Torch reference and onto AITER. Pin the AMD image to the nightly that carries it; NVIDIA is unaffected and stays on 0909. Signed-off-by: Fangzhou-Ai <fangzhou.ai@amd.com> Co-authored-by: Cursor <cursoragent@cursor.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Code Review
This pull request updates the AMD Docker image for the DeepSeek-V4.1-Flash model to a specific ROCm nightly tag to support the AITER mHC path, and updates the prerequisites guide accordingly. The reviewer suggests using the full image tag instead of a truncated version in the guide text to ensure it is fully copy-pasteable.
| this architecture, so the Install block only offers Docker. On AMD, use the | ||
| `vllm/vllm-openai-rocm:nightly-eed1f3d0...` image instead — it carries the AITER | ||
| mHC path from vllm-project/vllm#56503, which the 0909 tag predates. |
There was a problem hiding this comment.
The image tag in the prerequisites guide is truncated with an ellipsis (...). To ensure the guide is fully copy-pasteable and accurate for users who want to manually pull or verify the image, please use the full image tag vllm/vllm-openai-rocm:nightly-eed1f3d0c6043bd494424a22443ee198dd56f657.
this architecture, so the Install block only offers Docker. On AMD, use the
`vllm/vllm-openai-rocm:nightly-eed1f3d0c6043bd494424a22443ee198dd56f657` image instead — it carries the AITER
mHC path from vllm-project/vllm#56503, which the 0909 tag predates.|
I served this same digest (
So this nightly plus the published Speculative decoding tick cannot start on AMD. NVIDIA is unchanged. Until that helper is True on ROCm (vllm-project/vllm#56620), the AMD command needs spec_decoding:
hardware_overrides:
amd:
args:
- "--speculative-config"
- '{"method":"dspark","num_speculative_tokens":5,"draft_sample_method":"probabilistic","rejection_sample_method":"block","enable_adaptive_verification":false}'The image pin for vllm-project/vllm#56503 is still the right move. The generated AMD command with Speculative decoding ticked is not, on this digest. Follow-up with that override: #963. |
|
Follow-up: #963 puts the AMD |
|
Thanks @maeehart — confirming your finding independently, and agreeing with both the diagnosis and the fix location. We hit the same wall on MI355X TP4 with this digest while validating the pin. Our InferenceX benchmark script for this model already pins Your reading of the config layering matches ours too: since features emit last in One sequencing note for maintainers. #962 and #963 both edit
@maeehart let me know which you prefer for your patch; I'll follow your lead rather than take it over. On the upstream side, once vllm-project/vllm#56620 makes |
|
Keep #963 as its own PR. Merge it immediately after #962. Do not fold the override into #962 expecting vllm-project/vllm#56620 to remove it soon. I served with that indexer helper forced True on ROCm. The first Hub nightly |
Naming aiter_triton_mxfp4_bf16 maps to exactly one entry and pins the Triton W4A16 kernel, so decode ran _moe_gemm_a16w4. Plain aiter opens vLLM's full priority list, whose head is the Composable Kernel backend, and the experts become the a8w4 family that the DSV4-Pro MI355X recipe already uses. Decode traces on MI355X TP4 at 131k context put MoE GEMM at 2.30 vs 2.72 ms/step at concurrency 1 and 7.18 vs 9.06 at concurrency 16, for whole-step gains of 4.2% to 8.7%, with gsm8k strict-match unchanged at 0.9719. Also quiet aiter.ops.triton, whose every warning is about Gluon availability. Gluon supports only gfx1250, so on gfx950 it is a fixed property; it was 98% of the lines in a server log with no throughput effect.
|
@Fangzhou-Ai Can you help resolve the conflicts? Also, could we reduce the number of AI comments a bit? :) |
|
Superseded by #965. #965 is branched from current @Fangzhou-Ai I don't have push access on this repo, so could you close this one? If anything here should carry over that I missed, say so and I'll fold it into #965. |
|
superseded by #965 close this PR now |
Summary
Two AMD-only changes for DeepSeek-V4.1-Flash. NVIDIA is unchanged.
docker_image: nvidia: "vllm/vllm-openai:deepseekv41-flash-0909" - amd: "vllm/vllm-openai-rocm:deepseekv41-flash-0909" + amd: "vllm/vllm-openai-rocm:nightly-eed1f3d0c6043bd494424a22443ee198dd56f657" hardware_overrides: amd: extra_args: - "--moe-backend" - - "aiter_triton_mxfp4_bf16" + - "aiter"Why the nightly image
The
deepseekv41-flash-0909tag predates vllm-project/vllm#56503, which moves the mHCdelayed pre block off the eager Torch reference and onto AITER. Without it, MI355X runs
the hyper-connection seams as unfused eager Torch ops.
vllm/vllm-openai-rocm:nightly-eed1f3d0c6043bd494424a22443ee198dd56f657sha256:960228cfcb5de9f4cd22d28998d1125be62b546c3d220a884f570343e99ffceeeed1f3d0c6043bd494424a22443ee198dd56f657eed1f3dis 11 commits ahead of, and 0 behind, #56503's merge commit, so the change isincluded.
Why plain
aiterrather than a named kernelaiter_triton_mxfp4_bf16maps to exactly one entry, the Triton W4A16 kernel, so decoderan
_moe_gemm_a16w4. Plainaiteropens vLLM's full priority list, whose head is theComposable Kernel backend, and the experts become the a8w4 family:
Two things make this non-obvious, so the flag carries a comment: the backend is named
..._BF16, and this checkpoint declaresactivation_scheme: dynamicwith noinput_scaletensors. CK quantizes activations to FP8 internally regardless.Decode traces on MI355X TP4 at 131k context:
gsm8k strict-match is unchanged at 0.9719.
Log level
AITER_TRITON_LOG_LEVEL=ERRORis added to the AMD env. Every warningaiter.ops.tritonemits is about Gluon availability, and Gluon supports only gfx1250 — on gfx950 that is a
fixed property rather than a condition worth reporting. It accounted for 98% of the lines
in a server log (411k of 417k lines, 30 MiB of 32 MiB) with no throughput effect.
Validation
scripts/build-recipes-api.mjscould not be run — the host has Node but no npm/pnpm, sojs-yamlis unavailable. The file was validated by parsing it with PyYAML instead,confirming that it loads, that both
docker_imageentries resolve, that the AMD overrideresolves to
--gpu-memory-utilization 0.9 --moe-backend aiter, and that the edits insidethe
guide: |literal block preserve the block's indentation. No schema keys were addedor removed.
Runtime on MI355X TP4 with DSpark drafting 5 tokens: the CK path serves correctly on this
nightly, and single-user decode measures 265 tok/s p50 interactivity against 259 tok/s
for the Triton kernel on the same box and image. Broader concurrency validation is tracked
downstream.