Skip to content

fix(plugin): start DeepSeek-V4.1 on the vLLM plugin again after #3136 - #3189

Merged
valarLip merged 3 commits into
mainfrom
perzhang/fix-v41-plugin-h2d-group-members
Nov 11, 2026
Merged

valarLip merged 3 commits into
mainfrom
perzhang/fix-v41-plugin-h2d-group-members

Conversation

@PerryZhang01

@PerryZhang01 PerryZhang01 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Fixes a regression from #3136 (bf65756). Ready for review. No blocking issues.

Since #3136, every DeepSeek-V4.1-Flash serve on the vLLM plugin fails before serving. #3136 changed two native contracts that the plugin's V4.1 path depends on; the plugin was not updated for either. One commit fixes each; native code is unchanged.

Dev record

Named result

Plugin CI V4.1 cells, local repro at ee37864 (74d8ea9 adds a docstring only): DSpark TP4 0.9287 (threshold 0.91, MTP acceptance passes), eager TP4 0.9257. LMCache two-pass through the MP server: 0.9257 then 0.9272, with 84.96% of the second pass's prompt tokens served by the tier.

Gates

  • tests/test_vllm_plugin_h2d_group_members.py: passes; on main's source it flags the read.
  • ruff, black clean.
Evidence

On main @ 1676569, worker traceback in profile_run:

atom/plugin/vllm/v41_core_overrides.py, in publish
    for name, names in self.h2d_group_members.items():
AttributeError: 'function' object has no attribute 'items'

With only the first commit, eager passes and DSpark fails in the warmup forward of capture:

atom/model_ops/attentions/deepseek_v41/cache.py, in begin_step
ValueError: Tentative verification needs a prefix and sufficient window slack

The test reads the plugin source because the module cannot be imported in the non-GPU unit run.

On the earlier base (main @ 1676569) the same two commits scored DSpark 0.9151 and 0.9166, eager 0.9257, LMCache 0.9310 then 0.9287.

🤖 Generated with Claude Code

zgplvyou and others added 2 commits November 10, 2026 21:25
#3136 made AttentionMetadataBuilder.h2d_group_members a method, but the
V4.1 publication wrapper in the plugin still read it as a dict, so every
DeepSeek-V4.1 serve on the vLLM plugin failed in profile_run:

    v41_core_overrides.py:87, in publish
        for name, names in self.h2d_group_members.items():
    AttributeError: 'function' object has no attribute 'items'

The wrapper only needs the groups V4.1 publishes by name outside TBO
(step_metadata from the builder, the producer groups from the buffers),
which the method returns.

The new test checks the plugin source, since the non-GPU unit run cannot
import the module that broke.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#3136 changed native `_prepare_step` from
`verifying = tentative and not batch.is_dummy_run and bool(spans)` to
`verifying = tentative and bool(spans)`: native capture batches are not
dummies. The plugin's warmup before a DSpark capture is: its dummy batch
is fabricated on private scratch with every request at position 0, and
`_v41_prepare_kwargs` marks a uniform verify-width batch tentative so the
plan keeps the verify write grid. `begin_step` now refuses that step and
every DeepSeek-V4.1 DSpark serve on the plugin fails at capture:

    ValueError: Tentative verification needs a prefix and sufficient
    window slack

Begin that one step as non-verifying, as before #3136; the plan still
gets the verify write grid from `tentative`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ CI Guide

Runs automatically on every eligible PR before approval:

  • ✅ Pre Checkin: Black, Ruff, catalog schema validation, non-GPU unit tests

Heavy model tests:

  • ✅ Run after the PR is approved and Pre Checkin passes
  • ✅ Run immediately when an approval review is submitted
  • ✅ Can be requested before approval with labels
Label Tests
ci:full Run all heavy PR model tests: native ATOM, vLLM, and SGLang
ci:atom Run native ATOM model accuracy tests
ci:vllm Run ATOM vLLM OOT model accuracy tests
ci:sglang Run ATOM SGLang model accuracy tests

Heavy jobs are skipped when the PR is not approved and no matching ci:* label is present.
Add labels via the sidebar or gh pr edit 3189 --add-label <label>

@valar-cop valar-cop 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.

some changes needed..

DeepSeek-V4.1-Flash DSpark and eager TP4 plugin-cell results on ee37864?

ci green.

)
with (
_unverified_steps(cache)
if tentative and batch.is_dummy_run

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

forcing tentative=False also makes the verify-width dummy a prefill step (prefill ffn instead of decode_ffn), intended? if so please say it in the docstring..

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Intended; it ran this way before #3136 too. Dummies only feed eager forwards whose output is discarded (capture warmups, dummy runs before the pool binds). Captured batches (_v41_capture_batch, _v41_profile_capture_batch) are not dummies, start a full window in and stay verifying, so the graphs record decode_ffn. Docstring updated in 74d8ea9.

@PerryZhang01

Copy link
Copy Markdown
Contributor Author

Rerun at ee37864 (rebased onto main @ 0189b35): DSpark TP4 0.9287 (MTP acceptance passes), eager TP4 0.9257, LMCache MP two-pass 0.9257 then 0.9272 with 84.96% from the tier. Body updated.

Review on #3189: forcing the dummy's step to non-verifying also makes it
a prefill step (`BatchStep.decode`), so it runs the prefill FFN rather
than `decode_ffn`. That is how it ran before #3136 and is intended: dummy
batches only feed eager forwards whose output is discarded, while the
batches captures record are not dummies and stay verifying. Docstring
only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PerryZhang01

Copy link
Copy Markdown
Contributor Author

Round 2 pushed 74d8ea9 (docstring only, per the inline review). Results at ee37864: DSpark TP4 0.9287 (MTP acceptance passes), eager TP4 0.9257, LMCache MP two-pass 0.9257 then 0.9272 with 84.96% from the tier. @valar-cop

@valar-cop

Copy link
Copy Markdown

@valarLip
valarLip merged commit 99aa67e into main Nov 11, 2026
43 of 44 checks passed
@valarLip
valarLip deleted the perzhang/fix-v41-plugin-h2d-group-members branch November 11, 2026 13:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants