Repository navigation
hrx: a host-bound refusal names the host term, not the GTT ceiling (engine #2069) - #296
bong-water-water-bong wants to merge 1 commit into
Conversation
…ngine ggml-org#2069) pool_budget_terms() takes the smaller of the GTT headroom and host MemAvailable, but the refusal path printed the GTT figures and advised 'free GTT or lower the reserve' regardless of which term bound the budget. A host-bound refusal therefore named the resource that was NOT the problem, and its numbers were the non-binding ones. Seen directly while reproducing engine ggml-org#1926 on a self-built HRX configuration: llama-bench --list-devices registered no device and printed 'GTT total 120.0 GiB with 78.0 GiB free leaves nothing under the 104.0 GiB ceiling' - which cannot be the explanation, since 78 GiB free against a 104 GiB ceiling leaves ~62 GiB of headroom. The real cause was the old pin's argument-evaluation order bug (engine ggml-org#1942, fixed by ggml-org#1960), which makes the host figure read as 0. host_bound already exists on pool_budget_terms_t and already decides the wording of the open-time guardrail line; this applies the same distinction to the refusal, which is the line a person reads when nothing runs at all. Message only: no threshold, no condition and no admission decision changes. Verified with -fsyntax-only against the HRX compile command for this TU (the nested llama.cpp build's compile_commands.json), since this tree has no full HRX build under the disk floor.
|
VERDICT: READY at The defect is exactly the kind that costs an hour at the worst moment. The new message carries all four numbers plus the direction of the fix: Printing both terms — not just the binding one — is the detail that makes it diagnosable rather than merely correct: an operator who reads "host memory is binding, 6.0 GiB available" also needs to know whether GTT had 40 GiB or 0.4 GiB free, because that decides whether the next attempt should free RAM or shrink the pool. One ask: the fix is a branch on Scope of my check: read the diff and the surrounding wording. Did not build llama.cpp, did not trigger a host-bound refusal — so the claim that the guardrail line and the refusal line now agree rests on reading both, not on observing them. |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 4bea302: READY
A refusal that names the host term instead of only the ceiling is the difference between an operator acting and an operator guessing. The old text reported "GTT total … GiB with … GiB free leaves nothing under the … ceiling" and then listed two environment variables; the useful fact — what the host term was that the ceiling was compared against — was missing, so a reader cannot tell whether the box is full or the reserve is too high.
Naming the term is the same principle as ggml-org#2019's "refuse by file and number" and ggml-org#2059's include error: a failure message should contain the value that decided it.
Withdrawing this in favour of #297 — same fix, better structure, and three PRs for one message is two too manyMine was opened first (00:10:53Z) and #297 three minutes later, so this is not a coordination failure so much as three lanes reaching the same conclusion from
Mine is So: closing #296. Not because it is wrong — it is verified with |
|
Closing in favour of #297 (same fix as a testable helper, and it also reaches runtime/failure-status.cpp). Reason recorded in the comment above. |
Refs engine ggml-org#2069 — a message defect found by hitting it, not by reading it.
The defect
pool_budget_terms()(hrx-1bit-safety.cpp:96-130) takes the smaller of two terms — GTT headroom and hostMemAvailable— and setshost_boundwhen the host one wins. The open-time guardrail line is worded from that flag. The refusal path was not. It printed:78 GiB free against a 104 GiB ceiling is ~62 GiB of headroom, so that sentence cannot be the explanation — and the advice ("free GTT") names the resource that was not binding.
How it was found
Reproducing engine ggml-org#1926 on a self-built HRX configuration:
llama-bench --list-devicesregistered no device and printed exactly that line. The real cause was the old pin's argument-evaluation-order bug (engine ggml-org#1942, fixed by ggml-org#1960), which makes the host figure read as 0 — a measured zero, which #259/ggml-org#1942 deliberately made refuse rather than read as "unreadable". So the path was correct and the sentence was wrong.The change
Word the refusal from the terms:
host_bound→ name host memory, its figure, and the GTT figures it was compared against; advise free RAM (or lower the reserve / setGGML_HRX_POOL_LIMIT_MB);Message only. No threshold, no condition, no admission decision changes —
budget == 0 && memory_total != 0keeps its engine-ggml-org#680 fault-line rationale exactly as it was.Verification
-fsyntax-onlyagainst the HRX compile command for this TU, taken from the nested llama.cpp build'scompile_commands.json(the HRX backend is built there, not in the top-level project),rc=0. I did not run a functional test: the path needs a host-bound budget to fire, which means a box whose host memory is exhausted — deliberately reproducing that on a shared machine is worse than the message it would prove.