-
Notifications
You must be signed in to change notification settings - Fork 257
[AMD] Qwen3.5-FP8 MI355X SGLang disagg baseline: image bump to v0.5.16, TP4P+TP8D / Qwen3.5-FP8 MI355X SGLang disagg 基线优化:镜像升级至v0.5.16,TP4P+TP8D拓扑优化 #2606
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
base: main
Are you sure you want to change the base?
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 |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| #!/usr/bin/env bash | ||
| # Run `docker` under the 'docker' group. | ||
| # | ||
| # Why: Slurm launches job steps without the user's 'docker' supplementary group | ||
| # in the active credential set. The user IS a docker-group member (getent group | ||
| # docker lists them) but the group is missing from `id -G` inside the step, so | ||
| # the group-owned socket (/var/run/docker.sock, 0660 root:docker) is unreachable | ||
| # via a plain `docker` call. `sg docker -c` re-activates the group for this one | ||
| # command — no sudo, no password, no persistent host change. | ||
| # | ||
| # Used by job.slurm's DOCKER_CMD detection as the fallback when plain `docker` | ||
| # fails but `sg docker -c 'docker ps'` succeeds. | ||
| # | ||
| # argv is passed across the `sg` shell hop by NUL-delimited base64 (NOT string | ||
| # re-quoting): naive `printf %q` mangles the big multiline `docker run ... bash | ||
| # -lc '<script>'` argument (trailing newline became a literal 'n', spawning a | ||
| # stray `$n`). base64 round-trips arbitrary bytes (newlines, quotes) exactly, | ||
| # and only the base64 blob (safe chars) is interpolated into the sg command. | ||
| b64=$(printf '%s\0' "$@" | base64 | tr -d '\n') | ||
| exec sg docker -c "bash -c 'mapfile -d \"\" -t __A < <(printf %s \"$b64\" | base64 -d); exec docker \"\${__A[@]}\"'" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5960,3 +5960,10 @@ | |
| - "Use native EAGLE MTP (3 steps, top-k 1, 4 draft tokens) and golden synthetic acceptance length 2.49 for throughput; eval retains real verification." | ||
| - "Follow the official SGLang DeepSeek-V4 Blackwell recipe, require nonempty SGLang server metrics, keep pooled AgentX connections alive, let AIPerf own HiCache warmup, and reserve transient MoE workspace at DEP8 c512." | ||
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2577 | ||
|
|
||
| - config-keys: | ||
| - qwen3.5-fp8-mi355x-sglang-disagg | ||
| description: | ||
| - "Bump qwen3.5-fp8-mi355x-sglang-disagg image from v0.5.14 to v0.5.16 (3-5% throughput improvement) and switch from TP8P+TP8D (16 GPU) to TP4P+TP8D (12 GPU) — TP4 prefill delivers identical decode interactivity with 24-31% better throughput/GPU." | ||
| - "Infra: add docker_sg.sh wrapper and update job.slurm DOCKER_CMD_DETECT to use sg-docker fallback for nodes where Slurm doesn't activate the docker supplementary group." | ||
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2557 | ||
|
Comment on lines
+5966
to
+5969
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. 🟡 The new perf-changelog.yaml entry for Extended reasoning...The newly appended changelog block (config-key pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2557but this changelog entry is being added by this PR, which is #2606 (per the PR metadata). #2557 is explicitly identified in the PR description itself as the parent PR this change was "split from" ("Split from #2557 — baseline only, no MTP/speculative decoding changes") — it is not the PR that introduces this entry. Why this violates the documented convention: Why nothing catches this today: CI's Step-by-step proof:
Impact: Purely a provenance/traceability metadata issue. It doesn't break CI, doesn't affect the benchmark run, and doesn't change runtime behavior — but it does make the changelog's PR attribution incorrect for anyone auditing history (a reader following the link from this entry would land on the older, unrelated split-parent PR rather than this one). Fix: Change |
||
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.
🟡 The 'docker inspect Pid → guard nonzero → sudo kill -9 → sleep → docker rm -f' stuck-container cleanup sequence is written out three separate times in this PR (cleanup() trap ~L386-392, pre-clean fallback ~L693-715, and final KEEP_CONTAINERS cleanup ~L807-826), each with slightly different quoting/looping/sleep duration. Consider factoring this into a shared helper under amd_utils/helpers/ (following the existing gpu_sanity.sh/rdma_check.sh pattern) parameterized by container name(s), so a future change to the kill/retry policy only needs to be made once.
Extended reasoning...
This PR introduces the same "if
docker rm -fdidn't work, read the container's PID viadocker inspect --format {{.State.Pid}}, guard it's nonzero,sudo kill -9it, sleep, then retrydocker rm -f" recipe in three distinct places injob.slurm:cleanup()trap (~L386-392): the diff appends the inspect/kill-9/sleep/rm-f tail onto the existingsrun ... $DOCKER_CMD rm -f $DOCKER_CONT_NAMEone-liner, all inline inside a single-quotedbash -cstring withsleep 2.for _cid in $_stuckloop inside the bigbash -lc "..."heredoc (double-quote-escaped), inspecting/killing each container returned bydocker ps -aq, withsleep 3.KEEP_CONTAINERScleanup (~L807-826): the old one-linerm -f $DOCKER_CONT_NAME $CLIENT_CONT_NAMEis rewritten into afor _cont in ...loop that doesrm -f,inspect,sudo kill -9,sleep 2,rm -fagain per container name.The inner "inspect → nonzero-check → kill -9 → sleep → rm -f" core is functionally identical across all three sites — only the outer scoping differs (single named container vs. a
forloop over container names vs. aforloop overdocker ps -aqoutput), and even the sleep duration silently drifts (2s in two spots, 3s in the third) despite being logically the same "give the kernel time to release the PID before retrying rm" step.The problem this causes: any future change to the kill/retry policy — e.g. escalating from SIGKILL to a signal sequence, tuning the sleep duration, changing how a nonzero-but-stale PID is detected, or adding a log line when the kill actually fires — has to be hand-applied in three separate places, each with different quoting contexts (plain single-quoted bash -c, an escaped heredoc, and a here-string). It's easy for these to drift further over time (the 2s vs 3s sleep is already an example of this happening within the same PR), and a subtle bug fixed in one copy is likely to be missed in the other two.
Existing precedent in this same file for factoring shared shell logic already exists:
gpu_sanity.shandrdma_check.shlive underamd_utils/helpers/and are invoked viabash $DI_REPO_DIR/.../helpers/<script>.shfrom within the job. A similar helper (e.g.helpers/kill_stuck_container.sh), parameterized by container name(s) and invoked the same way, would let all three call sites share one implementation. The differing escaping contexts (plainbash -c, escaped heredoc, here-string) are a real complication but not a blocker — since the helper would be its own file invoked viabash .../helper.sh "$cont1" "$cont2" ..., each call site only needs to pass the container name(s) as argv, sidestepping the quoting divergence that currently forces three hand-written inline copies.As a concrete illustration: suppose the kill/retry policy needs to change from
sleep 2tosleep 5to give slower NICs/GPUs more time to release the PID. Today that edit must be made in thecleanup()trap, the pre-clean fallback (which usessleep 3, a different existing value, adding confusion about whether it should also become 5), and the final KEEP_CONTAINERS loop — three edits across two different quoting styles, with no test coverage to catch a missed copy. With a shared helper, it's one line in one file.This is a maintainability/quality observation only — the duplicated logic is not incorrect in any of its three call sites, so it does not affect correctness or block merging.