-
Notifications
You must be signed in to change notification settings - Fork 234
[DNM][AMD][MI355X] DSv4 agentic-hicache: switch to mlpnopad image, narrow DPA sweep #2297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1536,7 +1536,7 @@ dsr1-fp4-mi355x-sglang-disagg-mtp: | |
| - "DECODE_MTP_SIZE=1" | ||
|
|
||
| dsv4-fp4-mi355x-sglang-agentic-hicache: | ||
| image: lmsysorg/sglang-rocm:v0.5.14-rocm720-mi35x-20260710 | ||
| image: rocm/pytorch-private:sglang-rocm720-mi35x_dsv4_mlpnopad | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 This PR's title and description are English-only, but AGENTS.md mandates bilingual PR titles/descriptions (format: Extended reasoning...AGENTS.md line 7 is explicit and unconditional: "PR and GitHub-issue titles & descriptions must be bilingual — include a Simplified Chinese version in addition to English. Title format: This PR's title, Proof / concrete example: Compare this PR's title against the format the rule requires:
Nothing in the diff itself is wrong — the YAML changes to Why this doesn't block merge: there's no CI gate enforcing the bilingual-title/description rule (unlike the CODEOWNER sign-off phrase, which does have an automated checker per the recipe-reminder bot comment). Several other recently-merged PRs visible in the log (e.g. #2258 "vLLM DeepSeek-V4 B300 aggregate MTP", #2288 "CollectiveX: add UCCL-EP...") also ship English-only titles, so non-compliance clearly doesn't block merging in practice. The fix is trivial — retitle to append |
||
| model: deepseek-ai/DeepSeek-V4-Pro | ||
| model-prefix: dsv4 | ||
| runner: cluster:mi355x-amds | ||
|
|
@@ -1547,9 +1547,10 @@ dsv4-fp4-mi355x-sglang-agentic-hicache: | |
| agentic-coding: | ||
| - dram-utilization: 0.80 | ||
| search-space: | ||
| - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 8] } | ||
| - { tp: 8, dp-attn: true, kv-offloading: none, conc-list: [16, 32, 48, 64] } | ||
| - { tp: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [64] } | ||
| #- { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 8] } | ||
| #- { tp: 8, dp-attn: true, kv-offloading: none, conc-list: [16, 32, 48, 64] } | ||
| #- { tp: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: hicache }, conc-list: [64] } | ||
| - { tp: 8, dp-attn: true, kv-offloading: none, conc-list: [48, 64] } | ||
|
|
||
| # MiniMax-M3 MXFP8 MI355X recipe: | ||
| # https://github.com/vllm-project/recipes/commit/2a3728ed9892debfd767a72a58ebc90b33f186e5 | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5010,4 +5010,10 @@ | |
| - "Add MTP speculative-decoding for the B300 vLLM AgentX recipe as a separate config-key, so the existing dsv4-fp4-b300-vllm-agentic aggregate is not re-run." | ||
| - "dsv4-fp4-b300-vllm-agentic-mtp: MTP twins (--speculative-config {\"method\":\"mtp\",\"num_speculative_tokens\":3}) of the aggregate arms plus a new TP8 GPU-resident arm -- TP8 GPU-resident [1,2,4,6,8], TP4 GPU-resident [1,2,4,6,8,12,16,20], TP4 SimpleCPU [20,24,28,32,36,40], DEP4 [32,40,48,56], DEP8 [64,96,112,128,144,160,176,192,224]; routed via spec-decoding=mtp to dsv4_fp4_b300_vllm_mtp.sh (FULL_DECODE_ONLY cudagraph capture sizes in TOKENS = num_seqs*4)." | ||
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2258 | ||
|
|
||
|
|
||
| - config-keys: | ||
| - dsv4-fp4-mi355x-sglang-agentic-hicache | ||
| description: | ||
| - "Switch image to rocm/pytorch-private:sglang-rocm720-mi35x_dsv4_mlpnopad for MLP no-pad kernel evaluation on DSv4" | ||
| - "Disable non-DPA, full-DPA, and HiCache sweep arms; keep only DPA no-offload conc [48, 64]" | ||
|
Comment on lines
+5013
to
+5018
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 This new perf-changelog entry has two issues that will fail the changelog CI gate: it strips the trailing two spaces from the prior entry's blank separator line (violating AGENTS.md's explicit whitespace-preservation rule and breaking Extended reasoning...This PR's 1. Whitespace on the separator line was altered. AGENTS.md is explicit: "Never delete or modify whitespace in perf-changelog.yaml - CI depends on exact whitespace (including trailing spaces on blank separator lines). Altering it breaks CI." I diffed the actual git bytes: 2. The new entry is missing the required Why nothing else catches this before CI: the Concrete proof: Feeding this head content through Fix: keep the original |
||
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2297 | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🟡 This PR retargets
dsv4-fp4-mi355x-sglang-agentic-hicachetorocm/pytorch-private:sglang-rocm720-mi35x_dsv4_mlpnopad, a mutable, non-digest tag intended for iterative kernel evaluation. Becauserunners/launch_mi355x-amds.shcaches the enroot squashfs keyed only on the image string and skips re-import whenever that file already exists, any runner that has already pulled this tag once will silently keep serving the stale build on every future re-push, with no error — the exact caching hazard already documented on the neighboringdsv4-fp4-mi355x-vllmentry in this file. Consider pinning to a digest-suffixed tag (e.g.@sha256:...) to avoid silently stale benchmark results during the mlpnopad iteration.Extended reasoning...
The mechanism:
runners/launch_mi355x-amds.sh(~lines 264-286) derivesSQUASH_FILEdeterministically from theIMAGEstring alone (sed 's/[\/:@#]/_/g') and stores it at a persistent, node-local path under/var/lib/squash/. The import logic is:There is no comparison against the remote registry digest and no TTL/expiry on the cached file — once a squashfs exists for a given image-string key on a runner, it is reused unconditionally on every subsequent job that references the same tag.
Why this PR triggers it:
configs/amd-master.yaml:1539switchesdsv4-fp4-mi355x-sglang-agentic-hicachefrom the previous taglmsysorg/sglang-rocm:v0.5.14-rocm720-mi35x-20260710(date-stamped, effectively immutable) torocm/pytorch-private:sglang-rocm720-mi35x_dsv4_mlpnopad. Per the PR description, this new tag exists specifically for iterative MLP no-pad kernel evaluation — i.e. the vendor is expected to push multiple updated builds under this exact same tag string while tuning the kernel. That is precisely the scenario the launcher's caching logic cannot handle safely: the tag string never changes, soSQUASH_FILE's key never changes, so the cache is never invalidated.Why nothing in the existing code prevents this: the import guard only checks local squashfs validity (
unsquashfs -lsucceeding), which tells you the cached file is a well-formed image — not that it matches what's currently at the registry. There's no digest check, nodocker manifest inspect-style comparison, and no forced re-pull path exposed through this config.Impact: on any
mi355x-amdsrunner that has already executed this config once, a subsequent vendor push of an updatedmlpnopadbuild to the same tag is silently ignored — the sweep runs against the old kernel and reports benchmark numbers that do not reflect the intended change, with no error, warning, or log signal distinguishing it from a correct run. This is especially costly in an iterative-evaluation workflow where the whole point is to compare kernel revisions run-over-run.Proof (step-by-step):
rocm/pytorch-private:sglang-rocm720-mi35x_dsv4_mlpnopad.SQUASH_FILEdoesn't exist yet ->enroot importpulls build A -> squashfs cached at/var/lib/squash/rocm_pytorch-private_sglang-rocm720-mi35x_dsv4_mlpnopad.sqsh.SQUASH_FILEcomputed from the image string is identical to step 2, sounsquashfs -lsucceeds against the cached (build A) file, prints 'Squash file already exists and is valid, skipping import', and the job runs build A again — not build B.Precedent: this exact caching hazard is already called out verbatim as an IMPORTANT comment on the neighboring
dsv4-fp4-mi355x-vllmentry in this same file: 'pin to a digest-suffixed nightly tag rather than the floating:nightly... the floating tag silently keeps a stale build even after Docker Hub updates.' The new tag in this PR reintroduces the same pattern that comment warns against.Fix: pin the image to a digest-suffixed reference (
rocm/pytorch-private@sha256:<digest>) instead of the mutable tag, so each new build gets a distinct cache key and is guaranteed to be freshly pulled.Severity note: this does not break the PR's own test plan — the first CI run on a fresh runner pulls the current image correctly, so the stated 'DPA no-offload conc 48/64' validation will pass. The risk only materializes on a later re-push to the same tag on a runner that already cached it, which is a real but not immediate/blocking concern for an internal evaluation config. Filing as a nit/suggestion to pin by digest, consistent with the precedent already documented elsewhere in this file.