Serve a pre-quantized int8 weight-only DiT via compressed-tensors for 3-4 reference capacity on the RTX 3090 #5
Open
opened 2026-10-08 06:34:36 -04:00 by anodyine
·
4 comments
ISSUE-5
Clear current reference
main
ISSUE-5
ISSUE-2
pr-6169
codex/shared-stage-payload-transport
release/v0.31.0rc1
dev/vllm-align
debug/qwen3-omni-doc-audio-artifacts
debug/qwen3-tts-failed-speech-audio
debug/cosyvoice-conditioning
debug/cpu-collective-isolation
debug/stage-client-reload-isolation
debug/sana-video-parallel-fixture
debug/qwen25-two-card-fixture
debug/realtime-invalid-fixtures
debug/auxiliary-omni-lifecycle
debug/request-session-preservation
debug/engine-worker-ownership
dev/vllm-align-baseline-v0300
perf/cosyvoice3-hopper-default
perf/cosyvoice3-streaming-hift
docs/repository-owned-review-skill
codex-docs-v0.30.0
release/v0.30.0
fix/qwen3-tts-full-payload-buffer
codex/omni-edge-abstraction
qwen-image-2.1
release/v0.30.0rc1
perf/qwen3-tts-event-driven-default
codex-issue-7035-h100-determinism
frontend/multi-api-server-scaling
codex-hwr-domain-timeout
codex-diffusion-shutdown-escalation
release/v0.29.0rc1
backup/vllm-align-remote-20260915-0ae9bdd8c
perf/moss-local-batched-execution
codex-hwr-memory-diagnostic
codex-hwr-registration-policy
codex-hwr-integrity-policy
codex-hwr-build-admission
codex-hwr-quarantine-cleanup
codex-hwr-capacity-scan
codex/fix-qwen3-omni-moe-backend
codex/fix-offline-profiler-config
codex/fix-hunyuan-image3-expert-mapping
codex/fix-hub-kernel-dependencies
codex-vae-b300-stack-tiling
codex/fix-mot-one-sided-bias
codex-minimax-h3-vendor-callback
codex-api-server-user-guide
release/v0.28.0
test/dots-tts-e2e-coverage
fix/qwen3-tts-codec-eos-guard
revert-5464-test_minicpmo_4_5
codex-6297-topology-aware-diffusion-worker-title-v2
revert-6307-codex/6297-topology-aware-diffusion-worker-title
codex-revert-mammothmoda2
release/v0.28.0rc1
codex-flux2-klein-bf16-hwr
fix/minicpmo45-duplex-context-overflow-signed
codex-dlo-cache-budget-config
revert-6624-fix/hf-snapshot-name-match
codex-dlo-encoder-residency
codex-fix-env-var-ratchet-6217
codex-dlo-lifecycle-optimization
minicpm-challenge
feat/qwen3-tts-deadline-scheduler-signed
feat/qwen3-tts-deadline-scheduler
codex/qwen3-tts-default-chunk-ramp
codex-fix-omni-sleep-wake-resume
revert-6574-revert-6557-fix/wan-dmd-alignment-test
codex/host-weight-post-load-publication
codex/dlo-runtime-cache-phase-b
ci/warmup-full-concurrency-batch
rl-http-interfaces
codex-dlo-fp8-cache-phase1
codex-pr6279-benchmark-assets
codex-harden-x-to-video-audio
codex/dlo-registered-mmap-prototype
codex-dlo-host-weight-plan
codex-split-attention-offload-guides
codex-rank-local-mmap
news_update
codex-vae-spatial-decode-auto
codex-community-docs-refresh
codex-quantization-support-guide
codex-pd-navigation
codex-ltx2-vae-channels-last
codex-fix-pr-6011
codex-consolidate-lingbot-text-to-video
codex-ltx-2-5-diffusers
codex-quantization-consistency
codex/fix-dlo-5954
codex-canonical-image-task-examples
codex-user-guide-feature-alignment
release/v0.27.0rc1
codex-update-cache-dit-1.5.0
codex-precheck-pr-example-policy
codex-fix-lingbot-t2i-save
codex-contributor-agent-skills-docs
codex-qwenimage-vae-spatial-decode-auto
codex-wan-vae-data-movement
codex-request-vae-fastpaths
codex-vae-compile-warmup
codex-fix-rtd-doc-link
copilot/fix-code-review-comment
codex/general-example-docs
codex-docs-quantization-recipes
codex-review-config-provenance
codex/update-architecture-overview
codex-dlo-rank-local-gif
codex/module-design-doc-layout
perf/minimax-h3-lossless-hot-path
codex-dlo-design-docs
codex-design-docs-reorg
perf/minimax-h3-adaln-cache-offload
revert-4958-perf/code-predictor-fuse-qkv-gateup-v2
codex-v0.26.0-docs
release/v0.26.0
fix/tp-local-kv-recv-consensus
fix/cfg-companion-output-race
test/logprobs-sched-026-mocks
revert-5478-BugFixForOmniGPUWorkerBase
release/v0.26.0rc1
agent/daily-pr-labeler-workflow
fix/pr4709-review-followup
feature/refactor-2
lishunyang12/skip-softmax-trtllm-gen
codex/readme-v0.24.0-docs
release/v0.25.0rc1
docs/vllm-0.25-bump
fix/entrypoint-ci-timeouts-main
fix/entrypoint-ci-timeouts
release/v0.24.1
codex/lingbot-dense-latest-main
release/v0.24.0
bugfix/qwen3-tts-batched-seeded-mtp
bugfix/qwen3-tts-remove-default-seed
dev/voxcpm2-unified-graph-followups
bugfix/qwen3-tts-customvoice-asr-escalation
bugfix/qwen3-tts-seed-propagation
dev/voxcpm2-unified-decode-graph
copilot/research-github-issue-4510
codex/update-codeowners-maintainers
release/v0.24.0rc1
revert-2565-fix/ssrf-image-video-url
release/v0.22.0.post1
fix/rebase-pipeline-upload-all-e2e
dev/migrate-MR-v2
release/v0.23.0rc1
codex/fix-diffusion-allrank-rpc
fix/omni-weight-snapshot-prefetch
codex/cleanup-pr-template
readme-update-supported-models
SamitHuang-patch-1
docs/update-v0.22.0-release
feature/precheck-pr-skill
release/v0.22.0
revert-3943-feat/sensenova-u1-fp8-online-mot-gen
feat/diffusion-prefetch-protection
release/v0.20.0
feat/vllm-upgrade
release/v0.22.0rc1
lance-model-support
fix-mot-rmsnorm-vllm021
codex/unskip-fp8-z-image-quality
fix/version-tag-alignment-3858
helios/accuracy-maintained-main
docs/add-new-committers
release/v0.21.0rc1
worktree-enable-twine-upload
khluu/release-docker-images
update-v0200
revert-3304-FusedRMSNorm
copilot/revert-3162-whitelist-optimization-signed
revert-1338-refine-diffusion-loader
revert-3118-voxcpm2-instructions-cfg
copilot/update-documentation-in-pull-request-2972
claude/fix-diffusion-cache-ci-iFBqB
release/v0.18.0.post1
codex-revert-pr-reviewer
pipeline-npu
community-recipes
add-skill
khluu/release3
khluu/release2
release/v0.19.0rc1
update-committers
governance-update
v0.18.0-release-news
khluu/release
release/v0.18.0
dev/rebase-v0.18.0
release/v0.18.0rc1
khluu/fix_ci
ywang96-patch-1
governance
codex/update-readme-slides-link
revert-1255-er-stable-audio-online
dev/rebase-v0170
release/v0.17.0rc1
v016
release/v0.16.0
khluu-patch-2
khluu-patch-1
revert-1431-feature/pr-reviewer-auto-trigger
copilot/rebase-to-upstream-vllm-v0150
release/v0.16.0rc1
copilot/find-opening-prs-excluding-diffusion
release/v0.15.0rc1
release/v0.14.0.post1
dev/rebase-v0.15.0
main-doc
update-doc-to-014
release/v0.14.0
revert-954-handler_fix
release/v0.14.0rc1
copilot/fix-output-issues
copilot/fix-typo-in-documentation
copilot/discuss-issue-823
update-doc
release/v0.12.0rc1
test-ready-label
khluu/ci_pipeline_gen
h100-ci
khluu/ci
docker-doc
dockerfile
raw-image-logo
wzliu_connector_dev
pq_dev
buildkite-2
split-ode-solver
qby_dev/cpu_support
copilot/update-actions-upload-artifact
Clear current reference
v0.31.0rc1
v0.30.0
v0.30.0rc1
v0.29.0rc1
v0.28.0
v0.28.0rc1
v0.27.0rc1
v0.26.0
v0.26.0rc1
v0.25.0rc1
v0.24.1
v0.24.0
v0.24.0rc1
v0.23.0rc1
v0.22.0
v0.22.0rc1
v0.21.0rc2
v0.21.0rc1
v0.20.0
v0.20.0rc1
v0.19.0rc1
v0.18.0
v0.18.0rc1
v0.17.0rc1
v0.16.0
v0.16.0rc1
v0.15.0rc1
v0.14.0
v0.14.0rc1
v0.12.0rc1
v0.11.0rc1
Labels
Clear labels
area/agent-workflow
area/backend
area/docs
area/frontend
area/tests
area/workflow
priority/P0
status/done
status/in-progress
status/needs-info
status/needs-triage
status/ready-for-agent
status/ready-for-human
status/review
status/wontfix
type/architecture
type/bug
type/docs
type/epic
type/feature
type/refactor
type/roadmap
type/test
Agent workflow area
Backend area
Documentation area
Frontend area
Testing area
General workflow area
Exceptional interrupt; not a complete priority taxonomy
Work is complete
Implementation is in progress
Blocked pending more information
Needs initial review and prioritization
Ready for an agent to claim
Ready for human review or action
Implementation is ready for review
Work will not be pursued
Architecture or system-design work
Defect or regression
Documentation work
Epic grouping related work
New behavior or capability
Internal restructuring without behavior change
Canonical repository work queue
Test coverage or test infrastructure
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: anodyine/vllm-omni#5
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
PR #4 established two things on the RTX 3090 (24 GB): the BF16 serve path tops out at two references cached (~36.7 s), and the online-FP8 path — while it frees exactly the needed ~6 GiB and served all four reference counts (4-ref 44.1-44.4 s, peak 23,522 MB) — produces structurally broken outputs (~97% transparent RGBA, near-flat grey, 7-9 dB), isolated to the Marlin-quantized DiT itself (transformer-only FP8 breaks it; encoder BF16 does not;
--ignored-layersinert). Root-causing the Marlin path is a separate lane. This issue takes the sidestep: quantize the DiT offline to int8 weight-only, serve the artifact, and get the 3-4 reference capacity without touching the suspect online-FP8 code path.Why int8 weight-only has the strong prior: the helper-system already quality-validated a torchao int8 DiT in Diffusers — Q3's blinded review placed it within label noise of the BF16 baseline (multi-model-helper-server #160) — and compressed-tensors is vLLM's most battle-tested quantized-checkpoint route. Same memory win as FP8 (~13.25 -> ~7 GiB DiT), different quantizer, different kernels.
Host and environment facts
cachyos-alexanderat192.168.0.39, useranodyine, key-based SSH from the workstation (ssh anodyine@192.168.0.39); user lingering on forsystemd-run --userunits. RTX 3090 24 GB (sm_86), driver 615.71.09, CUDA 13.4.relayview-inference.service(a vLLM worker that grabs the whole GPU at boot) is owner-controlled and its enabled state varies between sessions — checknvidia-smifirst and ask the owner if it holds the card; do not stop it yourself.~/Projects/vllm-omni-val/venvover the clone at~/Projects/vllm-omni-val/vllm-omni(origin = this mirror, upstream = GitHub; main8484d85d1). Installed: vllm 0.31.0, torch 2.13.0+cu130, transformers 5.14.1, diffusers git122b1e11, repo editable,requirements/common.txtruntime deps.~/Projects/vllm-omni-val/issue2/holdsserve.sh(server lifecycle under systemd units),probe.py(fixed-seed request matrix, STEPS=20),psnr.py(baseline comparison),fixtures.json, and per-run records underruns/. Adapt rather than rewrite; PR #4's branch carries the same kit underprobe/issue-2/.Qwen/Qwen-Image-2.1@790c9263at~/.local/state/multi-model-helper-server/state/image-service/weights— serve from the local snapshot path withHF_HUB_OFFLINE=1(the sealed cache lacksassets/qr.png, so hubrequire_allcannot complete offline).~/.local/share/multi-model-helper-server/data/evaluation/media/image/references-suite-2/. Sealed four-reference Diffusers baseline for PSNR: attempt2026-10-07T170729Z-q3-4runder~/.local/share/multi-model-helper-server/data/evaluation/media/image/attempts/(samples.json maps fixture+seed to files and digests).evaluation/media/recipes/and the quantization-recipe pattern inevaluation/media/harness/README.md).Plan
vllm serve <artifact-or-snapshot> ... --enable-cpu-offloadwith the compressed-tensors path (auto-detected or--quantization compressed-tensors), eager, single request.Acceptance Criteria
Out of scope
Directive after the int8-wo result (2026-10-08, owner-approved): worth one more bounded round — pivot from quantizer variants to kernel-path isolation.
The convergence is the finding: online-FP8 (PR #4) and offline int8-compressed-tensors (this issue, artifact exonerated at ~1% L2 by independent dequantization) both collapse in the serve path, and both route through Marlin W8A16 on sm_86. Quantizers ruled out; kernel family implicated. The stripe texture (parallel output tiles, healthy RGB) suggests a tiling/parallel-reduction bug at DiT-scale M — shapes LLM decoders never produce.
Round two, two experiments:
Hard stop: if W8A8 also produces broken structure, record the every-low-bit-path-implicated pattern and descope — capacity falls back to the helper repo's paths (multi-model-helper-server #160 cache-off tier; #164 placement). The Marlin root-cause joins #3's upstream lane, off the product critical path. Either way, update PR #4's record with the convergence: two independent quantizers, one kernel family.
Implemented in PR: #6
Verdict in brief: the int8 weight-only compressed-tensors artifact delivers the 3-4 reference capacity and speed (4-ref 46.4 s, peak 23,935 MiB, all 16 matrix requests complete) but output quality collapses in the serve kernel — structure gate FAIL 16/16, PSNR 7.1-7.5 dB. The checkpoint is verified numerically sound (round-trip ~1.1% rel-L2 vs sealed BF16; bitwise-correct loading incl. fused q/k/v), and marlin_isolate.py pins the defect to the 8-bit Marlin W8A16 path on this stack: NaN output for real and synthetic int8 weights, all layer geometries, both bf16/fp16 activations, on sm_86 where the capability query accepts uint8b128. Two serve-path fixes were required and are in the PR (quant factory compressed-tensors resolution; offline-quantized CPU-offload loading). Helper-system follow-through for multi-model-helper-server #27 is recorded in probe/issue-5/FINDINGS.md as input only.
Amendment to the 08-07 directive, given PR #6's verdict: the isolation experiment already ran and eliminated the directive's stated hypotheses — NaN occurs with synthetic int8 weights (not quantizer/scales), across all layer geometries (not an M-shape edge case), under both bf16 and fp16 activations (not a dtype mismatch). The surviving root-cause shape: the capability query accepts uint8b128 on sm_86 while the kernel itself yields NaN — a dispatch overclaim for the 8-bit Marlin W8A16 path on this architecture.
Direction therefore narrows to:
Round two (amendment response) — the decisive experiment is a YES: W8A8 int8-dynamic delivers the capacity route on one 3090.
W8A8-dynamic artifact (cutlass int8 scaled-MM, no Marlin): all 16 capacity-matrix requests structurally sound — opaque 0.947–0.988, alpha mean ≈255, healthy RGB spread; visual checks render faithful scenes (4-ref apothecary scene, 1-ref portrait). PSNR vs the sealed Diffusers baseline: 33.72 / 28.34 / 27.50 dB at 1/2/4 refs — the BF16-parity band (26–29 dB), including the first usable 4-reference quality comparison this card has produced. Walls 20.5/25.1/29.4/34.0 s per reference count — the fastest row measured (4-ref ≈ 4.3× the sealed Diffusers nocache baseline), peak 23,879 MiB.
Gate calibration honesty: round one's 0.99-opacity pass rule was my instrument calibration from the broken-vs-BF16 contrast; W8A8 outputs sit at 0.95–0.99 with alpha ~255 (soft-edge alpha, nowhere near the 0.008–0.20 broken band). The verdict rests on the raw numbers, visual checks, and PSNR; per-request metrics are recorded unedited.
Kernel verification this round: raw cutlass ops match a float32 reference at 0.17% rel-L2 across DiT geometries, and the full layer path (load → repack → apply, fused QKV included, bitwise-verified loading) matches at 0.17%. One recorded instrument lesson: an intermediate 97%-error scare was a missing ×act_scale factor in my probe's own reference, not a kernel defect.
Hard stop did not trigger. The upstream Marlin report is drafted and staged (probe/issue-5/UPSTREAM-REPORT-DRAFT.md — capability-query overclaim + NaN kernel + synthetic repro + the PR #4 FP8 convergence), ready for the #3 lane on your call. PR #4's record has the convergence comment; PR #6 carries the full round-two evidence (probe/issue-5/evidence/rtx3090-round2/ + FINDINGS.md).