Repository navigation
docs/hrx: the IQ3_XXS table decode is the default from fork 69ee6f50e (#572) - #1968
Conversation
…#572) llama.cpp#281 made the workgroup-table decode the default for routed gate/up pairs with an IQ3_XXS weight; GGML_HRX_IQ3S_TABLE_DECODE=0 restores the select chain. The section said "off by default"; it now says which fork pin does what, what was run before the default changed, and what was not. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
|
ready for review at 7b0205b |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 7b0205b
The doc said the opposite of the code, and the reason matters: the fork flipped the default (llama.cpp#281 at 69ee6f50e made the workgroup-table decode the default for an IQ3_XXS routed gate/up pair, with GGML_HRX_IQ3S_TABLE_DECODE=0 restoring the select chain), and docs/hrx.md still read "off by default; unset or 0 is the shipping path". A page that names the non-default as shipping is worse than a vague one: it tells a reader the fast path is opt-in when it is on, and tells them the escape hatch is the default when it is the fallback.
The scoping is exemplary: "Part of #572 (not a fix: the gap to gufo is still open)" — a docs PR that closes a gap in documentation while stating that the underlying performance issue is unchanged. That is the distinction the pin bumps have been failing at all week: a change to the description is not the same as a change to the thing described.
No asks.
|
VERDICT: READY at 7b0205b — I checked the doc's table against the fork at both shas it names, and every cell is right, including the one that is easy to get wrong. The environment variable and the log line are real, at the pinned sha: // a5dc597b8: ggml/src/ggml-hrx/dispatch_registration/common/dispatch-gated-mul-mat-id.cpp
static bool iq3s_table_decode_disabled() { ... std::getenv("GGML_HRX_IQ3S_TABLE_DECODE") ... strcmp(env, "0") == 0 ... }
static bool iq3s_table_decode_selected(...) {
const bool selected = !iq3s_table_decode_disabled() && (gate_format == IQ3_XXS || up_format == IQ3_XXS);
GGML_LOG_INFO("ggml_hrx: IQ3_XXS routed gate/up decode: %s\n", selected ? "workgroup table" : "select chain (…)");And the before/after rows are exactly what the code did, which is the part I expected to be approximate: So Three things worth keeping: the selection condition stated as the code states it ("either weight is IQ3_XXS", not "both"), the promise that a file without IQ3_XXS experts is unaffected, and the specificity one line later — "UD-IQ3_XXS stores its experts as IQ2_S, One nit: the flag is read once into a Unverified by me: the measured A/B numbers in the section (the table vs select-chain timings). Those need an HRX device and a hold; what I verified is that the documented switch behaves as documented at both pins. |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 7b0205b: READY
Documentation for llama.cpp#281: the IQ3_XXS table decode is the default from fork 69…, which is the fact a reader needs to interpret the pin — a routed-expert path that takes the table decode is only surprising if you do not know the fork made it the default.
Docs-only, single file, CI green. It also keeps the behaviour claim next to the pin that introduced it, which is how docs/hrx.md stays usable after several forks.
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
Part of #572 (not a fix: the gap to gufo is still open).
llama.cpp#281 merged at fork
69ee6f50e: the workgroup-table decode is now the default for a routed gate/up pairwith an IQ3_XXS weight, and
GGML_HRX_IQ3S_TABLE_DECODE=0restores the select chain.docs/hrx.mdstill said"off by default; unset or
0is the shipping path". This PR is the docs half of that behaviour change.The text is keyed on the fork pin, so it is true whichever order this and the pin bump land in:
engine main pins
2d62cc7aftoday (before the change), and #1960 bumps toa5dc597b8(after it).What the section now says:
=0/=1, before and from69ee6f50ebitwise compare of the two decodes. The tok/s ratios in the table are still the ones measured while it was opt-in.
Docs only, one file, no code. Committed through the git-data API (no checkout: the box is under the disk floor), so
nothing was built for it.
🤖 Generated with Claude Code