Skip to content

feat(MODEL-TEXT-kolibri-1-kolibri1-for-causal-lm): make the CPU dequant cache the default - #3488

Merged
lu-zero merged 3 commits into
localai-org:mainfrom
lu-zero:row/KOLIBRI1-DEQUANT-CACHE-DEFAULT
Oct 21, 2026
Merged

lu-zero merged 3 commits into
localai-org:mainfrom
lu-zero:row/KOLIBRI1-DEQUANT-CACHE-DEFAULT

Conversation

@lu-zero

@lu-zero lu-zero commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

The Kolibri-1 CPU forward re-dequantises every used FP8 weight on every
forward unless the decoded weights stay resident, so the shipped
configuration paid that cost: the cache was OFF by default. The cache is
worth more than 2x on CPU decode (4.02 tok/s with it off against 9.07
tok/s with a 16 GiB budget, 2026-10-20, node 3, aarch64, 3.4 GHz, 32
threads, empty-prompt 32-token decode; prefill p512 43.33 tok/s with it
off), so the default is the cached path. The budget that default derives
from the host is the part this body corrects: the first form of it was
planned at the wrong moment and could land below the measured knee, so
the default shipped the slow configuration by accident.

The default budget of the Kolibri-1 CPU dequant cache was planned on the
first use of the process-wide cache, and the first use happens during the
74 GB checkpoint load: the page cache is full by then, so MemAvailable
reads 66 GiB where the host's idle reading is ~212 GiB. The divisor
yielded 8.25 GiB, and a budget that low buys nothing. Measured on node 3
(aarch64, 3.4 GHz, 32 threads, empty-prompt 32-token decode, 2026-10-21):
the default leg showed budget_mib=8454 from budget_source_mib=67638,
hits=9097, misses=18349, evictions=16068, a 33% hit rate and 3.84 tok/s,
against 6.38 tok/s for an explicit 16384 MiB budget and 3.62 tok/s with
the cache off.

The policy now reads the host at PROCESS START, before our own load
depresses the reading, and floors the budget at the measured knee:

honest_bytes = max(start_bytes, plan_bytes)
honest_bytes == 0              -> budget = 16 GiB   (UNKNOWN)
honest_bytes < 16 GiB + 8 GiB  -> budget = 0        (DISABLED)
otherwise                      -> budget = clamp(honest_bytes / 8,
                                                    16 GiB, 32 GiB)

The process-start reading is a namespace-scope initialiser, so it runs
before main and before any model load. The KNEE (16 GiB) is the FLOOR for
every host that can afford it: a budget under the knee thrashes, it costs
the memory and it buys nothing, so the policy never serves one. The
RESERVE (8 GiB) is the room the host must keep free beside the knee: a
host that reports less than the knee plus the reserve cannot afford the
knee at all, so the cache is DISABLED (budget 0) and the forward runs the
UNCACHED path, byte for byte. That is the explicit rule: a sub-knee
cache is WORSE than useless, so the cache either runs at or above the knee
or it does not run. The 32 GiB cap bounds the footprint, and an unreadable
report uses the KNEE: an unknown budget is not a reason to refuse (the
house rule) and not a reason to hand out a sub-knee budget; a host that
cannot hold the knee degrades to the uncached path through the existing
allocation fallback.

The env contract is unchanged: 0 disables, N sets exactly N MiB, and an
unparseable value falls back to the default policy rather than to
disabled. The uncached fallback is byte-for-byte unchanged: a cache that
cannot get its bytes degrades to the original threaded pool dequant.

Measured after the repair (2026-10-21, node 3, aarch64, 3.4 GHz, 32
threads, VT_KOLIBRI1_PROFILE=1, the file mutex held for the window). The
first window, empty-prompt 32-token decode: the DEFAULT leg planned
budget_mib=27157 from budget_start_mib=217262 and budget_plan_mib=143920,
ended at hits=72190 misses=17756 evictions=7993 (an 80% hit rate) and
delivered 7.44833, 7.39141 and 7.46827 tok/s over three runs. The
explicit 16384 MiB leg, same window and same binary, delivered 7.05777,
7.05438 and 6.98659 tok/s; the cache-off leg delivered 3.62428, 3.78799
and 3.54865 tok/s. The 72 GiB gap between the plan-time reading and the
process-start reading IS the checkpoint load, and the honest reading
closes it.

The second window, the production-shape gate
(/tmp/build-dq/tests/test_kolibri1_decode_bench, 128-token prompt, 64
greedy tokens, numactl --cpunodebind=3 --interleave=all,
VLLM_CPP_CPU_THREADS=32, the file mutex held):

leg budget_MiB hits misses evictions hit rate tok/s
default r1 23143 71717 18229 10072 79.7% 7.58
default r2 27107 72184 17762 8019 80.3% 7.36
default r3 26971 72169 17777 8089 80.2% 7.50
16384 MiB r1-3 16384 71097 18849 13396 79.0% 7.15 / 7.23 / 7.14
0 (off) r1-3 0 0 0 0 0.0% 3.49 / 3.58 / 2.45

The default leg is enabled, its budget is 22.6-26.5 GiB (at or above the
16 GiB knee), its hit rate is ~80% against the defect's 33%, and its
throughput (7.36-7.58 tok/s) is above the 6.38 tok/s the finding measured
for an explicit 16 GiB budget and above the same-binary explicit 16 GiB
legs (7.14-7.23 tok/s). The off leg confirms the uncached fallback:
enabled=0, no cache traffic, and the SAME token chain (11622...) as the
cached legs, so the fallback is byte-for-byte. The last off leg ran under
a load average of 53.9 (another build on the box) and is the low outlier.

Red-first: against the pre-repair policy the new cases fail at runtime,
not at compile time. The witness keeps the knee a literal, so it
compiles against the old policy too: DefaultBudgetBytesFor(66 GiB) was
8.25 GiB and the assertion failed (8.25 GiB against 16 GiB), and it
passes now. A probe compiled against the base commit's header (84d98a9)
reports budget_bytes=8858370048 (8.25 GiB) for the load-depressed 66 GiB
reading and exits 1; the repaired policy reports budget_bytes=17179869184
(16.00 GiB) and exits 0. The policy case pins the knee floor, the cap,
the divisor, the honest maximum of the two readings, the clean DISABLE of
a host that cannot afford the knee (a budget of 0, the uncached path), the
UNKNOWN rule (the knee, never a refusal and never a sub-knee budget), and
the band for every pair of the two moments. The process-level case pins
that the plan's source reading is that maximum, that the budget is the
policy applied to it, and that the process-start reading was really taken.

Mutations, each run and then restored byte for byte (the header was
checked against its sha256 after each one): an honest reading that takes
the MINIMUM of the two moments fails 4 assertions; a policy without the
knee floor fails 5 assertions across 3 cases, the helper included; a
process-start capture that never happens fails the capture assertion. On
the final policy: removing the KNEE floor fails 993 assertions across 2
cases; removing the clean-DISABLE rule fails 3 assertions; making the
UNKNOWN branch refuse instead of serving the knee fails 1 assertion. The
header's sha256 is the same before and after the three runs.

Gates: test_kolibri1_dequant_cache 13/13 (66150 assertions on the
final policy; 132200 on the sampling-repair commit), test_kolibri1 27/27,
test_kolibri1_w2 7/7, test_kolibri1_numa 3/3, test_kolibri1_dequant 3/3,
test_kolibri1_moe_glue 9/9, test_kolibri1_bfdot_gemv 5/5,
test_kolibri1_decode_bench SUCCESS. The W3 token gate and the n-gram spec
gate are red on pristine origin/main and reproduce there with the SAME
numbers as on this tree: W3 reads 134/138 compared positions, 4 near-tie
flips, 0 hard flips, worst topk diff 3.40201, worst sum diff 87462; the
n-gram spec gate keeps its stale anchor (11622 against the recorded
109726) and the same acceptance counts (162/297 accepted, 146/270 in the
probe harness, 150/297 on the torch chains).

WHAT THE REPAIRED DEFAULT DELIVERS (in-repo bench, node 3, aarch64, 3.4 GHz, 32 threads, quiet box, rebuilt binary; 3 runs per leg):

leg budget plain decode spec-decode
default (repaired) 26.6 GiB 8.63-9.36 12.74-13.14
explicit VT_..._CACHE_MB=16384 16 GiB 8.33-8.73 10.42-10.55
cache off (the shipped one) 0 3.90-3.92 6.27-6.30

The default leg's profile: budget_mib=27199 from a 212 GiB start-of-process reading, hits=72200, misses=17746, evictions=7967 - an 80 percent hit rate, against 33 percent and 16068 evictions for the pre-repair 8.25 GiB budget that made the default worthless. The repaired default is 2.2x the shipped configuration, and with speculative decode it passes the campaign's 12 tok/s target (12.74-13.14 against 6.27-6.30 shipped). The explicit 16 GiB leg is the same policy at a smaller budget: more budget, more hits, more throughput.

Docs: the row spec, docs/ENVIRONMENT.md and docs/FEATURES.md carry the
corrected policy, the measured knee, and the honest statement that a
sub-knee budget is WORSE than useless (it costs the memory and buys
nothing), that the sampling moment is part of the policy, and that a host
which cannot afford the knee gets the cache disabled rather than a
thrashing sub-knee cache.

References: ISSUE-LOCAL-01M5DVY9ZWF1XXAM2HSHH5BDRK

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]

…nt cache the default

The Kolibri-1 CPU forward re-dequantises every used FP8 weight on every
forward unless the decoded weights stay resident, and the shipped
configuration paid that cost: the cache was OFF by default, so the
configuration the users got was the slow one. The cache is worth more
than 2x on CPU decode (4.02 tok/s against 9.07 tok/s with a 16 GiB
budget, 2026-10-20, node 3, aarch64, 3.4 GHz, 32 threads, empty-prompt
32-token decode; prefill p512 43.33 tok/s with the cache off), so the
default is now the cached path.

The default budget is derived from the host's own memory report:
clamp(MemAvailable / 8, 1 GiB, 32 GiB). The reading comes from the
house helper vllm::v1::host_available_memory_bytes(), the same probe
the DeepSeek-V4 EXL3 host-residency budget uses, so the tree keeps one
memory reader. The eighth leaves the checkpoint, the KV cache and the
OS their memory, the floor keeps the lever on everywhere, and the cap
bounds the footprint. The budget is read once, at the first forward.

VT_KOLIBRI1_DEQUANT_CACHE_MB keeps working: 0 disables the cache and
restores the original threaded pool dequant, an explicit value sets
the budget exactly (16 GiB is the shape the measurement above was
taken in), and a value that is not a plain number of MiB falls back to
the default policy instead of silently switching a default-on lever
off.

The budget is a bound, not a reservation, and it cannot starve the
process: an allocation the cache cannot satisfy drops the entries,
reports the cache disabled, and lets the forward continue on the
uncached path, which produces the same bytes.

No numerics change. The cache stores the decoded weights and serves
them unchanged, and the gate pins the cached bytes against the
production uncached dequant (DequantFp8BlockUncached) byte for byte,
cold and hot.

Red-first: origin/main's test_kolibri1_dequant_cache asserts that the
default is a DISABLED cache, and it goes red against this change at
that assertion (the probe exits 1 where the old case expected 0). The
case was rewritten deliberately, not deleted, and the new default-on
contract adds the knob semantics, the pure budget policy, the
byte-identity case and the fallback case (11 cases, 2127 assertions,
green).

Mutations, each run and then restored byte for byte: a one-bit
perturbation of the cached decode fails 25 assertions across six
cases; a default budget that collapses to zero fails 1035 assertions;
deleting the production fallback fails the fallback case.

Gates: test_kolibri1_dequant_cache 11/11 (2127 assertions),
test_kolibri1_w2 7/7 (1608), test_kolibri1 27/27 (234),
test_kolibri1_numa 3/3, test_kolibri1_dequant 3/3,
test_kolibri1_moe_glue 9/9, test_kolibri1_bfdot_gemv 5/5 (12513).
test_kolibri1_w3 and test_kolibri1_ngram_spec are red on pristine
origin/main and stay red for the same recorded reason, with the same
numbers as the pristine run: the W3 token gate reads 134/138 compared
positions, 4 near-tie flips, 0 hard flips, worst topk diff 3.40201,
worst sum diff 87462, before and after. The n-gram spec gate keeps its
stale anchor (11622 against the recorded 109726) and the same
acceptance counts.

Docs: docs/ENVIRONMENT.md gains the Kolibri-1 CPU dequant cache section
with the knob and the derived default, and docs/FEATURES.md and
docs/USAGE.md state the new default.

The decode and prefill benchmark rows for the default configuration are
PENDING the node-3 window, which a collaborator is using. The commands
are below; the harness rows that mean "cache off" must now pass
VT_KOLIBRI1_DEQUANT_CACHE_MB=0 explicitly, because an UNSET variable
is the default-on configuration, not the off switch.

    export TT_METAL_HOME=/home/lu_zero/Sources/tt/tt-metal-pin
    export TT_METAL_RUNTIME_ROOT=/home/lu_zero/Sources/tt/tt-metal-pin
    BR=/tmp/kolibri-scale/bench-run

    # empty-prompt decode, 32 tokens, 32 threads: cache off
    numactl --cpunodebind=3 --interleave=all env VT_KB_PROMPT=0 \
      VT_KB_GEN=32 VLLM_CPP_CPU_THREADS=32 \
      VT_KOLIBRI1_DEQUANT_CACHE_MB=0 "$BR"

    # the same with the DEFAULT (the variable unset -> the derived budget)
    numactl --cpunodebind=3 --interleave=all env VT_KB_PROMPT=0 \
      VT_KB_GEN=32 VLLM_CPP_CPU_THREADS=32 "$BR"

    # the same with the explicit 16 GiB budget (the 2026-10-20 shape)
    numactl --cpunodebind=3 --interleave=all env VT_KB_PROMPT=0 \
      VT_KB_GEN=32 VLLM_CPP_CPU_THREADS=32 \
      VT_KOLIBRI1_DEQUANT_CACHE_MB=16384 "$BR"

    # prefill p512, 8 tokens, 32 threads, cache off
    numactl --cpunodebind=3 --interleave=all env VT_KB_PROMPT=512 \
      VT_KB_GEN=8 VLLM_CPP_CPU_THREADS=32 \
      VT_KOLIBRI1_DEQUANT_CACHE_MB=0 "$BR"

    # the in-repo production-shape bench, and the spec-decode probe
    VLLM_CPP_CPU_THREADS=32 /tmp/build-dq/tests/test_kolibri1_decode_bench
    VLLM_CPP_CPU_THREADS=32 /tmp/build-dq/tests/test_kolibri1_spec_probe

References: ISSUE-LOCAL-01M5DMH6KQJSP9F8PFCQAAS4WH

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
…emory before the checkpoint load and floor the dequant-cache budget at the measured knee

The default budget of the Kolibri-1 CPU dequant cache was planned on the
first use of the process-wide cache, and the first use happens during the
74 GB checkpoint load: the page cache is full by then, so MemAvailable
reads 66 GiB where the host's idle reading is ~212 GiB. The divisor
yielded 8.25 GiB, and a budget that low buys nothing. Measured on node 3
(aarch64, 3.4 GHz, 32 threads, empty-prompt 32-token decode, 2026-10-21):
the default leg showed budget_mib=8454 from budget_source_mib=67638,
hits=9097, misses=18349, evictions=16068, a 33% hit rate and 3.84 tok/s,
against 6.38 tok/s for an explicit 16384 MiB budget and 3.62 tok/s with
the cache off.

The policy now reads the host at PROCESS START, before our own load
depresses the reading, and floors the budget at the measured knee:

    honest_bytes = max(start_bytes, plan_bytes)
    budget_bytes = clamp(honest_bytes / 8, 1 GiB, 32 GiB)
    if honest_bytes >= 64 GiB: budget_bytes = max(budget_bytes, 16 GiB)

The process-start reading is a namespace-scope initialiser, so it runs
before main and before any model load. The 64 GiB host threshold is the
scarcity line: a host that reports 64 GiB as handable can afford a 16
GiB cache, a quarter of what it reports, and below the threshold the
divisor result stands with the 1 GiB floor, so the default is never
disabled and a small host still gets the lever. The 32 GiB cap bounds
the footprint, and an unreadable report uses the 4 GiB nominal, which
sits below the knee on purpose: a host that does not report its memory
is not known to afford the knee.

The env contract is unchanged: 0 disables, N sets exactly N MiB, and an
unparseable value falls back to the default policy rather than to
disabled. The uncached fallback is byte-for-byte unchanged: a cache that
cannot get its bytes degrades to the original threaded pool dequant.

Measured after the repair (2026-10-21, node 3, aarch64, 3.4 GHz, 32
threads, empty-prompt 32-token decode, VT_KOLIBRI1_PROFILE=1, the file
mutex held, the box quiet): the DEFAULT leg planned budget_mib=27157
from budget_start_mib=217262 and budget_plan_mib=143920, ended at
hits=72190 misses=17756 evictions=7993 (an 80% hit rate) and delivered
7.44833, 7.39141 and 7.46827 tok/s over three runs. The explicit
16384 MiB leg, same window and same binary, delivered 7.05777, 7.05438
and 6.98659 tok/s; the cache-off leg delivered 3.62428, 3.78799 and
3.54865 tok/s. The 72 GiB gap between the plan-time reading and the
process-start reading IS the checkpoint load, and the honest reading
closes it.

Red-first: against the pre-repair policy the new cases fail at runtime,
not at compile time. The witness keeps the knee a literal, so it
compiles against the old policy too: DefaultBudgetBytesFor(66 GiB) was
8.25 GiB and the assertion failed (8.25 GiB against 16 GiB), and it
passes now. The policy case pins the floor, the cap, the divisor, the
knee floor at and above the 64 GiB threshold, the divisor result below
it, the honest maximum of the two readings, and the band for every pair
of them. The process-level case pins that the plan's source reading is
that maximum, that the budget is the policy applied to it, and that the
process-start reading was really taken.

Mutations, each run and then restored byte for byte (the header was
checked against its sha256 after each one): an honest reading that takes
the MINIMUM of the two moments fails 4 assertions; a policy without the
knee floor fails 5 assertions across 3 cases, the helper included; a
process-start capture that never happens fails the capture assertion.

Gates: test_kolibri1_dequant_cache 13/13 (132200 assertions),
test_kolibri1 27/27, test_kolibri1_w2 7/7, test_kolibri1_numa 3/3,
test_kolibri1_dequant 3/3, test_kolibri1_moe_glue 9/9,
test_kolibri1_bfdot_gemv 5/5, test_kolibri1_decode_bench SUCCESS.

Docs: the row spec, docs/ENVIRONMENT.md and docs/FEATURES.md carry the
corrected policy, the measured knee, and the honest statement that a
sub-knee budget is worth little and that the sampling moment is part of
the policy.

References: ISSUE-LOCAL-01M5DVY9ZWF1XXAM2HSHH5BDRK

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
… cache on a host that cannot afford the knee

The repaired default budget floored the budget at the measured 16 GiB knee
only for a host that reported at least 64 GiB as handable; below that
threshold the divisor result stood with a 1 GiB floor, so a scarce host
still received a SUB-KNEE cache. That is the shape the measurement calls
worthless: at 8.25 GiB the hit rate was 33% with 16068 evictions and the
decode throughput (3.84 tok/s) was indistinguishable from the cache being
off (3.62 tok/s) while the process still held the memory. A sub-knee cache
is worse than no cache at all, so the policy now refuses to serve one.

The policy is therefore:

    honest_bytes = max(start_bytes, plan_bytes)
    honest_bytes == 0              -> budget = 16 GiB   (UNKNOWN)
    honest_bytes < 16 GiB + 8 GiB  -> budget = 0        (DISABLED)
    otherwise                      -> budget = clamp(honest_bytes / 8,
                                                        16 GiB, 32 GiB)

The KNEE is the floor for every host that can afford it. A host that
reports less than the knee plus an 8 GiB reserve cannot afford the knee at
all, so the cache is DISABLED and the forward runs the uncached path (the
original threaded pool dequant), byte for byte: the cache either runs at or
above the knee or it does not run. An unreadable report uses the knee,
because an unknown budget is not a reason to refuse and not a reason to
hand out a sub-knee budget; a host that cannot hold the knee degrades to
the uncached path through the existing allocation fallback. The env
contract is unchanged: 0 disables, N sets exactly N MiB, and an unparseable
value falls back to the default policy rather than to disabled.

Red-first: the new gate case states the knee as a literal, so it compiles
against the pre-repair policy and the red is an assertion failure rather
than a compile error. A probe compiled against the base commit's header
reports budget_bytes=8858370048 (8.25 GiB) for a load-depressed reading and
exits 1; the repaired policy reports budget_bytes=17179869184 (16.00 GiB)
and exits 0. The policy case also pins the disable rule and the UNKNOWN
rule.

Measured after the repair (2026-10-21, node 3, aarch64, 3.4 GHz, 32
threads, numactl --cpunodebind=3 --interleave=all, VLLM_CPP_CPU_THREADS=32,
/tmp/build-dq/tests/test_kolibri1_decode_bench with VT_KOLIBRI1_PROFILE=1,
the file mutex held for the window): the default leg is enabled with a
budget of 22.6-26.5 GiB, a hit rate of ~80% (the defect's 33%) and 7.36,
7.50 and 7.58 tok/s over three runs, against 7.14, 7.23 and 7.15 tok/s for
an explicit 16384 MiB budget in the same window and 3.49, 3.58 and 2.45
tok/s with the cache off. The off leg shows enabled=0, no cache traffic and
the same token chain (11622...) as the cached legs, so the uncached
fallback is byte-for-byte. The knee floor does not bind on this host (the
honest reading is 181-212 GiB), so the default budget is unchanged by this
commit and the numbers above are the ones the sampling-moment repair
already produced.

Gates: test_kolibri1_dequant_cache 13/13 (66150 assertions),
test_kolibri1 27/27, test_kolibri1_w2 7/7, test_kolibri1_numa 3/3,
test_kolibri1_dequant 3/3, test_kolibri1_moe_glue 9/9,
test_kolibri1_bfdot_gemv 5/5, test_kolibri1_decode_bench SUCCESS. The W3
token gate and the n-gram spec gate are red on pristine origin/main and
unchanged by this change.

NO NUMERICS CHANGE: the cached bytes stay byte-identical to the production
uncached dequant, which the gate pins cold and hot.

Docs: the row spec, docs/ENVIRONMENT.md and docs/FEATURES.md carry the
corrected policy, the measured knee, and the honest statement that a
sub-knee budget is worthless.

References: ISSUE-LOCAL-01M5DVY9ZWF1XXAM2HSHH5BDRK

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
lu-zero added a commit to lu-zero/vllm.cpp that referenced this pull request Oct 21, 2026
…ibri-1 CPU performance and the 12 tok/s verdict

The row had no public performance record. docs/BENCHMARKS.md carried no
Kolibri-1 CPU entry, docs/benchmarks/ had no detail page for it, the
dequant-cache default flip (PR localai-org#3488) left its decode and prefill rows owed
to a node-3 window, and the campaign's 12 tok/s target had no published
disposition. This change records the measurement taken on 2026-10-20/21 on
node 3 (aarch64, 128 cores, 255 GB RAM, governor `performance` at 3.4 GHz),
32 threads, one NUMA node, the file mutex held, the box quiet, and
re-baselines the public index against it. No product code and no test
changes.

The decode bench, empty prompt, 32 generated tokens, three runs per leg,
tok/s:

| leg | runs | median |
|---|---|---|
| cache OFF, what `main` ships today | 3.55 / 3.62 / 3.79 | 3.62 |
| default, first implementation (8.25 GiB, 33% hit rate) | 3.84 | 3.84 |
| default, repaired (26.6 GiB, 80% hit rate) | 7.39 / 7.45 / 7.47 | 7.45 |
| explicit 16 GiB budget | 6.38 / 6.95 / 6.99 | 6.95 |

Prefill p512 with the cache off: 12.30 / 23.89 / 43.33 tok/s at 8 / 16 / 32
threads. Decode thread scaling with the cache off: 1.38 / 2.59 / 4.02 tok/s
at 8 / 16 / 32 threads, 1.89x and then 1.36x.

THE 12 tok/s TARGET IS MET by the shipped default. The n-gram spec-decode
probe reads 12.74-13.14 tok/s with the dequant cache on (plain 8.63-9.36)
against 6.27-6.30 with the cache off, so the number needs the cache ON. The
engine-level reading clears it as well: 4.53 -> 13.78 tok/s, 3.04x, 2026-10-12,
t32 with a 32 GiB cache.

The caveats travel with the number. The box's noise floor is ~4% (two runs of
the same cell differed by ~4%), so 12.74 against a target of 12 is a ~6%
margin over one noise floor. The numbers are host-specific: 32 threads on
one NUMA node at 3.4 GHz. The default's margin over an explicit 16 GiB
budget is NOT claimed as a win; that leg reads 6.38-7.06 tok/s across the
session against 7.39-7.47 for the derived default. The rejected
alternatives carry their own measurements: the sub-knee budget (8.25 GiB,
33% hit rate) read 3.84 tok/s, a 1.3% difference from the cache-off median,
and the spin budget is a wash (t32 4.019 against 4.193 with
`VT_CPU_SPIN_ROUNDS=0`, t16 2.587 against 2.581).

The weights are recorded on the public page: `Aleph-Alpha/Kolibri-1` at
revision 5bb7075ba22db733e3834b1c71d2245537cc14ed, 32 shards,
78,827,029,120 bytes of tensors (74 GiB on disk), FP8 block-quantized. No
shard SHA-256 is recorded in this tree and the page says so. The sibling
`Aleph-Alpha/Kolibri-1-BF16` at revision
cc6d729e6a024c1e59ad48887fdef95ff37b534d (149 GiB) is named there as
REFUSED, not shipped: the loader rejects a checkpoint without the FP8
`quantization_config` with "a bf16 Kolibri-1 artifact is not an implemented
arm" (src/vllm/model_executor/models/kolibri1_weights.cpp:72), so no bf16
measurement exists and none is claimed.

The records: the new public page
docs/benchmarks/kolibri1-cpu-dequant-cache-default.md with its index row in
docs/BENCHMARKS.md, the Kolibri-1, CPU section and the speculative-decoding
ledger row there, a reproduce.md entry, the dated evidence
docs/bench-evidence/kolibri1-cpu-dequant-cache-default-20261021/report.md,
and the row spec's ## Outcome section.

Two things this record does not say, on purpose. The default is PR localai-org#3488,
which was OPEN when this was written and is not on `main` at 891c4f2, so
the pages say that the cache-off configuration is what `main` ships today.
And no vLLM or plugin denominator exists for this model, so nothing here is
a parity claim. The public recipe still pins the short revision e52eb462
for the checkpoint; the full revision of the measured artifact is on the
benchmark page, and the difference is reported rather than papered over.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
lu-zero added a commit to lu-zero/vllm.cpp that referenced this pull request Oct 21, 2026
…ibri-1 CPU performance and the 12 tok/s verdict

The row had no public performance record. docs/BENCHMARKS.md carried no
Kolibri-1 CPU entry, docs/benchmarks/ had no detail page for it, the
dequant-cache default flip (PR localai-org#3488) left its decode and prefill rows owed
to a node-3 window, and the campaign's 12 tok/s target had no published
disposition. This change records the measurement taken on 2026-10-20/21 on
node 3 (aarch64, 128 cores, 255 GB RAM, governor `performance` at 3.4 GHz),
32 threads, one NUMA node, the file mutex held, the box quiet, and
re-baselines the public index against it. No product code and no test
changes.

The decode bench, empty prompt, 32 generated tokens, three runs per leg,
tok/s:

| leg | runs | median |
|---|---|---|
| cache OFF, what `main` ships today | 3.55 / 3.62 / 3.79 | 3.62 |
| default, first implementation (8.25 GiB, 33% hit rate) | 3.84 | 3.84 |
| default, repaired (26.6 GiB, 80% hit rate) | 7.39 / 7.45 / 7.47 | 7.45 |
| explicit 16 GiB budget | 6.38 / 6.95 / 6.99 | 6.95 |

Prefill p512 with the cache off: 12.30 / 23.89 / 43.33 tok/s at 8 / 16 / 32
threads. Decode thread scaling with the cache off: 1.38 / 2.59 / 4.02 tok/s
at 8 / 16 / 32 threads, 1.89x and then 1.36x.

THE 12 tok/s TARGET IS MET by the shipped default. The n-gram spec-decode
probe reads 12.74-13.14 tok/s with the dequant cache on (plain 8.63-9.36)
against 6.27-6.30 with the cache off, so the number needs the cache ON. The
engine-level reading clears it as well: 4.53 -> 13.78 tok/s, 3.04x, 2026-10-12,
t32 with a 32 GiB cache.

The caveats travel with the number. The box's noise floor is ~4% (two runs of
the same cell differed by ~4%), so 12.74 against a target of 12 is a ~6%
margin over one noise floor. The numbers are host-specific: 32 threads on
one NUMA node at 3.4 GHz. The default's margin over an explicit 16 GiB
budget is NOT claimed as a win; that leg reads 6.38-7.06 tok/s across the
session against 7.39-7.47 for the derived default. The rejected
alternatives carry their own measurements: the sub-knee budget (8.25 GiB,
33% hit rate) read 3.84 tok/s, a 1.3% difference from the cache-off median,
and the spin budget is a wash (t32 4.019 against 4.193 with
`VT_CPU_SPIN_ROUNDS=0`, t16 2.587 against 2.581).

The weights are recorded on the public page: `Aleph-Alpha/Kolibri-1` at
revision 5bb7075ba22db733e3834b1c71d2245537cc14ed, 32 shards,
78,827,029,120 bytes of tensors (74 GiB on disk), FP8 block-quantized. No
shard SHA-256 is recorded in this tree and the page says so. The sibling
`Aleph-Alpha/Kolibri-1-BF16` at revision
cc6d729e6a024c1e59ad48887fdef95ff37b534d (149 GiB) is named there as
REFUSED, not shipped: the loader rejects a checkpoint without the FP8
`quantization_config` with "a bf16 Kolibri-1 artifact is not an implemented
arm" (src/vllm/model_executor/models/kolibri1_weights.cpp:72), so no bf16
measurement exists and none is claimed.

The records: the new public page
docs/benchmarks/kolibri1-cpu-dequant-cache-default.md with its index row in
docs/BENCHMARKS.md, the Kolibri-1, CPU section and the speculative-decoding
ledger row there, a reproduce.md entry, the dated evidence
docs/bench-evidence/kolibri1-cpu-dequant-cache-default-20261021/report.md,
and the row spec's ## Outcome section.

Two things this record does not say, on purpose. The default is PR localai-org#3488,
which was OPEN when this was written and is not on `main` at 891c4f2, so
the pages say that the cache-off configuration is what `main` ships today.
And no vLLM or plugin denominator exists for this model, so nothing here is
a parity claim. The public recipe still pins the short revision e52eb462
for the checkpoint; the full revision of the measured artifact is on the
benchmark page, and the difference is reported rather than papered over.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
@lu-zero
lu-zero merged commit 3ce14f3 into localai-org:main Oct 21, 2026
25 of 30 checks passed
lu-zero added a commit to lu-zero/vllm.cpp that referenced this pull request Oct 21, 2026
…ibri-1 CPU performance and the 12 tok/s verdict

The row had no public performance record. docs/BENCHMARKS.md carried no
Kolibri-1 CPU entry, docs/benchmarks/ had no detail page for it, the
dequant-cache default flip (PR localai-org#3488) left its decode and prefill rows owed
to a node-3 window, and the campaign's 12 tok/s target had no published
disposition. This change records the measurement taken on 2026-10-20/21 on
node 3 (aarch64, 128 cores, 255 GB RAM, governor `performance` at 3.4 GHz),
32 threads, one NUMA node, the file mutex held, the box quiet, and
re-baselines the public index against it. No product code and no test
changes.

The decode bench, empty prompt, 32 generated tokens, three runs per leg,
tok/s:

| leg | runs | median |
|---|---|---|
| cache OFF, what `main` ships today | 3.55 / 3.62 / 3.79 | 3.62 |
| default, first implementation (8.25 GiB, 33% hit rate) | 3.84 | 3.84 |
| default, repaired (26.6 GiB, 80% hit rate) | 7.39 / 7.45 / 7.47 | 7.45 |
| explicit 16 GiB budget | 6.38 / 6.95 / 6.99 | 6.95 |

Prefill p512 with the cache off: 12.30 / 23.89 / 43.33 tok/s at 8 / 16 / 32
threads. Decode thread scaling with the cache off: 1.38 / 2.59 / 4.02 tok/s
at 8 / 16 / 32 threads, 1.89x and then 1.36x.

THE 12 tok/s TARGET IS MET by the shipped default. The n-gram spec-decode
probe reads 12.74-13.14 tok/s with the dequant cache on (plain 8.63-9.36)
against 6.27-6.30 with the cache off, so the number needs the cache ON. The
engine-level reading clears it as well: 4.53 -> 13.78 tok/s, 3.04x, 2026-10-12,
t32 with a 32 GiB cache.

The caveats travel with the number. The box's noise floor is ~4% (two runs of
the same cell differed by ~4%), so 12.74 against a target of 12 is a ~6%
margin over one noise floor. The numbers are host-specific: 32 threads on
one NUMA node at 3.4 GHz. The default's margin over an explicit 16 GiB
budget is NOT claimed as a win; that leg reads 6.38-7.06 tok/s across the
session against 7.39-7.47 for the derived default. The rejected
alternatives carry their own measurements: the sub-knee budget (8.25 GiB,
33% hit rate) read 3.84 tok/s, a 1.3% difference from the cache-off median,
and the spin budget is a wash (t32 4.019 against 4.193 with
`VT_CPU_SPIN_ROUNDS=0`, t16 2.587 against 2.581).

The weights are recorded on the public page: `Aleph-Alpha/Kolibri-1` at
revision 5bb7075ba22db733e3834b1c71d2245537cc14ed, 32 shards,
78,827,029,120 bytes of tensors (74 GiB on disk), FP8 block-quantized. No
shard SHA-256 is recorded in this tree and the page says so. The sibling
`Aleph-Alpha/Kolibri-1-BF16` at revision
cc6d729e6a024c1e59ad48887fdef95ff37b534d (149 GiB) is named there as
REFUSED, not shipped: the loader rejects a checkpoint without the FP8
`quantization_config` with "a bf16 Kolibri-1 artifact is not an implemented
arm" (src/vllm/model_executor/models/kolibri1_weights.cpp:72), so no bf16
measurement exists and none is claimed.

The records: the new public page
docs/benchmarks/kolibri1-cpu-dequant-cache-default.md with its index row in
docs/BENCHMARKS.md, the Kolibri-1, CPU section and the speculative-decoding
ledger row there, a reproduce.md entry, the dated evidence
docs/bench-evidence/kolibri1-cpu-dequant-cache-default-20261021/report.md,
and the row spec's ## Outcome section.

Two things this record does not say, on purpose. The default is PR localai-org#3488,
which was OPEN when this was written and is not on `main` at 891c4f2, so
the pages say that the cache-off configuration is what `main` ships today.
And no vLLM or plugin denominator exists for this model, so nothing here is
a parity claim. The public recipe still pins the short revision e52eb462
for the checkpoint; the full revision of the measured artifact is on the
benchmark page, and the difference is reported rather than papered over.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
lu-zero added a commit to lu-zero/vllm.cpp that referenced this pull request Oct 21, 2026
…e default landed, so the records follow

PR localai-org#3488 merged while this record was open, so `main` now ships the FP8
dequant cache ON and the four records described a configuration the tree
did not carry. The branch is rebased onto the main that carries the
default, and the records now say what is true: the default has landed as
`d9e669582` (the flip), `e451be705` (the sampling-moment repair and the
knee floor) and `3ce14f35c` (the knee refusal), and the numbers are the
shipped configuration's numbers.

The update is text only. No measured cell and no derived value changed:
the medians, the ratios, the margins, the noise floor, the hit rates, the
prefill ranges, the thread cells, the spin cells and the spec-probe cells
all read exactly as they were published. What changed is the provenance
and the state statements. The spec's `## Outcome`, the public benchmark
page, the index row in `docs/BENCHMARKS.md` and the dated evidence report
now name the landing revisions, and the cache-off leg is labelled as the
configuration `main` shipped before the default landed.

The limitation that said the default was not on `main` yet is restated
rather than dropped: the default is on `main` now, and the numbers are its
measured behaviour. The cache-off leg remains the baseline every ratio is
read against, and the same probe still reads 6.27-6.30 tok/s with the
cache off.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
lu-zero added a commit that referenced this pull request Oct 21, 2026
…ibri-1 CPU performance and the 12 tok/s verdict

The row had no public performance record. docs/BENCHMARKS.md carried no
Kolibri-1 CPU entry, docs/benchmarks/ had no detail page for it, the
dequant-cache default flip (PR #3488) left its decode and prefill rows owed
to a node-3 window, and the campaign's 12 tok/s target had no published
disposition. This change records the measurement taken on 2026-10-20/21 on
node 3 (aarch64, 128 cores, 255 GB RAM, governor `performance` at 3.4 GHz),
32 threads, one NUMA node, the file mutex held, the box quiet, and
re-baselines the public index against it. No product code and no test
changes.

The decode bench, empty prompt, 32 generated tokens, three runs per leg,
tok/s:

| leg | runs | median |
|---|---|---|
| cache OFF, what `main` ships today | 3.55 / 3.62 / 3.79 | 3.62 |
| default, first implementation (8.25 GiB, 33% hit rate) | 3.84 | 3.84 |
| default, repaired (26.6 GiB, 80% hit rate) | 7.39 / 7.45 / 7.47 | 7.45 |
| explicit 16 GiB budget | 6.38 / 6.95 / 6.99 | 6.95 |

Prefill p512 with the cache off: 12.30 / 23.89 / 43.33 tok/s at 8 / 16 / 32
threads. Decode thread scaling with the cache off: 1.38 / 2.59 / 4.02 tok/s
at 8 / 16 / 32 threads, 1.89x and then 1.36x.

THE 12 tok/s TARGET IS MET by the shipped default. The n-gram spec-decode
probe reads 12.74-13.14 tok/s with the dequant cache on (plain 8.63-9.36)
against 6.27-6.30 with the cache off, so the number needs the cache ON. The
engine-level reading clears it as well: 4.53 -> 13.78 tok/s, 3.04x, 2026-10-12,
t32 with a 32 GiB cache.

The caveats travel with the number. The box's noise floor is ~4% (two runs of
the same cell differed by ~4%), so 12.74 against a target of 12 is a ~6%
margin over one noise floor. The numbers are host-specific: 32 threads on
one NUMA node at 3.4 GHz. The default's margin over an explicit 16 GiB
budget is NOT claimed as a win; that leg reads 6.38-7.06 tok/s across the
session against 7.39-7.47 for the derived default. The rejected
alternatives carry their own measurements: the sub-knee budget (8.25 GiB,
33% hit rate) read 3.84 tok/s, a 1.3% difference from the cache-off median,
and the spin budget is a wash (t32 4.019 against 4.193 with
`VT_CPU_SPIN_ROUNDS=0`, t16 2.587 against 2.581).

The weights are recorded on the public page: `Aleph-Alpha/Kolibri-1` at
revision 5bb7075ba22db733e3834b1c71d2245537cc14ed, 32 shards,
78,827,029,120 bytes of tensors (74 GiB on disk), FP8 block-quantized. No
shard SHA-256 is recorded in this tree and the page says so. The sibling
`Aleph-Alpha/Kolibri-1-BF16` at revision
cc6d729e6a024c1e59ad48887fdef95ff37b534d (149 GiB) is named there as
REFUSED, not shipped: the loader rejects a checkpoint without the FP8
`quantization_config` with "a bf16 Kolibri-1 artifact is not an implemented
arm" (src/vllm/model_executor/models/kolibri1_weights.cpp:72), so no bf16
measurement exists and none is claimed.

The records: the new public page
docs/benchmarks/kolibri1-cpu-dequant-cache-default.md with its index row in
docs/BENCHMARKS.md, the Kolibri-1, CPU section and the speculative-decoding
ledger row there, a reproduce.md entry, the dated evidence
docs/bench-evidence/kolibri1-cpu-dequant-cache-default-20261021/report.md,
and the row spec's ## Outcome section.

Two things this record does not say, on purpose. The default is PR #3488,
which was OPEN when this was written and is not on `main` at 891c4f2, so
the pages say that the cache-off configuration is what `main` ships today.
And no vLLM or plugin denominator exists for this model, so nothing here is
a parity claim. The public recipe still pins the short revision e52eb462
for the checkpoint; the full revision of the measured artifact is on the
benchmark page, and the difference is reported rather than papered over.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
lu-zero added a commit that referenced this pull request Oct 21, 2026
…e default landed, so the records follow

PR #3488 merged while this record was open, so `main` now ships the FP8
dequant cache ON and the four records described a configuration the tree
did not carry. The branch is rebased onto the main that carries the
default, and the records now say what is true: the default has landed as
`d9e669582` (the flip), `e451be705` (the sampling-moment repair and the
knee floor) and `3ce14f35c` (the knee refusal), and the numbers are the
shipped configuration's numbers.

The update is text only. No measured cell and no derived value changed:
the medians, the ratios, the margins, the noise floor, the hit rates, the
prefill ranges, the thread cells, the spin cells and the spec-probe cells
all read exactly as they were published. What changed is the provenance
and the state statements. The spec's `## Outcome`, the public benchmark
page, the index row in `docs/BENCHMARKS.md` and the dated evidence report
now name the landing revisions, and the cache-off leg is labelled as the
configuration `main` shipped before the default landed.

The limitation that said the default was not on `main` yet is restated
rather than dropped: the default is on `main` now, and the numbers are its
measured behaviour. The cache-off leg remains the baseline every ratio is
read against, and the same probe still reads 6.27-6.30 tok/s with the
cache off.

References: ISSUE-LOCAL-01M5E7ZJW0YXR2QZXQESJEP0MX

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai/glm-5.3-flash [maki]
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