Skip to content

feat(sglang): cut over to a fork-built image, retire our own build - #4256

Merged
Tanguille merged 5 commits into
mainfrom
refactor/drop-sglang-image-build
Jul 29, 2026
Merged

feat(sglang): cut over to a fork-built image, retire our own build#4256
Tanguille merged 5 commits into
mainfrom
refactor/drop-sglang-image-build

Conversation

@Tanguille

@Tanguille Tanguille commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • mattbucci/2x-R9700-RDNA4-GFX1201-sglang-inference now publishes its own image with the same patch series we used to vendor — our build pipeline is dead weight. Deletes docker/sglang-rdna4/, .github/workflows/build-sglang-rdna4.yaml, and the renovate rules tied to them.
  • InferenceService.image now points at ghcr.io/tanguille/sglang-rdna4:sha-cb7b7605..., built by our own fork (Tanguille/2x-R9700-RDNA4-GFX1201-sglang-inference, main) via its build-image.yaml publish job — not a pipeline in this repo, and not waiting on upstream review.
  • That fork build carries mattbucci's full patch series plus our HiCache OpenSSL-headers fix (upstream PR mattbucci#6, still open/unmerged there) and two CI fixes we had to make to get the fork's own workflow to actually build and publish (disk-space exhaustion on load: true, GHCR repo name not lowercased).
  • SGLANG_RDNA4_DISABLE_STORE_CACHE=1 is now load-bearing: LLMKube invokes launch_server directly, bypassing the image's entrypoint.sh/gpu-selection.sh, the only place this env var is normally set for TP=1. Verified directly against the published image's kvcache.py — without it, the JIT store_cache kernel crashes on first request.
  • Bumped the HiCache storage-dir suffix per the file's existing convention (any image change invalidates cached pages).
  • Re-added the renovate digest-review packageRule for ghcr.io/tanguille/sglang-rdna4 — removed earlier when the image was frozen, restored now that it's live and rebuildable again.

Production impact

This rolls the live sglang serving pod on the next reconcile (InferenceService uses Recreate on the single GPU).

Verified before merge

  • SGLANG_RDNA4_DISABLE_STORE_CACHE requirement confirmed by pulling the actual published image and reading the real kvcache.py, not by reading build scripts
  • --trust-remote-code / SGLANG_TRUST_REMOTE_CODE conflict checked — the env var is only read by the bypassed entrypoint wrapper, not by sglang.launch_server itself
  • .renovaterc.json5 validated with json5 parser
  • qwen36-27b-sglang.yaml validated with yaml.safe_load_all
  • Pod health / first-request smoke test after this rolls

Summary by CodeRabbit

  • Updates

    • Updated the Qwen SGLang deployment to use a newer pinned RDNA4 image.
    • Added required store-cache configuration and refreshed the cache storage path.
    • Retired the repository’s custom RDNA4 image build and entrypoint setup in favor of the fork-published image.
  • Documentation

    • Updated hosting and blocker guidance to reflect the current image source, deployment requirements, and upstream transition plan.
    • Clarified that benchmark results represent a historical snapshot.

…utover

mattbucci/2x-R9700-RDNA4-GFX1201-sglang-inference now publishes its own
ghcr.io/mattbucci/sglang-rdna4 image with the same patch series we vendored,
so our Dockerfile/build workflow/renovate tracking are dead weight. The
deployed InferenceService keeps running the last self-built digest unchanged.

Cutover to the upstream image is blocked on mattbucci#6 (HiCache OpenSSL
headers fix) merging; SGLANG_RDNA4_DISABLE_STORE_CACHE=1 is prepped now so
the swap is a one-line image bump once that lands.
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The repository retires its custom RDNA4 SGLang image assets, documents the fork-published replacement, updates Renovate metadata, and changes the Qwen SGLang deployment to a new image digest with revised cache settings.

Changes

RDNA4 SGLang cutover

Layer / File(s) Summary
Retire custom image pipeline
.github/workflows/build-sglang-rdna4.yaml, docker/sglang-rdna4/*, .renovaterc.json5
The repository-owned RDNA4 build workflow, Docker assets, and entrypoint are removed, while the deployed image rule description is updated.
Document published image cutover
docs/llm-hosting/engine-benchmarks-gfx1201.md, docs/llm-hosting/sglang-blockers.md
Documentation identifies the fork-published image, retired build pipeline, required store-cache setting, and updated gfx1201 image source.
Configure RDNA4 runtime
kubernetes/apps/ai/llmkube/models/qwen36-27b-sglang.yaml
The InferenceService receives a new digest-pinned image, disables RDNA4 store cache, and uses an updated HiCache directory.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested labels: renovate/container, type/digest

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: switching to a fork-built SGLang image and retiring the repo’s custom build.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/drop-sglang-image-build

Comment @coderabbitai help to get the list of available commands.

@Tanguille
Tanguille marked this pull request as draft July 29, 2026 20:06
@tanguille-cluster

tanguille-cluster Bot commented Jul 29, 2026

Copy link
Copy Markdown
@@ spec.env @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b
! + one list entry added:
+ - name: SGLANG_RDNA4_DISABLE_STORE_CACHE
+   value: "1"

@@ spec.env.SGLANG_HICACHE_FILE_BACKEND_STORAGE_DIR.value @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b
! ± value change
- /hicache/sglang-v0.5.16_awq-f541031d
+ /hicache/sglang-v0.5.16_awq-f541031d_fork-cb7b760

@@ spec.image @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b
! ± value change
- ghcr.io/tanguille/sglang-rdna4:v0.5.16-gfx1201@sha256:615cb4265400f5468da4c32221f0086df075b126ce8dbfa78d998e844a5e424d
+ ghcr.io/tanguille/sglang-rdna4:sha-cb7b76050cbf8dda9e5a78c07b24df1a783caeb3@sha256:f961fc274eaad4af065097e0921b88ae5a97a478baa0e384e6c5ee440c355b29

@github-actions

Copy link
Copy Markdown

AI Automated Review

Analysis engine: qwen-3.6-fast@http://litellm.ai.svc.cluster.local/v1 (openai)

Recommendation: Approve. This PR cleanly retires the self-built SGLang image pipeline, removes dead build artifacts and Renovate managers, and preps the InferenceService for the upcoming upstream cutover with a no-op env var change.

Change-by-Change Findings

  1. Deleted files (docker/sglang-rdna4/*, .github/workflows/build-sglang-rdna4.yaml): Correctly removed. The README explicitly states the build pipeline is retired in favor of the fork's published image. Removing these eliminates maintenance burden and CI noise.
  2. .renovaterc.json5: Removed custom managers and package rules tied to the deleted Dockerfile and image. This is consistent with retiring the build pipeline; Renovate will no longer attempt to update dependencies for a non-existent file.
  3. docs/llm-hosting/engine-benchmarks-gfx1201.md & sglang-blockers.md: Documentation updates accurately reflect the new state: the build pipeline is retired, the current image is frozen at the last self-built digest, and the cutover to ghcr.io/mattbucci/sglang-rdna4 is blocked on an upstream PR (mattbucci#6). The version bump from v0.5.15 to v0.5.16 in the blockers doc aligns with recent history (feat(sglang): adopt the fork's v0.5.16 rebase).
  4. kubernetes/apps/ai/llmkube/models/qwen36-27b-sglang.yaml: Adds SGLANG_RDNA4_DISABLE_STORE_CACHE=1. The comment correctly identifies this as a no-op for the current self-built image (which patches this unconditionally) but required for the upstream image. This is a safe, forward-compatible change.

Standards Compliance

  • Conventions: The PR follows Conventional Commit titles (refactor(sglang): ...). No secrets or age keys are committed. Shell scripts were deleted, so shellcheck compliance is vacuously satisfied.
  • Safety: No changes to live cluster state beyond the manifest update. The image digest remains unchanged, ensuring no behavior change for the running pod.

Must Check Items

  • Review for path traversal vulnerabilities: Not applicable. This PR deletes build infrastructure and modifies Kubernetes manifests/environment variables. No user-input path handling is introduced or changed.
  • Test with edge-case paths (null bytes, symlinks): Not applicable. The changes are declarative configuration and documentation updates; no runtime code processing filesystem paths is involved.

Unknowns or Needs Verification

  • None. The evidence provided (diff, docs, standards) is sufficient to verify the correctness and safety of this retirement/cutover prep PR.

…upstream

ghcr.io/tanguille/sglang-rdna4 now points at an image built by our fork
(Tanguille/2x-R9700-RDNA4-GFX1201-sglang-inference) rather than the last
self-built digest. Includes mattbucci's full patch series plus our HiCache
OpenSSL-headers fix (upstream PR mattbucci#6, still open) and the CI
disk-space/GHCR-lowercase fixes needed to publish it.

SGLANG_RDNA4_DISABLE_STORE_CACHE=1 is now load-bearing, not prep. Bumped
the HiCache storage-dir suffix per the existing convention (any image
change invalidates cached pages). Re-added the renovate digest-review
rule since the image is live and rebuildable again.
@Tanguille Tanguille changed the title refactor(sglang): retire our own image build, prep env for upstream cutover feat(sglang): cut over to a fork-built image, retire our own build Jul 29, 2026
@Tanguille
Tanguille marked this pull request as ready for review July 29, 2026 22:06
@Tanguille
Tanguille merged commit a903a77 into main Jul 29, 2026
11 of 14 checks passed
@Tanguille
Tanguille deleted the refactor/drop-sglang-image-build branch July 29, 2026 22:07

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/llm-hosting/sglang-blockers.md`:
- Line 115: Update the image reference in the Impact statement to match the
deployed `ghcr.io/tanguille/sglang-rdna4` image used elsewhere in the document,
or explicitly identify `ghcr.io/mattbucci/sglang-rdna4` as the upstream/source
image rather than the deployed image.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b5150629-d1b4-4900-b72d-c760e5adb3cd

📥 Commits

Reviewing files that changed from the base of the PR and between a1ec107 and 24dbb3c.

📒 Files selected for processing (8)
  • .github/workflows/build-sglang-rdna4.yaml
  • .renovaterc.json5
  • docker/sglang-rdna4/Dockerfile
  • docker/sglang-rdna4/README.md
  • docker/sglang-rdna4/entrypoint.sh
  • docs/llm-hosting/engine-benchmarks-gfx1201.md
  • docs/llm-hosting/sglang-blockers.md
  • kubernetes/apps/ai/llmkube/models/qwen36-27b-sglang.yaml
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • Tanguille/LLMKube (auto-detected)
  • Tanguille/2x-R9700-RDNA4-GFX1201-sglang-inference (auto-detected)
💤 Files with no reviewable changes (4)
  • docker/sglang-rdna4/Dockerfile
  • docker/sglang-rdna4/entrypoint.sh
  • docker/sglang-rdna4/README.md
  • .github/workflows/build-sglang-rdna4.yaml

## Blocker 5 — No official SGLang Docker image for gfx1201

**Impact:** Operational. Requires maintaining a custom Dockerfile and image (defined in `docker/sglang-rdna4/`).
**Impact:** Operational. Previously required maintaining our own Dockerfile and build pipeline; the fork now publishes `ghcr.io/mattbucci/sglang-rdna4` itself, retiring ours (see "Current approach" above).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Align the documented image with the deployed image.

Line 115 names ghcr.io/mattbucci/sglang-rdna4, but the current deployment and Line 5 use ghcr.io/tanguille/sglang-rdna4. Update this line or explicitly label the Mattbucci image as the upstream/source image.

Proposed fix
-**Impact:** Operational. Previously required maintaining our own Dockerfile and build pipeline; the fork now publishes `ghcr.io/mattbucci/sglang-rdna4` itself, retiring ours (see "Current approach" above).
+**Impact:** Operational. Previously required maintaining our own Dockerfile and build pipeline; our fork now publishes `ghcr.io/tanguille/sglang-rdna4`, retiring ours (see "Current approach" above).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**Impact:** Operational. Previously required maintaining our own Dockerfile and build pipeline; the fork now publishes `ghcr.io/mattbucci/sglang-rdna4` itself, retiring ours (see "Current approach" above).
**Impact:** Operational. Previously required maintaining our own Dockerfile and build pipeline; our fork now publishes `ghcr.io/tanguille/sglang-rdna4`, retiring ours (see "Current approach" above).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/llm-hosting/sglang-blockers.md` at line 115, Update the image reference
in the Impact statement to match the deployed `ghcr.io/tanguille/sglang-rdna4`
image used elsewhere in the document, or explicitly identify
`ghcr.io/mattbucci/sglang-rdna4` as the upstream/source image rather than the
deployed image.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant