Skip to content

misc: enable e2e test when push - #828

Merged
zhyncs merged 1 commit into
sgl-project:mainfrom
zhyncs:new
Jul 30, 2024
Merged

zhyncs merged 1 commit into
sgl-project:mainfrom
zhyncs:new

Conversation

@zhyncs

@zhyncs zhyncs commented Jul 30, 2024

Copy link
Copy Markdown
Contributor

Thank you for your contribution, we really appreciate it. The following instructions will help improve your pull request and make it easier to receive feedback. If there are any items you don't understand, don't worry. Just submit the pull request and ask the maintainers for help.

Motivation

Please explain the motivation behind this PR and the goal you aim to achieve with it.

Modification

Briefly describe the changes made in this PR.

Checklist

  1. Ensure pre-commit pre-commit run --all-files or other linting tools are used to fix potential lint issues.
  2. Confirm that modifications are covered by complete unit tests. If not, please add more unit tests for correctness.
  3. Modify documentation as needed, such as docstrings or example tutorials.

@zhyncs
zhyncs merged commit 377c5dc into sgl-project:main Jul 30, 2024
@zhyncs
zhyncs deleted the new branch July 30, 2024 09:26
timethink pushed a commit to timethink/sglang that referenced this pull request Mar 9, 2025
JinyanYi pushed a commit to JinyanYi/sglang that referenced this pull request Jun 23, 2026
efschu pushed a commit to efschu/htsglang that referenced this pull request Aug 23, 2026
Wave 3, stage 4 of the batched-window tree. WINDOW-QUEUE ticket W6 (strand
21a, preflight_pass=Y: 19 passed red-first with 6F/6P before the fix, 8/8
mutants killed, id-regression 75 files byte-identical with 0 new).

Two commits, base 3b2bbde -- which is already ON this line (the sgl-project#770/sgl-project#812
floor-clamp withdrawal), so this stage adds no divergence of its own:

  b546893  [sgl-project#828] The backing dial converges the BACKING, and a post is
              credited by what it delivered
  4235879  [sgl-project#828] Desk pre-flight for the batched window: the released band
              clears the gate boot_827 refused at

THE DEFECT. `runtime_set_backing_tokens` branched grow-vs-shrink on
`self.size` -- the EXPOSED id space -- instead of on the committed backing, so
a rung that should have released reported `branch=grow` and released 0. A dial
that converges the wrong quantity is not a mis-tuned dial; it is a dial
attached to the wrong shaft, and the census downstream then credits a post for
delivering nothing.

This is the same family the catalog records in section 2 under the funding
authority: a post is credited BY WHAT IT DELIVERED, not by what it was asked
for. sgl-project#770 named the posts; this makes the credit honest.

GATE. Battery test/registered/unit/{managers,planner,server_args,mem_cache},
hermetic under CUDA_VISIBLE_DEVICES="", one battery at a time.

    baseline (tip 4f2072a)   7 failed, 8585 passed, 1852 skipped, 887 s
    stage 1 (W1+W2)             7 failed, 8638 passed, 1852 skipped, 868 s
    stage 2 (W3)                7 failed, 8653 passed, 1852 skipped, 922 s
    stage 3 (W4a/W5/W4b)        7 failed, 8673 passed, 1852 skipped, 915 s
    stage 3b (sgl-project#791 stub)        0 failed, 8684 passed, 1852 skipped, 900 s
    this stage                  0 failed, 8703 passed, 1852 skipped, 931 s
    NEW failure ids             NONE

THIS IS THE FIRST STAGE GATED AGAINST A ZERO BASELINE. Since stage 3b the
line's extracted failure list is EMPTY, so "no new failure ids" here is not a
comparison against a tolerated set -- it is the whole result.

CITATION MAINTENANCE, carried in this commit because this stage is what forced
it. W6 adds 37 lines to funding_authority.py and 71 to memory_pool.py, both of
which the catalog cites by file:line, and the section-18 checker did NOT
notice: it verifies that a cited line EXISTS, not that the cited SYMBOL is on
it, so it stayed at 104 passed while solve_arming_floor moved :659 -> :694,
diagnose_floor_band :585 -> :620 and slack_above_uniform_floor :813 -> :848,
each then pointing at a comment, an `if` and a dataclass field.

A sweep of every citation this train touches found the same drift elsewhere
and all of it is corrected here, verified line by line against the files:
scheduler.py nine citations (stage 3 added 113 lines) :4684->:4795,
:4792->:4903, :4814->:4925, :4938->:5049, :4947->:5058, :4995->:5106,
:5011->:5122, :7085->:7196, :7462->:7573; phase_flip_runtime.py five,
:3838/:3839->:4040/:4041, :3881->:4083, :6275->:6487, :7128->:7353;
memory_pool.py :4978 -> :4983 with the bound assert at :5032. Untouched and
re-verified as still correct: kv_row_ownership.py, prefetch_ballot.py,
uniform_floor_scope.py, tree_congruence.py, invariant_checker.py:1175,
mamba_ckpt_utils.py:185, kv_backing_relief.py:162/:547, phase_policy.py:831.

One drift found in the sweep is NOT this train's doing and is labelled as
such: planner/placement.py:813 -> :838, in a file no stage here touches. It
drifted earlier and nothing caught it, which is the point.

The gap is now recorded in section 18.8 with the measurement that proves it,
and the interim practice it implies is applied rather than merely described:
where a file takes inserts from several tickets, the STATEMENT is cited
alongside the line (done for sgl-project#821's three cur_batch_for_debug sites).
Symbol-resolving the checker is registered as its own task.

A note on the checker being live rather than assumed, because it caught ME
while I was documenting its blind spot: writing the phrase `watchdog.py:88`
into the section-18.8 prose turned the gap note itself into a section-18
citation, and the checker went 104 passed / 1 FAILED on the spot. It scans
section 18 for anything of the shape `file.py:N`, prose included. The wording
now names the class instead of quoting a path, and the checker is back to 104
passed / 0 failed -- re-run after the edit, not assumed. So the checker is
genuinely armed for the class it covers; the gap in 18.8 is about the class it
does not.

codespell clean. No boot.
efschu pushed a commit to efschu/htsglang that referenced this pull request Aug 24, 2026
…eturn

W24's flip-sticky root. 43 of 45 binding refusals on PP0's corridor gate read
cause=phantom_capacity, every 60-75 s for 21.6 min: the allocator-cache post
promised ~309-324 MiB (memory_reserved - memory_allocated), an empty_cache()
draw delivered 0, sgl-project#828's law 2 derated the post to zero, and the next pass
re-promised the same bytes and paid for the same sync again.

sgl-project#828 made the VERDICT honest. The PROMISE stayed dishonest, and a silent
derate loop is what that costs.

ROOTED AGAINST THE LOG, and two hypotheses are closed for good:
  - stale pricing KILLED: the derate denominator takes 21 distinct values,
    drifting 320464384 -> 325639168 B. It is re-measured every pass.
  - missing release KILLED: _reclaim_cached_blocks has no production hook and
    43/43 phantom lines are tagged [reclaim figures measured this pass],
    against the one scarcity line tagged [reclaim figures never measured].
  - wrong-rank read: no positive evidence; all PP0, one device per worker.
  - fragmentation survives as the only candidate but is NOT PROVEN: the log
    carries no allocator-segment telemetry at all (inactive_split, fragment
    and segment appear zero times in 14490 lines).

So this does not assume the root, it MEASURES it. inactive_split_bytes is the
free-but-trapped remainder inside segments still in use, and empty_cache()
returns only whole free segments, so

    releasable = reserved - allocated - inactive_split

is what a draw can actually hand the driver. A raw-nonzero, releasable-zero
cache becomes an honest zero that NAMES the fragmentation, and the cause reads
scarcity rather than phantom_capacity -- nothing was promised, so nothing is
phantom. The seam then skips a sync it can prove will return nothing.

The fix is correct under every one of the four hypotheses: a cache that really
is releasable measures nonzero, draws and pays exactly as before, with law 2
still underneath as the backstop for an estimator that over-promises.

The discriminator W24 lacked is now emitted every pass -- the predicted
releasable figure printed next to what the draw actually returned. Agreement
confirms the fragmentation account; a nonzero prediction against a zero
delivery falsifies it and indicts this estimator instead.

THE ABSTENTION IS LOAD-BEARING. Under expandable_segments:True, reserved
counts a VIRTUAL extent -- measured in this tree at 36910 MiB on a 32607 MiB
card -- so the arithmetic is void. Subtracting there UNDER-reports, and an
under-report suppresses a draw that would have paid, making the flip stickier:
the precise defect this commit removes. It abstains instead, along with a
backend lacking the counter and an empty reservation, each returning the seam
to sgl-project#828 behaviour byte for byte. All three live in a pure function over a
stats mapping so they are falsifiable without a GPU.

TESTS (hermetic, CUDA_VISIBLE_DEVICES=""):
  test_honest_cache_pricing_852.py                19 passed
  test/registered/unit/managers/                3800 passed, 18 skipped,
                                                 334 subtests (740 s)
  test/registered/unit/mem_cache/               1710 passed, 1658 skipped,
                                                 361 subtests (128 s)
  ruff check + format clean

Red-both-ways proven: the census wire was red as
'releasable not found in ... cause=phantom_capacity' before wiring, and the
expandable-segments guard was red as '524288000 is not None' -- the 500 MiB
under-report -- with the guard disabled.
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.

1 participant