Skip to content

fix(ai): tune dormant Qwen3.6 vLLM ROCm manifest - #4155

Merged
Tanguille merged 3 commits into
mainfrom
fix/vllm-manifest-tuning
Jul 23, 2026
Merged

fix(ai): tune dormant Qwen3.6 vLLM ROCm manifest#4155
Tanguille merged 3 commits into
mainfrom
fix/vllm-manifest-tuning

Conversation

@Tanguille

@Tanguille Tanguille commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • Repair the pinned Qwen3.6 model metadata for compressed-tensors quantization.
  • Use the ROCm nightly with the required AMD kernel support.
  • Persist compilation caches and tune memory, batching, probes, and startup arguments.
  • Keep the service disabled (replicas: 0) while benchmarking it against the current SGLang runtime.

Review follow-up

  • Simplified volatile implementation comments.
  • Added a TODO to replace the temporary always-successful liveness check before production cutover.

Validation

  • git diff --check
  • Repository PR validation script (only pre-existing tool and repository-wide warnings).

Summary by CodeRabbit

  • New Features

    • Added persistent compilation caching for the Qwen 36B inference service to retain JIT artifacts across restarts.
    • Updated the model source revision and adjusted model quantization settings.
  • Improvements

    • Switched the vLLM/ROCm serving runtime to a newer ROCm nightly build.
    • Updated inference configuration for parallel execution and refined cache/dtype behavior.
    • Improved startup and health checks for the updated runtime and reduced serving resource allocations.

- repin model source; the old sha 404s and CrashLoops the downloader forever
- switch to the official vllm/vllm-openai-rocm nightly, which carries
  upstream PR #40977's RDNAHybridW4A16LinearKernel; the community fork's
  frozen base image structurally cannot ship it
- drop the Model resources block and shrink InferenceService's (8cpu/32-48Gi
  never actually schedules on this node) to the values that do
- add a compile-cache PVC and JIT env vars so torch.compile/triton/inductor
  survive pod restarts instead of re-paying ~100s + a long warmup each time
- tune generation config to match sglang's memory/quantization footprint and
  widen the startup probe for the observed single-threaded warmup

Stays inert (replicas: 0). Benchmarked in isolation against the sglang
runtime this replaces: vLLM wins decode at every concurrency level tested,
sglang wins prefill: not yet a production cutover.
@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The Qwen vLLM manifest adds persistent compilation caching, updates the model revision and quantization, switches to a ROCm nightly image, revises runtime settings and probes, and reduces serving resources.

Changes

Qwen vLLM runtime

Layer / File(s) Summary
Compile cache and model initialization
kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml
Adds a compile-cache PVC, updates the model source SHA and quantization, and removes standalone model resources.
ROCm serving configuration
kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml
Switches the vLLM image, updates runtime arguments and environment variables, mounts cache storage, extends probes, and reduces serving resources to 2 CPUs and 24Gi memory.

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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: tuning the Qwen3.6 vLLM ROCm manifest.
✨ 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 fix/vllm-manifest-tuning

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

@tanguille-cluster

tanguille-cluster Bot commented Jul 23, 2026

Copy link
Copy Markdown
@@ spec @@
# inference.llmkube.dev/v1alpha1/Model/ai/qwen36-27b-vllm
! - one map entry removed:
- resources:
-   cpu: "8"
-   memory: 48Gi

@@ spec.quantization @@
# inference.llmkube.dev/v1alpha1/Model/ai/qwen36-27b-vllm
! ± value change
- AWQ
+ compressed-tensors

@@ spec.source @@
# inference.llmkube.dev/v1alpha1/Model/ai/qwen36-27b-vllm
! ± value change
- hf://cyankiwi/Qwen3.6-27B-AWQ-INT4@8f269fb53eb3fe3be8f01f9755f20570cef0ebe0
+ hf://cyankiwi/Qwen3.6-27B-AWQ-INT4@e5cc0400fb2403c437c2c40a7c52fb5ae93fda18

@@ spec @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! + five map entries added:
+ extraArgs:
+ - "--served-model-name"
+ - qwen-3.6
+ - "--limit-mm-per-prompt"
+ - "{\"image\":0,\"video\":0}"
+ - "--mamba-ssm-cache-dtype"
+ - bfloat16
+ - "--trust-remote-code"
+ - "--host"
+ - "0.0.0.0"
+ extraVolumeMounts:
+ - name: compile-cache
+   mountPath: /cache
+ extraVolumes:
+ - name: compile-cache
+   persistentVolumeClaim:
+     claimName: qwen36-27b-vllm-compile-cache
+ parallelSlots: 8
+ probeOverrides:
+   liveness:
+     exec:
+       command:
+       - "true"
+     periodSeconds: 3600
+   readiness:
+     failureThreshold: 6
+     periodSeconds: 30
+     tcpSocket:
+       port: 8000
+     timeoutSeconds: 5
+   startup:
+     failureThreshold: 240
+     httpGet:
+       path: /health
+       port: 8000
+     initialDelaySeconds: 60
+     periodSeconds: 15

@@ spec.env @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! + five list entries added:
+ - name: HIP_VISIBLE_DEVICES
+   value: "0"
+ - name: ROCR_VISIBLE_DEVICES
+   value: "0"
+ - name: VLLM_CACHE_ROOT
+   value: /cache/vllm
+ - name: TRITON_CACHE_DIR
+   value: /cache/triton
+ - name: TORCHINDUCTOR_CACHE_DIR
+   value: /cache/inductor

@@ spec.image @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! ± value change
- docker.io/tcclaviger/vllm:latest@sha256:dfb67a2c947e995978c03fb7e1d7a0b0601cf3d9958865df1659b165a367153f
+ docker.io/vllm/vllm-openai-rocm:nightly-4080263bb2c5d10deac17aaeb88e0823bc35bca9@sha256:b72e4aca14bae0f853cca1bb71bcf17dae30ef2e2f9ec39485f4da0506383380

@@ spec.resources.cpu @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! ± value change
- 8
+ 2

@@ spec.resources.memory @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! ± value change
- 32Gi
+ 24Gi

@@ spec.vllmConfig @@
# inference.llmkube.dev/v1alpha1/InferenceService/ai/qwen36-27b-vllm
! - three map entries removed:
- dtype: bfloat16
- enableChunkedPrefill: true
- quantization: awq

@@ (root level) @@
# v1/PersistentVolumeClaim/ai/qwen36-27b-vllm-compile-cache
! + one document added:
+ apiVersion: v1
+ kind: PersistentVolumeClaim
+ metadata:
+   name: qwen36-27b-vllm-compile-cache
+   namespace: ai
+   labels:
+     kustomize.toolkit.fluxcd.io/name: llmkube-models
+     kustomize.toolkit.fluxcd.io/namespace: ai
+ spec:
+   resources:
+     requests:
+       storage: 10Gi
+   storageClassName: openebs-hostpath
+   accessModes:
+   - ReadWriteOnce

@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

🧹 Nitpick comments (1)
kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml (1)

143-161: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Liveness probe is effectively disabled — acceptable for this WIP benchmark, but flag before cutover.

exec: command: ["true"] with periodSeconds: 3600 will always succeed regardless of whether the server actually hangs, so a real hang won't trigger a restart for up to an hour, if ever. Given replicas: 0 and the PR's explicit "not yet a production cutover" framing, this is a reasonable stopgap to avoid killing mid-warmup, but it shouldn't be forgotten before this becomes a live serving path.

🤖 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 `@kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml` around lines 143 -
161, The liveness probe in probeOverrides is intentionally disabled for the
current WIP benchmark; preserve it as-is, but add a clear TODO or cutover
reminder near the liveness configuration to replace the always-successful exec
check and hourly interval with a real server health probe before production use.
🤖 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 `@kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml`:
- Around line 36-40: Update the quantization metadata alongside the source in
the model configuration to identify the checkpoint as compressed-tensors
pack-quantized rather than AWQ. Change only the quantization value and preserve
the existing source pin and format.

---

Nitpick comments:
In `@kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml`:
- Around line 143-161: The liveness probe in probeOverrides is intentionally
disabled for the current WIP benchmark; preserve it as-is, but add a clear TODO
or cutover reminder near the liveness configuration to replace the
always-successful exec check and hourly interval with a real server health probe
before production use.
🪄 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: 98c87466-c8bb-4e5d-8999-84a7e31fe04b

📥 Commits

Reviewing files that changed from the base of the PR and between 1b1a8d2 and 73f93eb.

📒 Files selected for processing (1)
  • kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml
🔗 Linked repositories identified

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

  • Tanguille/LLMKube (auto-detected)

Comment thread kubernetes/apps/ai/llmkube/models/qwen36-27b-vllm.yaml Outdated
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown

AI Automated Review (incremental)

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

Recommendation: Approve

This incremental commit cleans up verbose inline comments from the previous PR iteration without altering any functional YAML. The changes are cosmetic-only, preserving all resource specifications, probe configurations, environment variables, and image references established in the prior review. The manifest remains internally consistent and aligns with repository conventions for comment brevity.

Change-by-Change Findings

  • Comment cleanup: Replaced multi-line explanatory comments with concise one-liners across the PersistentVolumeClaim, Model, and InferenceService resources. No structural or behavioral changes were introduced.
  • TODO preservation: Retained the TODO on the liveness probe (exec: ["true"]) noting it should be replaced before production cutover, which is appropriate given replicas: 0.

Standards Compliance

  • Follows repository convention of keeping comments focused and avoiding over-explanation in manifests.
  • Maintains consistency with other LLM hosting manifests in kubernetes/apps/ai/llmkube/models/.
  • No shell scripts, secrets, or SOPS-encrypted files touched.

Tool Harness Findings

No tool harness findings were provided; this section is omitted.

Unknowns or Needs Verification

None — the delta is purely cosmetic and fully verifiable from the diff.

@Tanguille Tanguille changed the title fix(ai): repair and tune the vLLM qwen3.6 manifest for RDNA4 - repin model source; the old sha 404s and CrashLoops the downloader forever - switch to the official vllm/vllm-openai-rocm nightly, which carries upstream PR #40977's RDNAHybridW4A16LinearKernel; the community fork's frozen base image structurally cannot ship it - drop the Model resources block and shrink InferenceService's (8cpu/32-48Gi never actually schedules on this node) to the values that do - add a compile-cache PVC and JIT env vars so torch.compile/triton/inductor survive pod restarts instead of re-paying ~100s + a long warmup each time - tune generation config to match sglang's memory/quantization footprint and widen the startup probe for the observed single-threaded warmup Stays inert (replicas: 0). Benchmarked in isolation against the sglang runtime this replaces: vLLM wins decode at every concurrency level tested, sglang wins prefill: not yet a production cutover. fix(ai): tune dormant Qwen3.6 vLLM ROCm manifest Jul 23, 2026
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