Conversation
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: jiangkuaixue123 <jiangxiaozhou111@163.com>
Contributor
|
Documentation preview: https://vllm--56786.org.readthedocs.build/en/56786/ |
jiangkuaixue123
marked this pull request as ready for review
September 14, 2026 08:16
Contributor
Author
|
✅ @jiangkuaixue123, CI is now available for this PR.
|
gty111
reviewed
Sep 14, 2026
| "media_io_kwargs", | ||
| "priority", | ||
| "session_id", | ||
| ): |
Collaborator
There was a problem hiding this comment.
Could we also preserve the encoder-reported hash when forwarding NIXL handles below? With non-default processing kwargs, the consumer looks up the derived hash, but the handle is still keyed by the original UUID, so no remote load is started. Mooncake's ec_items already uses the derived hash.
Suggested change in fanout_encoder_primer:
- ec_params[item_uuids.get(idx, ec_mm_hash)] = reported
+ ec_params[ec_mm_hash] = reportedPreserve the main merge and address the NIXL handle hash review. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: jiangkuaixue123 <jiangxiaozhou111@163.com>
jiangkuaixue123
force-pushed
the
codex/fix-epd-encoder-media-options
branch
from
September 14, 2026 08:52
d98c9b2 to
0784c83
Compare
gty111
approved these changes
Sep 14, 2026
Isotr0py
enabled auto-merge (squash)
September 14, 2026 09:04
Member
|
/ci run |
|
✅ Triggered Buildkite CI #88773 for commit |
Shreya-gaur
pushed a commit
to Shreya-gaur/vllm_private
that referenced
this pull request
Sep 14, 2026
…llm-project#56786) Signed-off-by: jiangkuaixue123 <jiangxiaozhou111@163.com>
jiaran-king
added a commit
to jiaran-king/vllm
that referenced
this pull request
Sep 15, 2026
Merge upstream main at 3192898. Include the EPD proxy serialization optimization (vllm-project#56657), JSON-array multimodal metadata (vllm-project#56090), and media processing options forwarding (vllm-project#56786). Git merged the overlapping Mooncake KV worker and tests without conflicts; no manual code adjustments were needed. Validation: 61 EC/cache/runner/proxy CPU tests and 171 Mooncake KV Store worker CPU tests passed. PR-file pre-commit, including mypy 3.10, passed. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Zhou ziheng <jiaranran2@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
The EPD proxy drops per-request media processing options when constructing encoder primer requests. An encoder can therefore use the default image size while PD applies the requested override, producing incompatible embeddings and placeholders. With Qwen3.5-35B-A3B, the pre-fix proxy reproduced an HTTP 500 and
Attempted to assign 54 = 54 multimodal tokens to 475 placeholders.Forward
mm_processor_kwargs,media_io_kwargs,priority, andsession_idto each encoder request when present. Preserve the encoder-reported hash as the key for connector handles so NIXL consumers can find handles after processing options derive a new hash. Extend the existing HTTP round-trip test to cover requests with and without these options, derived encoder hashes, streaming, optional prefill, and decode retries.Related to #52409 (not closing the umbrella tracker).
Duplicate-work checks: reviewed #52409 and its comments, searched open PRs referencing it and EPD/media-processing keywords, and inspected related changes. #50164 and #55842 address the Rust frontend; #56242 addresses shared encoder output reuse; #54176 adds dynamic proxy registration/routing. None implements this encoder-primer field forwarding fix. #56657, which introduced the existing HTTP round-trip coverage, is already merged.
Test Plan
Real-model setup: 2 × H20-3e; Qwen3.5-35B-A3B checkpoint revision
59d61f3ce65a6d9863b86d2e96597125219dc754; sequential single-instance baseline and 1E + 1PD with ECMooncakeConnector. Logs confirm RDMA (RoCE/iWARP). Both deployments use TP=1, eager mode, CPU media preprocessing, and disabled prefix caching.Send the same repository image (
tests/multimodal/assets/rgba.png, 800×600 RGBA), prompt, and settings to both endpoints:temperature=0,seed=42,max_tokens=128,chat_template_kwargs={"enable_thinking":false}. Prompt: “Describe the objects and their colors in this image in one short sentence.” Non-default processing options:{ "mm_processor_kwargs": { "size": {"shortest_edge": 16384, "longest_edge": 65536} }, "media_io_kwargs": { "image": {"rgba_background_color": [0, 0, 0]} } }For the negative control, run the pre-fix
d5051840e0^proxy from an external copy against the same E/PD servers and send the identical non-default request. The checked-out engine code remains unchanged.Test Result
pytest-asyncio; installing the repository-pinnedpytest-asyncio==1.4.0resolved that test-environment issue. The initial local run with repository-wide fixtures could not start because PyTorch was absent.d5051840e065f36f535913076065147b383ce464:The fixed EPD response message and complete
usageobject exactly match their baseline counterparts in both cases. Shared non-default output:The negative control logs show encoder metadata
image_grid_thw=[1,38,50]versus PD's processed grid[1,12,18], followed by:This is a targeted one-image serving regression check, not a broad accuracy benchmark.
priorityandsession_idforwarding are covered by the HTTP unit test, not separately by real-model requests. The existing precompiled environment was sufficient; its installed version label remains0.1.dev20522+g9a855442d, while editable Python source was the tested PR commit. No vLLM/precompiled reinstall was performed.Full requests, responses, process commands, and logs are retained on the test host under
/home/david_cwq/jcz/runs/epd-media-real-2982.AI assistance (OpenAI Codex) was used to prepare the change, run validation, and write this description.
NIXL handle hash regression validation
The amended revision preserves
ec_params[ec_mm_hash]rather than re-keying handles by the original UUID. The existing HTTP backend fixture now returns a distinct encoder hash when processing kwargs are supplied; assertions verify that the handle retains this key after forwarding and retries. The retry-isolation test also checks the exact reported hash key.With the strengthened tests and the old handle assignment: 5 failed, 11 passed. With the fix: 16 passed. All applicable pre-commit hooks passed.
--confcutdirskips unrelated repository-wide model fixtures for this standalone HTTP proxy suite.The real-model Mooncake results above were obtained on the explicitly recorded earlier commit; the NIXL hash follow-up has HTTP regression coverage, not a new NIXL real-model run.
Remote confirmation on amended commit
0784c83c1c6b24422c723408e13e5bf70cd662fe: after server-sidegit pull --ff-only, the normal pytest command above (without--confcutdir) also completed with 16 passed on the H20 allocation.