[Klaud Cold] Update qwen3.8next-fp8-h200-sglang-agentic-mtp SGLang image to dev-cu13-qwen38-next-local (2026-09-07, digest-pinned) - #2877
Conversation
9f775c8 to
7c1e14e
Compare
|
Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase For PR verification, add the PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs 感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 如需进行 PR 验证,请为此 PR 添加 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档 |
There was a problem hiding this comment.
Beyond the inline pr-link finding, I also checked whether the two sibling recipes (qwen3.8next-fp4-b300 and qwen3.8next-fp8-h100-sglang-agentic-mtp) needed the same image bump — the diff only touches the h200 recipe intentionally per the PR description, so that's not a gap here.
Extended reasoning...
A confirmed finding (invalid pr-link: PRLINK_PLACEHOLDER value in perf-changelog.yaml, which will fail utils/validate_perf_changelog.py's placeholder check) is being posted inline, so this run cannot approve. Beyond that, I independently verified via git diff that the nvidia-master.yaml change is exactly the single-line image bump described (line 7412), with no other fields touched. I also considered whether the two sibling qwen3.8next recipes (fp4-b300 at line 7240, fp8-h100 at line 7464) should have received the same digest pin, but the PR description explicitly scopes this change to only the h200 recipe, and there's no indication those siblings use the same mutable tag being replaced here, so that candidate is ruled out rather than a real gap.
| scenario-type: | ||
| - agentic-coding | ||
| description: | ||
| - "Move the image from the mutable model-branch tag lmsysorg/sglang:qwen38flashnext (last re-pushed 2026-09-03T20:54:46Z, digest sha256:5ae5816783d58e2e56e84d2e863f5441425056f500b7fbd7448c4aae017a2521) to the newest Qwen3.8-Flash-Next model-branch build, lmsysorg/sglang:dev-cu13-qwen38-next-local@sha256:9d2a843c706c74bc259c0d9abf360551eb2734e1e7d255ab012a6965f10480b6 (Docker Hub last pushed 2026-09-07T11:12:42Z), pinned by digest so every node runs the same build. Qwen3.8-Flash-Next (architecture Qwen4ExpForConditionalGeneration) is not in SGLang main, v0.5.19, or the 2026-09-07 nightly (nightly-dev-cu13-20260907-30705c00), so no upstream nightly can serve it; the model-branch dev images are the only lineage. benchmarks/single_node/agentic/qwen3.8next_fp8_h200_sglang_mtp.sh is unchanged: TP4/EP4, mem-fraction 0.85, flashinfer attention (sm_90), native NEXTN MTP at three speculative tokens, float32 Mamba SSM state, golden thinking_on acceptance length 2.32; the conc [1, 4, 8, 12, 16] grid is unchanged. The sweep is the validation that this branch build still carries the fixes the recipe relies on." |
There was a problem hiding this comment.
🔴 The new entry's pr-link value PRLINK_PLACEHOLDER is not a recognized placeholder: utils/validate_perf_changelog.py's validate_added_pr_link only accepts the canonical PR URL or XXX/.../pull/XXX, so this will fail the changelog validation gate on CI, blocking merge. Fix: use XXX (or https://github.com/SemiAnalysisAI/InferenceX/pull/XXX) as documented/enforced, then replace with the real PR URL once opened.
Extended reasoning...
utils/validate_perf_changelog.py:24-27 defines PR_LINK_PLACEHOLDERS = {"XXX", "https://github.com/SemiAnalysisAI/InferenceX/pull/XXX"}; validate_added_pr_link (lines 144-160) raises ChangelogValidationError if link is not in that set and not the exact expected .../pull/<pr_number> URL. The appended entry's pr-link: PRLINK_PLACEHOLDER (perf-changelog.yaml, new last line) matches neither, so any CI job or pre-merge tooling invoking this validator (e.g. the changelog gate tests directory utils/changelog_gate_tests) will reject the PR until the placeholder is corrected.
Verification: normal. The appended entry's pr-link: PRLINK_PLACEHOLDER (perf-changelog.yaml new final line) is not a recognized value. utils/validate_perf_changelog.py:24-27 defines PR_LINK_PLACEHOLDERS = {"XXX", "https://github.com/SemiAnalysisAI/InferenceX/pull/XXX"}; validate_added_pr_link (lines 144-160) raises ChangelogValidationError when the link is neither in that set nor the exact…
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=34174941536 |
530a1b2 to
21d31fc
Compare
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=34188408693 |
…age to dev-cu13-qwen38-next-local (2026-09-07, digest-pinned) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…is not writable Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… download Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1182f9d to
1a6698f
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1a6698f. Configure here.
| shards = sorted(set(json.load(fh)["weight_map"].values())) | ||
| missing = [s for s in shards if not os.path.isfile(os.path.join(d, s))] | ||
| sys.exit(1 if missing else 0) | ||
| PYEOF |
There was a problem hiding this comment.
Snapshot check skips tokenizer files
Medium Severity
The cached-snapshot fallback treats tokenizer_config.json as proof the tokenizer is present, then points --tokenizer-path at that directory. A snapshot can pass this check and still lack the files AutoTokenizer needs, so serve fails after the download fallback already ran.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 1a6698f. Configure here.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=34198065264 |


Summary
Move the H200 Qwen3.8-Flash-Next FP8 AgentX MTP recipe from the mutable model-branch tag
lmsysorg/sglang:qwen38flashnextto the newest Qwen3.8-Flash-Next model-branch build,lmsysorg/sglang:dev-cu13-qwen38-next-local@sha256:9d2a843c706c74bc259c0d9abf360551eb2734e1e7d255ab012a6965f10480b6, pinned by digest.Qwen4ExpForConditionalGeneration) is not in SGLang main, v0.5.19, or today's nightlynightly-dev-cu13-20260907-30705c00. It exists only on SGLang model branches shipped as dev images, so the model-branch lineage is the only one that can serve this recipe.qwen38flashnextwas last re-pushed 2026-09-03T20:54:46Z (digestsha256:5ae58167...), after the recipe merged on 2026-08-27, so nodes with an older squash cache may have been running a different build than nodes that pulled later. The digest pin removes that ambiguity.dev-cu13-qwen38-next-local, Docker Hub last pushed 2026-09-07T11:12:42Z, digestsha256:9d2a843c706c74bc259c0d9abf360551eb2734e1e7d255ab012a6965f10480b6. Provenance is a model branch, not upstream main; this sweep is the validation that it still carries the fixes the recipe relies on (NEXTN MTP verify with float32 SSM state on sm_90).benchmarks/single_node/agentic/qwen3.8next_fp8_h200_sglang_mtp.shis unchanged: TP4/EP4, mem-fraction 0.85, flashinfer attention, NEXTN MTP at 3 speculative tokens, golden AL 2.32, conc [1, 4, 8, 12, 16].Recipes touched:
qwen3.8next-fp8-h200-sglang-agentic-mtpTest plan
🤖 Generated with Claude Code
Note
Medium Risk
Benchmark reliability and reproducibility change (image pin plus model-path resolution); serve flags and search space are unchanged, but wrong snapshot selection could serve stale weights if validation logic were wrong.
Overview
Pins the
qwen3.8next-fp8-h200-sglang-agentic-mtprecipe to digestlmsysorg/sglang:dev-cu13-qwen38-next-local@sha256:9d2a843c…instead of the mutableqwen38flashnexttag, and documents the change inperf-changelog.yaml.H200 benchmark script: when
MODEL_PATHis not preset, a failed onlinehf download(e.g.PermissionErroron shared/mnt/hf_hub_cachelock files after an upstream repo revision) now selects the newest locally cached snapshot that has tokenizer, index, and all weight shards, setsMODEL_PATHto that directory, and still exits with an error if none qualify.--tokenizer-pathis switched from the HF repo id to$MODEL_PATHso tokenizer load does not re-hit the same cache locks during snapshot fallback.Reviewed by Cursor Bugbot for commit 1a6698f. Bugbot is set up for automated code reviews on this repo. Configure here.
Update: shared-cache lock fallback
First sweep (run 34174941536) failed all four H200 cells before serving:
hf download Qwen/Qwen3.8-Flash-Next-FP8had 135/144 files cached and then hitPermissionErroracquiring/mnt/hf_hub_cache/.locks/models--Qwen--Qwen3.8-Flash-Next-FP8/<etag>.lock. The lock files are owned by whichever runner account first fetched the blob (filelock creates them 0644), so a job on another runner account cannot open them; this is a cluster-cache permission issue, not the image (all three images run as root, and the launcher remaps root). The script now falls back toHF_HUB_OFFLINE=1 hf downloadwhen the online download fails, which resolves the cached snapshot without taking locks and still fails loudly on a genuinely missing file. Serve flags unchanged.Update 2: complete-snapshot fallback
The offline fallback did not help (run 34188408693): the cache holds 143/144 files and the missing blob is the new README from the model repo's 2026-08-31 revision, the same blob whose lock cannot be created, so
HF_HUB_OFFLINEhad nothing to resolve. The script now serves the newest cached snapshot that is complete (tokenizer, shard index, and every shard present) when the online download fails, which is the weight set this recipe was validated on. A cache with no complete snapshot still fails loudly. The underlying issue is cluster-side:/mnt/hf_hub_cache/.locks/models--Qwen--Qwen3.8-Flash-Next-FP8/is owned by another runner account and should be made group-writable.