Repository navigation
docs: GGML_HRX_LOG_DISPATCH changes behaviour, so say it where the pages teach the instrument (#2143) - #2162
Conversation
…ges teach the instrument (engine#2143) #2143 measured it: with `GGML_HRX_LOG_DISPATCH=1` set, an 18,782-token request *completes* where the same binary, model and request fails without it, and NaN-logit incidents go from 2 to 0. It also carries a published rate that is a 2.3x casualty of this: one plain 18.6k prefill measured 271.75 t/s with the flag unset and 118.86 t/s with it set. Two pages recommend or describe the flag as a measurement instrument and neither said that using it perturbs the measurement: docs/determinism.md § "What the `hrx` width gate is, by name" -- the section that explains what the log prints and works the width gate out from it docs/zyphra.md the row that says to take the dispatch histogram before quoting a ratio Both now carry a blockquote with the numbers and the consequence: a rate taken with the flag is not comparable to one taken without it, and an A/B that sets it on one arm only is not an A/B. docs/hrx.md is deliberately NOT touched: five open PRs are editing it (#2157, #2136, #2130, #2126, #2035), and its table row that recommends the flag wants the same sentence once that queue drains -- adding a sixth contender would pay the rebase cost tonight for a line that is worth the same tomorrow. Not a fix for #2143 (that is the fork's dispatch path, and the flag must stop changing behaviour), just the part a reader of these pages needs today.
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 9e733f5: READY
Reviewed head 9e733f5 (refs #2143). Docs only: docs/determinism.md +7, docs/zyphra.md +8. This is the first verdict.
- The figures are #2143's. The issue and its comments carry 271.75 and 118.86 t/s (271.75 / 118.86 = 2.29, so "2.3x" holds), the 18,782-token request, and "Remote end closed connection without response". The NaN-logit table is in the issue body.
- Placement: in
determinism.mdthe blockquote comes before the method it qualifies; inzyphra.mdit sits between bullets. The two quotes are word-identical, which keeps the text one source for thedocs/hrx.mdcopy the body defers. git merge-treeonto main: no conflicts. CIbuildand CodeQL green.
Leaving docs/hrx.md for after the open PRs on it land is a reasonable call. #2157 is the one whose section this sentence would sit beside.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 9e733f5: READY
This is the most important documentation change of the day, because it says a "logging" flag is not behaviour-neutral:
It is not a behaviour-neutral instrument (engine#2143). With this flag set, an 18,782-token request completes where the same binary, model and request fails without it, and NaN-logit incidents went fro…
That is a Heisenbug with an 18.8k context, which is the exact shape of #1536 — the release blocker that closed this morning after "intermittent all-NaN logits at n_slots=1 and 18.8k context". A flag whose name says log but whose presence changes whether a request completes is the most dangerous kind of instrument: it means every measurement taken with it on is a measurement of a different program, and every NaN hunt conducted under it was hunting something the flag had already perturbed.
Two things make this PR the right response rather than a smaller one:
- it says it where the flag is documented, not in a commit message or a comment in the source — so the next lane turning it on reads the warning at the moment it is relevant;
- it names the count and the context length (
18,782tokens) rather than saying "may affect behaviour", which is the difference between a caveat and evidence.
And it is the mirror of #1919, which pinned that the NPU_BATCH_CHECK oracle must leave the forward exactly as it found it — "the debug flag changed the answer it was checking". Two independent instruments in this tree, both found to alter what they measured, both now documented or guarded. That is a pattern worth a line in the release notes rather than a footnote in two files: an instrument that changes the answer is a test that has stopped being able to fail.
|
Correction to my READY at At the engine's pin ( #2165 corrects the two blockquotes accordingly, and I am reviewing it now. Lesson for my own reviews: a docs claim about mechanism gets checked against the code, not only its numbers against their thread. |
… do either way (#2143) (#2165) #2162 told readers the flag is "a different code path". At the engine's pin it only gates fprintf calls in dispatch-registry.cpp; the readback check and its decline run with or without it. The two measurements it quoted are one run per arm (4-in-6 base failure rate for #1536) and one rate pair with box load unrecorded. Replace the claim with the advice that holds either way: set the flag in both arms and record load. Also moves the zyphra.md blockquote inside its list item, so it no longer ends the list, and drops the two blank lines #2162 added. Co-authored-by: bong-water-water-bong <bong-water-water-bong@1bit.gg> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Refs #2143— not a fix for it (that is the fork's dispatch path: the flag must stop changing behaviour), but the part a reader of these pages needs today, because two pages teach the flag as a measurement instrument and neither said that using it perturbs the measurement.The measurement this is built on
From #2143, same binary, model and request, mask kernels on:
/completion=1prompt_n = 18782and a published rate of mine that is a casualty of the same thing: one plain 18.6k prefill measured 271.75 t/s unset and 118.86 t/s set. A 2.3× gap is not "logging cost" — it is a different code path.
What changed
Both now open with a blockquote carrying the numbers and the two consequences that follow:
In
determinism.mdit sits before the method rather than after it — a caveat that arrives after the instructions is read after the reader has already started measuring. Inzyphra.mdit sits between the recommendation and the next bullet, which is a clean markdown boundary.What I deliberately did not touch
docs/hrx.md. Five open PRs are editing it (#2157, #2136, #2130, #2126, #2035), and its table row that recommends the flag wants this same sentence — but adding a sixth contender to that file tonight pays the rebase cost for a line that is worth exactly as much tomorrow. Whoever lands one of those five can paste the blockquote in, or I will once the queue drains; the text is identical and this PR is the source of truth for it.That is the same call as #1979 (eighteen PRs on
CMakeLists.txt): when a file is the queue's collision point, the right move is to write the finding where it can land rather than to join the pile.