Repository navigation
Conversation
|
Yes, num_preluded_tokens == 4 is intended here. With D=4, prefill_chunk_size=2, and a 4-token batch budget, one WCPB prelude batch can stage both chunks. In general, it can stage up to D chunks per request, bounded by the available token budget, the WCPB window, and the remaining prompt length. max_num_seqs limits the number of distinct requests in the batch. At this point, num_prefilled_tokens remains 0 because neither chunk has completed the final recurrent depth. The assertion expecting 2 is stale for this WCPB test. Could you please update it and rerun the full eager and CUDA Graph capture/replay test in the separate PR? The current failure exits before reaching the Graph portion. Thanks, and apologies for the stale assertion : ). |
Thanks, that confirms the assertion is stale. I'll change it to 4 and rerun the full eager + CUDA Graph test in a separate PR. I'll aim to follow up tonight with the PR link and logs, and update the M7 F3 entry to reference that fix. |
1. What outcome are you trying to achieve?
Verify the correctness of our M7 sampling/RNG refactor on GPU.
2. What is the highest-leverage variable for that outcome?
The correctness of M7 sampling and RNG behavior on real GPUs.
3. How will this work move that variable rather than create busywork?
Run CUDA tests through the interfaces to validate fixed-seed behavior, RNG
progression, preemption/restoration and cleanup, and retain reproducible
results.
4. Who is the customer or user, and what do they actually need?
Maintainers and future developers need reproducible evidence to assess
refactor correctness and validation coverage.
PR necessity and bugfix evidence
A PR is needed because the earlier M7 refactoring work lacked GPU validation.
This test-only follow-up to #80 adds reusable CUDA regression coverage and
records the results.
Production code is unchanged. Failures found in the wider selection are
documented below for separate investigation. The failing test functions,
including their decorators and bodies, are unchanged by this PR. Other edits in
these files only add tests, device-parameterize existing tests, or adjust shared
test helpers; they do not change the failing functions.
Purpose
Validate CUDA sampling distributions, request-local RNG advancement and
cleanup, ordinary asynchronous random sampling, fixed-seed
preemption/restoration, BF16 mixed recurrent execution, and worker/request-ID
lifetimes.
The tests follow the loop/stage architecture and wavefront chunked-prefill
scheduling. Existing async greedy-speculation and CUDA Graph regressions were
also exercised.
Async speculative temperature/top-k/top-p sampling remains a separate follow-up
PR. This PR does not claim full M7 3/3 completion while FA4 and PD remain
unverified.
What changed
66920da(fb8b8af..989a20b).vllm_rlt/change; no docs, defaults or production behaviorchange.
Changed files:
tests/test_sampler.pytests/test_engine.pytests/test_speculative.pytests/test_stage_engine.pytests/test_async_pipeline.pytests/test_prefix_growth.pytests/test_split_prefill.pytests/test_mixed_execution.pyPerformance and model-quality analysis are not applicable: this PR changes tests
only and does not alter a production execution path.
Test Plan
vllm-rlt Version / Commit:
989a20bde9856a9914745b3a0485c635f6057d6d66920da9c1880227707b5d65c6d88bfb4a525ad9Source checksums matched before and after testing.
Evidence and checksum
Download the ZIP provided as a PR attachment:
m7-validation-989a20b-public.zip
SHA256:
It contains environment/dependency records, JUnit XML, original failure logs,
exact commands and exit codes, baseline diagnostics, the 43-case selection,
unchanged-function comparisons, and complete CPU/pre-commit output.
Reproduction commands and 43-case selection
Run from the candidate repository checkout. The reserved GPU value used for
these runs is recorded in
environment.json; export it before GPU commands:Verify and extract the evidence ZIP:
43-case selection:
m7-gpu-nodeids.txtlists the exact GPU node IDsbelonging to added/modified top-level test functions. Functions were identified
by comparing complete function ASTs, including decorators, against baseline
66920da; selection was not based on pass/fail outcomes.m7-case-classification.jsonrecords the original JUnit statuses. The includedselect_m7_gpu_cases.pycan regenerate the list from a checkout containing bothcommits.
Run the exact 43 nodes directly through pytest:
Reproduce the original wider GPU selections:
FILTERis a name-based workaround, not a completeness claim:packed_metadata_supports_query_lengths_and_per_request_depthsis anFA4-only test whose name does not contain FA4.
test_prefix_growth.pyalso have no FA4 intheir names; they escaped this filter and are the F1/F2 failures below.
Reproduce complete CPU regression and pre-commit:
Equivalent standalone full CPU selection:
OMP_NUM_THREADS=1 python -m pytest \ -m 'not gpu' -q --tb=short -raTest Result
The 43 M7 cases are a subset of the wider GPU selection. The CUDA sampler smoke
is also a subset and is not additive.
The complete CPU result was produced by the pre-commit pytest hook, not a second
independent run. Its skips concern unavailable optional tokenizers, checkpoints
and
lm_eval; exact reasons are retained in the evidence bundle.Known wider-selection failures and unresolved flake
All three failing test functions, including decorators and bodies, are unchanged
between baseline and candidate. Production files,
tests/helpers.pyandtests/conftest.pyare also unchanged. Seefailure-body-comparison.json.Of the failures rerun on the baseline, only F3 reproduced. F1/F2 were not rerun
because the unchanged capability guard rejects SM120 before kernel execution;
F4 passed baseline diagnostics. Unchanged test bodies alone do not establish
F4's root cause.
Exact failure node IDs and triage
F1
F2
F3
F4
num_preluded_tokens == 4.2.66920da, in the eager run before its Graph run.drain()exceeds its 500-iteration limit.F1/F2 fail inside the intentional capability guard in
vllm_rlt/kernels/flash_attention.py::select_version, before any kernel runs.The unmodified baseline reaches the same guard on SM120.
F4 is not attributed to this PR: it did not reproduce on baseline diagnostics or
a warm candidate rerun. The first failure is retained, and we propose a separate
wall-clock/diagnostic fix or flake issue rather than treating the rerun as a fix.
The extended PD case skipped because NIXL was missing. This single-GPU host also
cannot satisfy its two-GPU requirement.
FA4, PD/NIXL, full-model quality and historical sampling-cost/performance
qualification remain unverified.
Review and additional coverage
@LyxWxj, could you confirm the WCPB staging expectation for F3?
@bjf-frz, could you help triage F4 and confirm the intended capability-gating
policy for F1/F2?
Could anyone help run the applicable subsets on supported paged-FA4 hardware or
a same-host two-GPU NIXL setup? Please advise whether these are required before
marking M7 3/3 ready.
Decisions needed
with FA4 and PD/NIXL listed as unverified?
num_preluded_tokens == 4the intended WCPB contract for F3?If yes, we will fix the stale assertion in a separate PR and rerun the Graph
branch.
capability-gated in tests rather than in production?
for FA4 or a same-host two-GPU NIXL setup?
This remains a draft while the remaining qualification requirements are
clarified.