Probe whether the Qwen-Image conditioning KV can spill to host DRAM on the RTX 3090 #2
Open
opened 2026-10-07 21:02:38 -04:00 by anodyine
·
2 comments
ISSUE-2
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.
Depends on
#1 Validate Qwen-Image-2.1 serving on Ampere (RTX 3090) and report upstream
anodyine/vllm-omni
Reference: anodyine/vllm-omni#2
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.
Depends on #1 (validated runtime on sm_86).
Context
The helper-system's four-reference work measured that Diffusers retains the Qwen-Image conditioning KV (~2.8 GiB per reference cached) in VRAM with no spill path, so four references fit only with the cache off, at a 1.7-2.2x latency tax (multi-model-helper-server #160;
docs/speculative/research/qwen-image-kv-cache-and-reference-capacity.md). vLLM-Omni's merged Qwen-Image pipeline implements its own conditioning KV cache (their review history names a "KV-cache aliasing bug in decode graphs" and "mixed-phase KV assembly") and natively accepts up to four condition images, but #1's validation exercised only text-to-image — the reference path is functionally untested on our stack, and whether that cache is paged, swappable to host DRAM, or simply leaner than Diffusers' retention is unverified anywhere. If any of those hold, multi-reference compositions could run at cached speed on cards where Diffusers cannot fit them.Host and environment facts
RTX 3090 host (24 GB leg):
cachyos-alexanderat192.168.0.39, useranodyine, key-based SSH from the workstation (ssh anodyine@192.168.0.39); user lingering on forsystemd-run --userunits.relayview-inference.service(vLLM worker that grabs the whole GPU) 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 (0.30.0 fails at import on this commit), torch 2.13.0+cu130, transformers 5.14.1, diffusers git122b1e11, repo editable, plusrequirements/common.txtruntime/test deps (diffusers kept at the git pin).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/. Diffusers four-reference baseline for PSNR: attempt2026-10-07T170729Z-q3-4runder.../image/attempts/(samples.json maps fixture+seed to files).RTX 5080 host (16 GB leg; powered on for multi-model-helper-server #164):
cachyos-9900x-o11dat192.168.0.40, useranodyine, key-based SSH from the workstation. Often powered off; the owner starts it. 30.45 GiB non-expandable host RAM, zram swap at high swappiness./usr/bin/python3.13exists there; vllm 0.31.0; torch cu13x wheel; transformers 5.14.1; diffusers git122b1e11; repo editable;requirements/common.txtminus the diffusers pin). Clone into~/Projects/vllm-omni-val/with origin = this mirror, upstream = GitHub.references-suite-2set, and the Q1d baseline outputs under the identical roots (~/.local/state/multi-model-helper-server/state/image-service/weights,~/.local/share/multi-model-helper-server/data/evaluation/media/image/). Verify with the helper repo'smedia-eval cache-checkandpython3 -m evaluation.media.image checkfrom a checkout at merged main.Both legs: eager mode, single request at a time, fixed seeds; record peak VRAM (
nvidia-smiseries), wall time, and server-reported metrics. Nothing posts upstream without owner review.Scope
Two distinct questions, in order, on both cards:
--swap-space, memory-utilization, diffusion-specific options).2026-10-07T170729Z-q3-4r, same references, 20 steps).Expected readings going in: on the 3090 (24 GB), the question is whether four references can run cached at all; on the 5080 (16 GB), whether even two or three fit — its Diffusers ceiling is one reference (B2g). No code changes; a probe only.
Acceptance Criteria
Out of scope
Implemented in PR: #4
Verdicts (per the issue's three-world taxonomy)
RTX 3090 (24 GB):
not-built. No host-DRAM spill path for the conditioning KV exists in the pipeline (code-verified and confirmed by exhausting every reachable knob). Corollary findings:--enable-cpu-offloadthe served reference ceiling is two condition images, conditioning cache ON: 1-ref 34.2 s, 2-ref 36.7 s, peak 24,015 MiB. 4-ref OOMs mid-request.qwen_image_21_transformer.py:293).expandable_segments:Trueremoves fragmentation entirely; 4-ref still OOMs with 22.29 GiB genuinely allocated. Layerwise offload is strictly counterproductive (1-ref OOMs). Offline fp8_v (Omni(extras=...)) — the one knob that reaches the cache — still OOMs: cache quantization is an order of magnitude too small to matter.170729Z-q3-4rpair samples. The 4-ref PSNR cell is capacity-blocked on every flag set — recorded as such.extras.prefix_kv_cache_dtyperoute does not reach the served transformer on8484d85d(byte-identical outputs with/without; drop verified atbuild_diffusion_config). The offlineOmni(extras=…)engine kwarg works.RTX 5080 (16 GB):
not-built(stronger — server cannot initialize). Six init attempts (default, cpu-offload, +layerwise, fp8, fp8+expandable, int8) all OOM at the same 96 MiB late-init allocation:init_parameters(vllm_omni/diffusion/models/utils.py:159-168) materializes the unquantized parameter skeleton on-device before quantization or offload engage. The reference path is unreachable on this card with this stack; the B-series torchao-int8 Diffusers stack (1-ref ceiling) remains its only image backend.Cache location (scope item 2)
Created per request at
pipeline_qwen_image_21.py:1204-1207, written/read atqwen_image_21_transformer.py:538-598, batch assembly atpipeline_qwen_image_21.py:1218-1325. Allocator: plain GPUtorch.Tensorclones (DENSE_LEGACY, not paged; FP8-storage optional).--swap-space/--cpu-offload-gbdo not exist in this fork; weight-offload flags never move KV tensors. Contribution seam for a spill path:qwen_image_21_transformer.py:541-598orpipeline_qwen_image_21.py:1218-1325— but a spill alone would not change either verdict (the 3090 blocks on the resident working set, the 5080 on init).Helper-system follow-through (input to multi-model-helper-server #27 and #164 — not implemented here)
diffusion/models/utils.py:159-168); topology plans should keep B-series Diffusers on that card.Full matrices, reproducibility commands, and per-run records:
probe/issue-2/FINDINGS.mdin PR #4. No code changes, no upstream posts.Review follow-up (PR #4, commit
4f5f99d8): the fp8 serve row is now in the matrix.--enable-cpu-offload --quantization fp8serves all of 1/2/3/4 references on the 3090 (4-ref 44.1–44.4 s, server peak 23,522 MB, nvidia-smi max 23,983 MiB; 3-ref was added as a new fixture and measured too). Marlin W8A16 is faster than BF16 (3.3× the Diffusers nocache baseline at 4 refs).img_mlp-excluded, and transformer-only fp8 — the last pins the culprit on the Marlin-quantized DiT). BF16 on identical requests: 100% opaque, 26–29 dB.not-built(fp8 unlocks capacity but ships broken output; upstream order is fp8-output correctness before capacity), 5080not-built(init-blocked).Details in
probe/issue-2/FINDINGS.md§ "FP8 quality collapse"; records inevidence/rtx3090/runs-summary.jsonandpsnr-fp8-rows.json.