Skip to content

Update qwen3.5-bf16-b300-sglang and -mtp SGLang image to v0.5.12-cu130#1422

Merged
functionstackx merged 4 commits into
mainfrom
claude/issue-1154-qwen3.5-bf16-b300-sglang
May 18, 2026
Merged

Update qwen3.5-bf16-b300-sglang and -mtp SGLang image to v0.5.12-cu130#1422
functionstackx merged 4 commits into
mainfrom
claude/issue-1154-qwen3.5-bf16-b300-sglang

Conversation

@Klaud-Cold
Copy link
Copy Markdown
Collaborator

Updates SGLang image for qwen3.5-bf16-b300-sglang and qwen3.5-bf16-b300-sglang-mtp from v0.5.11-cu130 to v0.5.12-cu130.
\nRef #1154

Generated with Claude Code

…ng image to v0.5.12-cu130

Ref #1154

Co-authored-by: Klaud Cold <Klaud-Cold@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

Thanks for the contribution! For vLLM & SGLang, please ensure that your recipes is similar to the official vLLM recipes and/or the SGLang cookbook

If it is not, please create a PR first before we can merge your single node PR into the master branch. Let's ensure that the documentation is first class such that the entire ML community can benefit from your hard work! Thank you

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. If re-running failed jobs is attempted, PR authors are responsible for ensuring it passes. See GitHub's docs on re-running failed jobs: https://docs.github.com/en/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow

As a rule of thumb, generally, PR authors should request a review & get a PR approval from the respective companies' CODEOWNERS before requesting a review from core maintainers.

If additional help is needed, PR authors can reach out to core maintainers over Slack.

Comment thread perf-changelog.yaml Outdated
- qwen3.5-bf16-b300-sglang-mtp
description:
- "Update SGLang image from v0.5.11-cu130 to v0.5.12-cu130"
pr-link: XXX
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 The new perf-changelog entry uses the literal placeholder pr-link: XXX instead of the actual PR URL. All other entries in this file follow the canonical format pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/<num>, so this should be https://github.com/SemiAnalysisAI/InferenceX/pull/1422 before merging.

Extended reasoning...

What the bug is

The diff adds a new entry to perf-changelog.yaml at line 2557 with pr-link: XXX. The string XXX is clearly an unfilled template placeholder that was supposed to be replaced with the actual PR URL before opening this PR.

How it manifests

Every prior entry in perf-changelog.yaml follows the same convention. Looking at the four most recent entries that come immediately before this one (lines 2532, 2538, 2544, 2550), each uses the canonical format:

pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/<num>

The new entry breaks this pattern by retaining a template placeholder.

Step-by-step proof

  1. Open perf-changelog.yaml and look at the four most recent entries that come immediately before the newly added block:
    • Line 2532: pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/...
    • Line 2538: pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/...
    • Line 2544: pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/...
    • Line 2550: pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1402
  2. The new entry added by this PR ends at line 2557 with: pr-link: XXX
  3. XXX is not a URL and does not match the established pattern.
  4. This PR is Update qwen3.5-bf16-b300-sglang and -mtp SGLang image to v0.5.12-cu130 #1422, so the value should be https://github.com/SemiAnalysisAI/InferenceX/pull/1422.

Why existing code doesn't prevent it

The changelog convention is enforced by author discipline rather than by a schema check — YAML happily parses XXX as a string, so neither YAML validation nor any current CI step rejects the placeholder. The PR description even references #1154 as context, but the changelog placeholder was never filled in.

Impact

Any link-following automation, release-notes generator, or human reader navigating the changelog will hit a dead string (XXX) instead of a real PR link for this entry. While the file still parses, the structured pr-link field becomes useless for this row and breaks the documented convention going forward.

How to fix

Replace line 2557 with:

  pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1422

@github-actions
Copy link
Copy Markdown
Contributor

@functionstackx
Copy link
Copy Markdown
Collaborator

Upstream issue filed

Filed sgl-project/sglang#25564 for the B300 (sm_103) flash-attn assertion that's blocking this PR's full sweep. Includes the full traceback (vision encoder → flash_attn_v4flash_fwd_sm100.py:162), the failing CI run, and root-cause analysis.

Why it fails despite sm_103 nominally being in range

The assertion is self.arch >= Arch.sm_100 and self.arch <= Arch.sm_110f. B300 is sm_103 (Blackwell Ultra, compute cap 10.3), numerically inside that range — but the cutedsl Arch enum's __le__ resolves sm_110f to a value less than sm_103 on non-cu13 cutedsl, collapsing the effective range to sm100 <= ... <= sm101. (Quoted explanation from the upstream FA PR author.)

Upstream flash-attn fix already exists

Dao-AILab/flash-attention#2572 by @ocss884 (opened earlier today, 2-line diff, awaiting @tridao review) replaces the broken int-comparison with is_family_of():

```diff
-assert self.arch >= Arch.sm_100 and self.arch <= Arch.sm_110f, "Only SM 10.x and 11.x are supported"
+assert self.arch.is_family_of(Arch.sm_100f) or self.arch.is_family_of(Arch.sm_110f), \

  • "Only SM 10.x and 11.x are supported"
    ```

Once that merges and Tri Dao tags a new flash-attn-4 release, sglang needs to bump the flash-attn-4>=4.0.0b9 floor in python/pyproject.toml to the fixed version. Until then this PR has to either pin to lmsysorg/sglang:v0.5.11-cu130 or stay paused.

Workaround for the flash_attn v4 cute kernel's sm_103 assertion failure
in the Qwen3.5-VL vision encoder (filed as sgl-project/sglang#25564,
upstream fix in Dao-AILab/flash-attention#2572).

The text decoder still uses --attention-backend trtllm_mha; this only
swaps the multi-modal (vision encoder) attention path to triton_attn,
bypassing the broken flash_attn cute dispatch on B300.

Suggested by upstream sglang reviewer.
@functionstackx
Copy link
Copy Markdown
Collaborator

functionstackx commented May 18, 2026

Trying suggested workaround: --mm-attention-backend triton_attn

Per suggestion from radixark maintainer — added --mm-attention-backend triton_attn to both qwen3.5_bf16_b300.sh and qwen3.5_bf16_b300_mtp.sh. The text decoder still uses --attention-backend trtllm_mha; this only swaps the multi-modal (vision encoder) attention path, which is exactly where the flash_attn cute kernel was failing on B300 (sm_103) — see the traceback qwen3_vl.py:838vision.py:491flash_attn_v4flash_fwd_sm100.py:162 assertion.

Pushed as 9ae53b45. Re-triggers the full sweep — if it goes green, this is the durable fix until Dao-AILab/flash-attention#2572 merges and sglang bumps its pinned flash-attn-4. If it still fails, the fallback is to pin the image back to lmsysorg/sglang:v0.5.11-cu130.

# Conflicts:
#	perf-changelog.yaml
@functionstackx
Copy link
Copy Markdown
Collaborator

Upstream commentary: the fix is actually a nvidia-cutlass-dsl[cu13] dependency, not the FA PR

@mmangkad on sgl-project/sglang#25564 chimed in and pushed back on the framing — the FA PR is a red herring. The real bug is on the sglang side, in the CuteDSL dependency. Quoting:

I don't think the FA PR is technically needed here, even upstream. If SM103 is hitting this assertion, that basically means we are on the non-cu13 CuTeDSL aliasing path. SGLang already defaults to CUDA 13, so I think the CuTeDSL dependency should match that now by using nvidia-cutlass-dsl[cu13].

The confusing bit is from the CuTeDSL 4.5 change. The Arch enum now aliases sm_101* and sm_110* differently depending on CUDA version. On the non-cu13 path, sm_110f can effectively behave like sm_101f, so the FA4 check self.arch >= Arch.sm_100 and self.arch <= Arch.sm_110f can accidentally reject sm_103. So the fix is just to install the [cu13] extra for nvidia-cutlass-dsl. FI does the same thing for its own cu13 extra. We should add [cu13] to nvidia-cutlass-dsl dependency for the same reason.

So once sglang bumps its nvidia-cutlass-dsl dependency to the [cu13] extra and reships the lmsysorg/sglang:v0.5.12-cu130 image (or v0.5.13), this PR can drop the --mm-attention-backend triton_attn workaround entirely. Until then the workaround on 0fd4f60c keeps the sweep alive.

functionstackx pushed a commit that referenced this pull request May 18, 2026
Same workaround as PR #1422 — bypass the broken flash-attn cute kernel
sm_103 assertion in the Qwen-3.5-VL vision encoder by switching only
the multi-modal attention path to triton_attn. Text decoder still uses
--attention-backend trtllm_mha.

See sgl-project/sglang#25564 + Dao-AILab/flash-attention#2572 for the
upstream root cause and the in-flight fix.
functionstackx pushed a commit that referenced this pull request May 18, 2026
Same workaround as #1422 (bf16) and #1451 (fp8) — bypass the broken
flash-attn cute kernel sm_103 assertion in the Qwen-3.5-VL vision
encoder by switching only the multi-modal attention path to triton_attn.
Text decoder still uses --attention-backend trtllm_mha.

See sgl-project/sglang#25564 (root cause: cutedsl Arch enum aliasing on
non-cu13 path collapses sm_100..sm_110f range to exclude sm_103) and
Dao-AILab/flash-attention#2572 for the upstream fix in flight.
@github-actions
Copy link
Copy Markdown
Contributor

@functionstackx
Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

@functionstackx functionstackx merged commit 4b685a8 into main May 18, 2026
13 of 19 checks passed
@functionstackx functionstackx deleted the claude/issue-1154-qwen3.5-bf16-b300-sglang branch May 18, 2026 18:18
@github-actions
Copy link
Copy Markdown
Contributor

functionstackx pushed a commit that referenced this pull request May 20, 2026
Same workaround as #1422 (bf16) and #1451 (fp8) — bypass the broken
flash-attn cute kernel sm_103 assertion in the Qwen-3.5-VL vision
encoder by switching only the multi-modal attention path to triton_attn.
Text decoder still uses --attention-backend trtllm_mha.

See sgl-project/sglang#25564 (root cause: cutedsl Arch enum aliasing on
non-cu13 path collapses sm_100..sm_110f range to exclude sm_103) and
Dao-AILab/flash-attention#2572 for the upstream fix in flight.
functionstackx pushed a commit that referenced this pull request May 20, 2026
Same workaround as PR #1422 — bypass the broken flash-attn cute kernel
sm_103 assertion in the Qwen-3.5-VL vision encoder by switching only
the multi-modal attention path to triton_attn. Text decoder still uses
--attention-backend trtllm_mha.

See sgl-project/sglang#25564 + Dao-AILab/flash-attention#2572 for the
upstream root cause and the in-flight fix.
functionstackx added a commit that referenced this pull request May 20, 2026
….5.12-cu130 (#1475)

* Update qwen3.5-fp4-b300-sglang (+mtp) SGLang image to v0.5.12-cu130

Update SGLang image from v0.5.11-cu130 (5d old) to v0.5.12-cu130

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(qwen3.5_fp4_b300): use --mm-attention-backend triton_attn

Same workaround as #1422 (bf16) and #1451 (fp8) — bypass the broken
flash-attn cute kernel sm_103 assertion in the Qwen-3.5-VL vision
encoder by switching only the multi-modal attention path to triton_attn.
Text decoder still uses --attention-backend trtllm_mha.

See sgl-project/sglang#25564 (root cause: cutedsl Arch enum aliasing on
non-cu13 path collapses sm_100..sm_110f range to exclude sm_103) and
Dao-AILab/flash-attention#2572 for the upstream fix in flight.

* Re-trigger sweep (previous Run Sweep run stuck pending with 0 jobs)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: claude-fix-bot <claude-fix-bot@local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

2 participants