chore: bump v0.2.12 - #1048
Merged
Merged
chore: bump v0.2.12#1048
Conversation
zhyncs
marked this pull request as draft
August 12, 2024 06:28
zhyncs
marked this pull request as ready for review
August 12, 2024 09:51
merrymercy
approved these changes
Aug 12, 2024
timethink
pushed a commit
to timethink/sglang
that referenced
this pull request
Mar 9, 2025
efschu
pushed a commit
to efschu/htsglang
that referenced
this pull request
Aug 31, 2026
…erted with the architecture BOOT 15 CRASHED AT 10:59:42, all three schedulers, and the cause is the sgl-project#1046 cut -- reported as mine, not as a pre-existing condition. sgl-project#968 LOAD-BACK EXTENT UNREACHABLE for rid=c9d14e69...: PP0 published an extent of 4618 token(s) and this rank's load-back yielded only 0 1448 times on one rid, refusing the forwarded schedule on every rank every pass, until the ring wedged (sgl-project#789 PROXY READINESS TIMEOUT) and the schedulers died. ROOT: sgl-project#1042's "a hitless match must never clear" was CORRECT while the extent was consumed A LAP LATER by the delivery row -- the fact had to outlive the match that made it. sgl-project#1046 moved consumption into the SAME match and I carried the old rule across unchanged. The extent then outlived its own validity: rid c9d14e69 kept extent=4618 through a readmit whose match read `host_hit=0`, and the clamp demanded 4618 from a tree that could serve 0. THE LESSON IS THE LIFECYCLE LAW ITSELF: a table is valid for ONE architecture. It must be RE-DERIVED when the consumer moves, never inherited. I built the table, then broke it by moving the consumer without re-deriving it. TWO FIXES, both following from the same inversion: 1. A hitless match now CLEARS (`hitless_clear`, was `hitless_noop`). Under local consumption the extent is only valid for the match that produced it. 2. `_applied < _lb_extent` is no longer a PPScheduleRefused. That raise existed because `_lb_extent` was PP0's PUBLISHED number, so a rank that could not reach it would diverge from peers who could. Since sgl-project#1046 the extent is this rank's own, so a shortfall means only that this rank's stamp went stale -- local staleness, not divergence. It now takes what its own tree can serve and says so (`sgl-project#1048 EXTENT STALE`), which is uniform because every rank re-derives from its own tree. Leaving it a group refusal is what turned a stale number into a ring wedge. ALSO REPORTED: the boot-15 reproducibility run is CONFOUNDED, not negative. Two cell runs landed on a server that was dying and then dead (deadman CRASH 10:59:47); the repro window's `sgl-project#988 genuine=0` measures the death, not the mechanism. It is not evidence either way and is not counted as such. check_1042 updated to pin the INVERTED rule and re-run green; ruff clean apart from pre-existing E402.
efschu
pushed a commit
to efschu/htsglang
that referenced
this pull request
Aug 31, 2026
…fork turns on: told prefix vs local Boot 27 died because two ranks admitted the same pass at different widths (PP0 extend=4096, PP1 extend=2596; same slot, same fwd_ct, same rids; exactly one divergent (slot,fwd_ct) pair in the whole boot). The fix form is a real value fork and BOTH arms already killed a boot: per-rank refusal on an uncoverable told value -- boot 15 (sgl-project#1048): PP0 published extent 4618, a rank yielded 0, 1448 refusals on one rid until the ring wedged and the schedulers died. sgl-project#1048's own fix deleted the raise. rank-local derivation -- boot 27, above. So this commit changes NOTHING and only sizes the open quantity: how often does PP0's published prefix exceed what a peer can cover, and is it concentrated at flip boundaries? The row already arrives and is already relayed verbatim (632ba36); sgl-project#1046 removed only its consumer. The receive point therefore stashes the told prefixes into a dict that NOTHING but the census reads. IT MUST NEVER WRITE _pp_admission_incoming_effective. That field is the armed predicate of the clamp in _get_new_batch_prefill_raw; populating it would arm PP0-published widths together with the refusal that killed boot 15. A separate dict cannot. The matched check is an AST scan proving the new function writes only _1058_* attributes, plus a census that the armed predicate still has exactly its 4 None/{} writers -- py_compile is structurally blind to this failure class and would have passed either way. DENOMINATOR LAW BUILT IN, not remembered: five counters, and the ABSENT case is one of them. A census counting only comparisons would report '0 overshoots' identically whether PP0 never overshot or no told value ever arrived. The census prints all five on a fixed cadence, and the per-event line is rate limited with its occurrence number. Desk: py_compile green, AST matched check passed, import smoke binds the method, ruff clean on the added lines (the file's 105 findings are all pre-existing and untouched). Behaviour: none -- the caller does not read a return value and the clamp predicate is unchanged. Boot 28 is a MEASUREMENT boot and may die at the known blocker; the harvest is this distribution up to and including the death. Analysis: DESIGN_968_PP0_AUTHORITATIVE_STATIC_HALF.md 5c-CORRECTION.
efschu
pushed a commit
to efschu/htsglang
that referenced
this pull request
Aug 31, 2026
…our ways it dies are tests The convergence proof established the one place: get_next_batch_to_run + admission run as a COPY on every rank (TP proven by py-spy on a live PP1, PP by scheduler_pp_mixin.py:4402 plus metal #969N ADMIT on PP0 and PP1 in the same pass), and 14 of 16 rank-divergence blockers are one divergent INPUT into it. This removes the divergence at the OUTPUT instead of chasing inputs. WHERE CONGRUENCE IS ACTUALLY LOST, sharpened this session: pp_chunked_local_match argues the geometry is 'CONGRUENT BY CONSTRUCTION' because every rank advances a chunked request through the same add_chunked_req sequence. Sound in phase -- and no coverage at a POST-CUTOVER RE-ADMISSION, where prefix_indices is reseeded from each rank's OWN HiCache hit (schedule_batch.py:1758). Boots 26 and 27 both died within seconds of a cutover. That is the hole. THE RULE: told geometry is the DECISION and is rank-uniform; whether a rank reads its prefix bytes or RECOMPUTES them is EXECUTION and is rank-local. A rank holding less than it was told does more work; it does not present a different batch. NO REFUSAL AND NO VOID EXIST IN THIS MODULE, structurally rather than by discipline -- both were tried and both killed a boot (boot 15/sgl-project#1048: 1448 refusals on one rid until the ring wedged, and sgl-project#1048's own fix deleted that raise; sgl-project#995 v1: 175 refusals, dead window). An overshoot is made HARMLESS instead of impossible, which is also why no coverage feed is needed: the ordered Arm A wanted a MIN over per-rank coverage facts returned on the lap, and those never come home -- observed_local has exactly ONE writer, the dataclass default, because reconcile_pp_admission_decision has 0 call sites and is deliberately dark. Recompute buys the same uniformity at the standing sgl-project#939 one-chunk price without lighting that second mechanism. Absent fact = no adoption, never a local substitute: an older sender, a stand-in or a pass PP0 did not name is bit-for-bit the old behaviour. EVIDENCE -- 12 tests, red-first on boot 27 verbatim (told 4094/4096 against local prefixes 0 / 2596 / 4094 / 13376), and the four danger directions of this seam as executable assertions. All four mutants anchor-asserted and KILLED: 1 refusal-without-a-way-onward (boot-15 shape) -> 7 failed 2 apply-skipped (the tree's present state, i.e. boot 27) -> 4 failed 3 per-rank re-derivation of the uniform decision -> 3 failed 4 shortfall changes the group-visible geometry -> 6 failed ruff clean. Behaviour: none yet -- nothing calls this module. NEXT SLICE, named so it is not re-derived: producer (PP0 stamps its admitted (prefix, extend) into the row it already sends -- _pp_admission_last_built_decision, scheduler.py:10828), carrier (live and relayed verbatim already), consumer (stash at the receive point beside the sgl-project#1058 observation, promote one lap later), apply (the re-admission consult, schedule_batch.py:1718-1790). PP0 applies the LAPPED row like every follower and never its own fresh number -- 632ba36 states that explicitly and it is what keeps PP0 from being the divergent rank.
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.
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
pre-commit run --all-filesor other linting tools are used to fix potential lint issues.