Repository navigation
feat(vllm): support frontend image decoding with EPD - #12004
Conversation
This comment has been minimized.
This comment has been minimized.
a1bd869 to
da82ede
Compare
WalkthroughChangesFrontend-decoded image processing
Estimated code review effort: 4 (Complex) | ~45 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
components/src/dynamo/vllm/multimodal_utils/prefill_worker_utils.py (1)
292-292: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse lazy logger formatting.
Line 292 formats the message before
logger.debug()checks the log level. Pass the format string and values separately.Proposed fix
- logger.debug(f"[{request_id}] Cache hit for image index {idx}") + logger.debug("[%s] Cache hit for image index %d", request_id, idx)As per coding guidelines, use lazy formatting for log messages.
🤖 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 `@components/src/dynamo/vllm/multimodal_utils/prefill_worker_utils.py` at line 292, Update the debug log in the cache-hit path around the image-index handling to use logger lazy formatting: pass the request ID and index as separate arguments alongside a format string, rather than interpolating them in the f-string before logger.debug executes.Sources: Coding guidelines, Path instructions
🤖 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 `@tests/serve/multimodal_profiles/vllm.py`:
- Around line 250-264: Add a measured profiled_vram_gib value to the epd
TopologyConfig after profiling it with tests/utils/profile_pytest.py, while
retaining the existing requested_vllm_kv_cache_bytes marker. If the measured
peak exceeds 24 GiB, move the frontend-decoding MmCase to a CI tier that
supports the requirement, and ensure the topology remains compliant with both
VRAM and framework-specific KV markers.
---
Nitpick comments:
In `@components/src/dynamo/vllm/multimodal_utils/prefill_worker_utils.py`:
- Line 292: Update the debug log in the cache-hit path around the image-index
handling to use logger lazy formatting: pass the request ID and index as
separate arguments alongside a format string, rather than interpolating them in
the f-string before logger.debug executes.
🪄 Autofix
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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 9b1cf578-b52b-44b6-b28c-197fae35bd6f
📒 Files selected for processing (11)
components/src/dynamo/vllm/multimodal_handlers/encode_worker_handler.pycomponents/src/dynamo/vllm/multimodal_utils/prefill_worker_utils.pycomponents/src/dynamo/vllm/multimodal_utils/protocol.pycomponents/src/dynamo/vllm/multimodal_utils/request_processor.pycomponents/src/dynamo/vllm/tests/multimodal_utils/test_vllm_embedding_loader.pycomponents/src/dynamo/vllm/tests/multimodal_utils/test_vllm_request_processor.pycomponents/src/dynamo/vllm/tests/test_vllm_encode_worker_decoded.pycomponents/src/dynamo/vllm/worker_factory.pyexamples/backends/vllm/launch/disagg_multimodal_e_pd.shexamples/backends/vllm/launch/disagg_multimodal_epd.shtests/serve/multimodal_profiles/vllm.py
|
/ok to test 1a48ec9 |
This comment has been minimized.
This comment has been minimized.
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Zhuangcheng(Jesse) Gu <zcgu@connect.hku.hk>
Signed-off-by: Ryan McCormick <rmccormick@nvidia.com>
1a48ec9 to
1635ddb
Compare
|
/ok to test 1635ddb |
Summary
Enable opt-in frontend image decoding for vLLM multimodal E/PD and E/P/D deployments. The existing backend-decoding path remains the default.
Prefill/PD forwards only the decoded-image descriptor. On a cache miss, the Encode worker reads RGB pixels directly from the frontend-owned buffer with one NIXL transfer; pixels are not relayed through Prefill/PD.
NIXL for decoded pixels transfers only ONCE from frontend to Encoder worker on EC miss.
sequenceDiagram participant F as Frontend participant P as Prefill / PD participant E as Encode F->>F: Decode and register RGB F->>P: Request + NIXL descriptor alt Prefill cache hit P->>P: Reuse embeddings else Prefill cache miss P->>E: Forward descriptor only alt Encode cache miss F-->>E: RGB via one direct NIXL transfer E->>E: Vision encode end E-->>P: Embeddings end P->>P: Prefill and continue to DecodeDetails
content_hashfor Prefill and Encode embedding-cache keys.--frontend-decodingsupport to the E/PD and E/P/D launchers.Where Should the Reviewer Start?
components/src/dynamo/vllm/multimodal_utils/request_processor.pycomponents/src/dynamo/vllm/multimodal_utils/prefill_worker_utils.pycomponents/src/dynamo/vllm/multimodal_handlers/encode_worker_handler.pyexamples/backends/vllm/launch/disagg_multimodal_e_pd.shexamples/backends/vllm/launch/disagg_multimodal_epd.shValidation
12 passedGreen; the second request hit the embedding cache.mm_epd_qwen3-vl-2b_b64_frontend_decodingpassed in 91.71 seconds and returnedgreen.Related Issues
Summary by CodeRabbit
--frontend-decodingoptions to multimodal launch scripts.