Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
345 commits
Select commit Hold shift + click to select a range
3091944
MLA: apply YaRN softmax mscale² correction (P2.2)
Apr 23, 2026
7f9f40f
Untrack .claude/scheduled_tasks.lock (session-local)
Apr 23, 2026
ffbeae5
.gitignore: exclude .claude/scheduled_tasks.lock
Apr 23, 2026
4d0bfb7
Merge: legacy vocab.json + merges.txt tokenizer loader
Apr 23, 2026
9d53b87
Tests: serialise HfLegacyBpeTokenizerTests via xUnit Collection
Apr 24, 2026
6d2dc0b
MLA: Phase A expanded KV-cache (P2.3)
Apr 24, 2026
daf1a89
docs: refresh SUPPORTED_MODELS + add MLA section to KV_CACHE
Apr 24, 2026
cd52eae
P1.4: clean build warnings to <= main
Apr 24, 2026
53f5743
Tokenizers: allocation fixes in Gpt2TiktokenEncoding + NormalizingTok…
Apr 24, 2026
578670f
P2.6: PyTorch numerical reference comparison for Qwen2.5-0.5B
Apr 24, 2026
be08798
MLA: Phase B latent KV-cache + absorbed attention (P2.3)
Apr 24, 2026
c3f1c21
MLA: vectorise attention inner loops via TensorPrimitives
Apr 24, 2026
50411fe
MLA: Phase C hybrid cache — prefill expand + decode absorbed (P2.3)
Apr 24, 2026
78f24b5
P2.6: PyTorch reference tests for TinyLlama / Phi-3.5 / DeepSeek-V2-Lite
Apr 24, 2026
3d6ed5b
MLA: Phase C hybrid cache — prefill expand + decode absorbed (P2.3)
Apr 24, 2026
0f21b60
Scaffold Vulkan compute backend (cross-vendor GPU path)
Apr 24, 2026
0a1a78e
Scaffold HIP/ROCm backend (AMD GPU path)
Apr 24, 2026
dda8733
P2.6 diagnostic: F32+eager isolates SDPA/bf16 drift from real bugs
Apr 24, 2026
09fb886
P2.6 audit: Phi-3 fused QKV/gate-up splits match HF row order
Apr 24, 2026
745b091
P2.6 fix: HF safetensors Llama-family RoPE uses NeoX (rotate_half), n…
Apr 24, 2026
812f6e3
Tests: fix DeepSeekV2Lite SharedExpert expectations to match fused co…
Apr 24, 2026
17e378b
Tests: PhiTightObserved preset — Phi-3.5 F32+eager compound drift tol…
Apr 24, 2026
576ea91
P2.6 fix: DeepSeek-V2-Lite shared-expert loader + test un-skip
Apr 24, 2026
82608e2
Add CONTINUE_ON_CUDA.md — pickup instructions for another machine
Apr 24, 2026
1e0a930
P2.6 fix: YaRN RoPE frequency rescaling for MLA long-context (>4K)
Apr 24, 2026
e7b4aef
P2.6 fix: YaRN RoPE frequency rescaling for MLA long-context (>4K)
Apr 24, 2026
01d03a4
Refresh .continue-here.md: P2.6 HF parity, GPU backends, YaRN, perf c…
Apr 24, 2026
53cee5d
Fix: prefix-cache reuse no longer accepts an undersized entry
Apr 24, 2026
d7599c4
Refresh .continue-here.md: cache-reuse fix + cross-lib baseline, revi…
Apr 24, 2026
e9c93d2
Perf: add ComputeThreadPool dispatch microbench + cross-lib baseline
Apr 24, 2026
173fd29
Perf: cap default decode thread count at 8 when no NumaTopology (4x s…
Apr 24, 2026
94b9a24
Refresh .continue-here.md: decode-thread-count cap closes the 4x CPU gap
Apr 24, 2026
91ff03d
Vulkan: add matmul_f32 kernel (matches CPU reference to abs 1e-4 / re…
Apr 24, 2026
97d7a7e
Vulkan: add matmul_q8_0 kernel (matches CPU reference to abs 1e-4 / r…
Apr 24, 2026
a4c06ff
Vulkan: add rmsnorm_f32 kernel (matches CPU reference to abs 1e-4 / r…
Apr 24, 2026
912e3d4
Vulkan: add rope_f32 kernel (matches CPU reference to abs 1e-4 / rel …
Apr 24, 2026
268625e
Vulkan: add attention_f32 kernel (matches CPU reference to abs 1e-4 /…
Apr 24, 2026
5ed52c3
Vulkan: add swiglu_f32 kernel (matches CPU reference to abs 1e-4 / re…
Apr 24, 2026
ad507f0
Bench: add PrefillBenchmarks (pp512-equivalent, isolates prefill path)
Apr 24, 2026
f9b1ff6
Perf: 2D (row × token) work partition in GemmTiledQ8Worker (2.7x pref…
Apr 24, 2026
0075494
Perf: prefill-20260424 run — diagnosis + fix writeup + PrefillProfile…
Apr 24, 2026
d649171
Vulkan: add matmul_q8_0_gemm kernel (matches CPU GemmQ8_0 to abs 1e-4…
Apr 24, 2026
e6f5e40
Vulkan: probe subgroup size and arithmetic feature at device init
Apr 24, 2026
19950b2
Vulkan: add subgroup-arithmetic shader variants for attention + rmsnorm
Apr 24, 2026
fd44623
Vulkan: dispatch subgroup-arithmetic shader variant when driver allows
Apr 24, 2026
81a23d0
Vulkan: micro-bench subgroup vs shared-mem reduce + perf note
Apr 24, 2026
e807fd3
Vulkan rope_f32: add NeoX variant parity tests
Apr 24, 2026
dc334d3
Vulkan: scaffold VulkanTransformerModel, weights, KV cache, forward s…
Apr 24, 2026
5490f34
Vulkan kernels: reset descriptor pool after each Launch
Apr 24, 2026
d7accc7
Vulkan: end-to-end CPU-vs-Vulkan integration test on SmolLM-135M
Apr 24, 2026
c256d19
Refresh .continue-here.md: capture CPU parity + full Vulkan forward arc
Apr 24, 2026
e8266d0
Vulkan perf: device-local weights + KV cache via staging (49.4 -> 43.…
Apr 24, 2026
d43ff71
Vulkan perf: fence-pipelined forward, one submit per forward (43.0 ->…
Apr 24, 2026
7566ee8
Vulkan perf: descriptor-set cache per kernel (15.7 -> 13.2 ms/forward)
Apr 24, 2026
6f509de
Vulkan perf: .perf-runs writeup for the three-step perf wave
Apr 24, 2026
73f9424
Vulkan Q8_0: weights can stay on device as Q8_0 blocks
Apr 24, 2026
944cd67
Vulkan Q8_0: route matmuls through Q8_0 kernels end-to-end
Apr 24, 2026
5d04691
Vulkan Q8_0 end-to-end: .perf-runs writeup
Apr 24, 2026
32a15b0
Vulkan: upload embedding table once at construction, not per-forward …
Apr 24, 2026
8705086
Vulkan: probe VK_KHR_cooperative_matrix at device init
Apr 24, 2026
b56a696
Vulkan: add matmul_q8_0_gemm_coopmat kernel (790 GFLOPS at 64x4096x40…
Apr 24, 2026
8d241c3
Vulkan: add attention_f32_coopmat kernel (opt-in via env var)
Apr 24, 2026
c8af81a
Vulkan forward: route Q8_0 prefill matmul through coopmat kernel
Apr 24, 2026
e6ce623
Vulkan forward: eliminate 120 residual-copy dispatches via hidden-slo…
Apr 24, 2026
3f7fed3
wip: pause at v0.2.0-alpha.2 — handoff for next session
Apr 25, 2026
3f45231
Vulkan: fuse rmsnorm + matmul_q8_0 into one shader (sub-tile design)
Apr 25, 2026
3042369
docs: News entry + handoff update for B2 rmsnorm+matmul fusion
Apr 25, 2026
432118d
Vulkan: add MLA attention F32 kernel + parity tests (issue #3, step 1)
Apr 25, 2026
91e4616
Vulkan: add MLA RoPE F32 kernel + parity tests (issue #3, step 2)
Apr 25, 2026
391f13b
Vulkan: add MlaVulkanKvCache + lifecycle tests (issue #3, step 3)
Apr 25, 2026
db09d46
docs: handoff update — MLA Vulkan port 3/4 infrastructure pieces landed
Apr 26, 2026
a506a5f
Vulkan: fix matmul_q8_0 GEMV stride bug at K=32 with M>1 (issue #1)
Apr 26, 2026
98fee09
Vulkan: add MoE top-k softmax kernel + parity tests (issue #4, step 1)
Apr 26, 2026
5608f98
Vulkan: move host-only activation scratch buffers to device-local memory
Apr 26, 2026
d88664f
Vulkan: add MLA kv_b split kernel + parity tests (issue #3, step 4-pre)
Apr 26, 2026
3cd3774
docs: handoff update — all 4 MLA infra pieces + MoE step 1 + GEMV fix…
Apr 26, 2026
416363c
Vulkan: add bias_add_f32 kernel + wire it in (issue #7)
Apr 26, 2026
15df02f
wip: pause-work — MLA + MoE + bias_add + GEMV fix + device-local land…
Apr 26, 2026
1aeef57
Vulkan: wire MLA forward-pass integration (issue #3, step 4)
Apr 26, 2026
e3ea2a8
Vulkan: add MoE indexed matmul + weighted scatter kernels (issue #4, …
Apr 26, 2026
9a14781
Vulkan: wire MoE forward integration (issue #4, step 2)
Apr 26, 2026
44b7ae2
Vulkan: replace MoE broadcast loop with fused shader (issue #4 follow…
Apr 26, 2026
b32ed1b
Vulkan: support MoE shared experts (DeepSeek-V2/V3) (issue #4 follow-up)
Apr 26, 2026
8ea1f9a
Vulkan: add MoE Granite + Phi-3.5/Qwen MoE convention parity tests (i…
Apr 26, 2026
28b1f0e
Vulkan: add tiled MoE indexed matmul + dispatch routing (issue #4 fol…
Apr 26, 2026
4610010
Vulkan: support Qwen1.5-MoE sigmoid-gated shared expert (issue #4 fol…
Apr 26, 2026
022ba11
Vulkan: add silu_inplace_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
a80ba51
Vulkan: add conv1d_causal_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
2486175
Vulkan: add mamba2_selective_scan_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
757f3fb
Vulkan: add relu_squared_inplace_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
bb1ffc8
Vulkan: add ssm_d_skip_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
6b021db
Vulkan: add group_rmsnorm_f32 kernel (issue #5 SSM foundation)
Apr 26, 2026
4abe4c2
Vulkan: wire NemotronH hybrid SSM+Attention+MLP forward (issue #5 Nem…
Apr 26, 2026
0c5b8dc
Vulkan: add mamba3_qk_norm_f32 kernel (issue #5 Mamba-3 foundation)
Apr 26, 2026
7f3846d
Vulkan: add mamba3_canonical_ssd_siso_f32 kernel (issue #5 Mamba-3 fo…
Apr 26, 2026
6ea0321
Vulkan: add mamba3_data_rope_f32 kernel (issue #5 Mamba-3 foundation)
Apr 26, 2026
36e0c0a
Vulkan: add mamba3_canonical_ssd_mimo_f32 kernel (issue #5 Mamba-3 fo…
Apr 27, 2026
49bc557
wip: pause-work — MoE feature complete + NemotronH wired + Mamba-3 ke…
Apr 27, 2026
e40ada4
Vulkan: wire Mamba-3 SISO end-to-end forward (issue #5 Mamba-3 model …
Apr 27, 2026
7142f31
Vulkan: wire Mamba-3 MIMO scan into VulkanMamba3TransformerModel (iss…
Apr 27, 2026
4f280ad
Vulkan: add mamba3_chunk_boundary_f32 kernel (issue #5 Mamba-3 stream…
Apr 27, 2026
dfc9759
Vulkan: wire Mamba-3 streaming-chunk boundary state (issue #5)
Apr 27, 2026
2d212a6
Vulkan: Q8_0 projection-weight upload for NemotronH (issue #5)
Apr 27, 2026
9d81f17
Vulkan: Q8_0 router gate + shared-expert weight upload for MoE (issue…
Apr 27, 2026
7175038
Vulkan: add ssm_split_xbc_f32 kernel (issue #5 SSM follow-up)
Apr 27, 2026
fa370b5
Vulkan: replace per-token NemotronH split-xBC loop with fused dispatc…
Apr 27, 2026
effd8fc
Vulkan: Q8_0 projection-weight upload for Mamba-3 (issue #5)
Apr 27, 2026
5b2add7
Merge feature/mamba-3-phase-c — MLA Phase C hybrid cache
Apr 27, 2026
4b54a72
HfConfigExtractor: default DeepSeek-V2/V3 to Phase C latent cache
Apr 27, 2026
19177e4
Merge issue/yarn-mla-longctx — YaRN RoPE freq rescaling for MLA >4K
Apr 27, 2026
afb2272
Vulkan: Q4_K_M matmul kernels (GEMV + GEMM) — Phase 1 of K-quant work
Apr 27, 2026
b1ee6bc
Vulkan: Q4_K_M upload paths + dispatcher routing — Phase 1 wiring
Apr 27, 2026
15099b9
Vulkan: Q5_K_M matmul kernels (GEMV + GEMM) — Phase 1 sibling of Q4_K
Apr 27, 2026
83e0732
Vulkan: Q5_K_M upload paths + dispatcher routing — Phase 1 wiring
Apr 27, 2026
29a1459
Vulkan: Q6_K_M matmul kernels (GEMV + GEMM) — Phase 1 sibling of Q4_K…
Apr 27, 2026
39b7646
Vulkan: Q6_K_M upload paths + dispatcher routing — Phase 1 wiring
Apr 27, 2026
d1a00b1
CUDA bring-up on RTX 3060 / SM 8.6
jamesburton Apr 24, 2026
ac83a75
Fix CudaLogitComparisonTest prefill-position indexing
jamesburton Apr 24, 2026
3136f33
Tests: CUDA sibling HF-parity gate (SmolLM-135M Q4_K_M GREEN on RTX 3…
jamesburton Apr 24, 2026
4d628c7
Benchmarks: CUDA variant of InferenceBenchmarks
jamesburton Apr 24, 2026
25a3195
.continue-here.md: CUDA branch pickup notes
jamesburton Apr 24, 2026
01ad89f
CUDA: LoadFromSafetensors — HF-parity gate activates
jamesburton Apr 24, 2026
1bea191
native/build_ptx.bat: use %CUDA_PATH%\bin\nvcc.exe explicitly
jamesburton Apr 24, 2026
c1b1da3
native: default PTX arch compute_61 → compute_75 for CUDA 13
jamesburton Apr 24, 2026
d54b4c1
CUDA 13.1 + VS 2022 BuildTools: rebuild PTX to sm_75
jamesburton Apr 24, 2026
ce77999
CUDA 13: resolve cuBLAS from bin\x64 (subfolder relocation)
jamesburton Apr 24, 2026
ef6cab8
CUDA: per-category decode profiler (cuEvent-based)
jamesburton Apr 24, 2026
422c71a
CUDA: decode-step device-resident seq_kv / write-pos scaffolding
jamesburton Apr 24, 2026
1a89f8d
CUDA: capture decode forward into a CUDA Graph, replay per token
jamesburton Apr 24, 2026
4965545
CUDA: profile-cuda-decode --compare and graph/eager equivalence test
jamesburton Apr 24, 2026
3b199f4
CUDA: pack Q/K/V and Gate/Up quantized weights for fused decode GEMV
jamesburton Apr 24, 2026
b229b19
CUDA: use fused Q/K/V and Gate/Up GEMV on the decode path
jamesburton Apr 24, 2026
a0be8c1
.continue-here.md: CUDA decode 87 → 188 tok/s session pickup
jamesburton Apr 24, 2026
d15bbe7
CUDA: graph-capture-compatible quantized KV cache
jamesburton Apr 24, 2026
d5e6033
CUDA: tests + bench coverage for quantized KV graph capture
jamesburton Apr 24, 2026
05e1447
CUDA: fused decode-step RoPE + KV-cache write kernel
jamesburton Apr 24, 2026
5733a7e
CUDA: wire fused RoPE+KV-write into eager decode
jamesburton Apr 24, 2026
7d4a4dd
.continue-here.md: KvUpdate fusion + Quantized-KV graph landed
jamesburton Apr 24, 2026
23fd492
CUDA: MMQ-style fused dequant+matmul Q4_K GEMV (dp4a)
jamesburton Apr 25, 2026
6d9dcdf
CUDA Norm: vectorized half2/float2, __shfl_xor reduction, fused-add c…
jamesburton Apr 25, 2026
c24a3ee
.continue-here.md: MMQ Q4_K + Norm rewrite + MLA Phase 0 landed
jamesburton Apr 25, 2026
cac802a
CUDA: extend MMQ dp4a path to Q5_K and Q6_K (graph 206 → 217 tok/s)
jamesburton Apr 25, 2026
bc53bdf
.continue-here.md: MMQ Q5_K/Q6_K + correct stale MLA Phase-0 claims
jamesburton Apr 25, 2026
622a609
CUDA: dedup quantized Q/K/V and Gate/Up weights into the packed buffer
jamesburton Apr 25, 2026
0e6f6ad
.continue-here.md: capture Qwen3-8B running + weight dedup + perf obs…
jamesburton Apr 25, 2026
12f6120
docs: research note on MlpUp Q4_K GEMV gap vs llama.cpp
jamesburton Apr 25, 2026
64e7f5d
CUDA: per-row Q4_K/Q5_K/Q6_K embedding lookup kernels
jamesburton Apr 25, 2026
a5aea72
CUDA: route token embedding through per-row K-quant kernels at load
jamesburton Apr 25, 2026
d8f1c94
CUDA: MMVQ-large 1-row-per-block Q4_K/Q5_K/Q6_K GEMV kernels (opt-in)
jamesburton Apr 25, 2026
4883a47
Tests: loosen EagerVsGraphDecode_Q4KM_Match logit-diff tolerance
jamesburton Apr 25, 2026
7408cfc
.continue-here.md: capture MMQ_MAX_CHUNKS fix + MMVQ-large + embeddin…
jamesburton Apr 25, 2026
8acbf74
CUDA: pre-Q8_1 input quant kernel + `_preq` MMQ/MMVQ-large variants
jamesburton Apr 25, 2026
b41c46c
CUDA: wire pre-Q8_1 scratch + flip MMVQ-large default ON for k>=1024
jamesburton Apr 25, 2026
812be77
CUDA tests: pre-Q8_1 + `_preq` GEMV equivalence vs on-the-fly Stage 1
jamesburton Apr 25, 2026
7bcc4f7
.continue-here.md: Qwen3-8B 11.5 → 30.9 tok/s via pre-Q8_1 + MMVQ-large
jamesburton Apr 25, 2026
385ea8f
.continue-here.md: re-bench all 3 models with graph compare; competit…
jamesburton Apr 25, 2026
95feac8
CUDA: graph capture default-ON for all k
jamesburton Apr 25, 2026
762b4bd
CUDA MMQ: dynamic shmem sizing replaces compile-time MMQ_MAX_CHUNKS
jamesburton Apr 25, 2026
bcf155f
.continue-here.md: graph default-ON + dynamic MMQ shmem landed; next:…
jamesburton Apr 25, 2026
dad4cf8
docs: research note on tensor-core (mma) batched MMQ design space
jamesburton Apr 25, 2026
da9d0f6
CUDA MLA Phase 1: kernel + KV cache + weights struct + synthetic tests
jamesburton Apr 25, 2026
ed9466a
CUDA MLA Phase 1: full F32 forward helper + end-to-end tests
jamesburton Apr 25, 2026
c5a1909
.continue-here.md: CUDA MLA Phase 1 landed; MoE FFN now the DeepSeek …
jamesburton Apr 25, 2026
8d76464
docs: refresh CUDA / GPU / ATTENTION for MMQ + MMVQ-large + pre-Q8_1 …
jamesburton Apr 25, 2026
54fe675
scripts: GPU access mutex (gpu-lock.sh) for parallel sub-agents
jamesburton Apr 25, 2026
3773911
CUDA MoE: F32 helper kernels (softmax-topk, axpy, gather, sigmoid-gate)
jamesburton Apr 25, 2026
ff7dcbb
CUDA MoE: per-layer weights bundle (CudaMoeLayerWeights)
jamesburton Apr 25, 2026
7f7cafd
CUDA MoE: F32 forward helper + synthetic equivalence tests
jamesburton Apr 25, 2026
f249d42
Merge cuda-mla-phase-b: latent KV cache + W_UK absorbed attention
jamesburton Apr 25, 2026
8abd725
Merge cuda-mla-fp16: FP16 attention + helpers + dispatch + cache + we…
jamesburton Apr 25, 2026
6b67dec
.continue-here.md: parallel-agent round 4 — MoE + Phase B + FP16 + GP…
jamesburton Apr 25, 2026
5df6f83
.continue-here.md: backfill commits list + suggested-actions for round 4
jamesburton Apr 25, 2026
f56df2b
.continue-here.md: bring fully current after round 4
jamesburton Apr 26, 2026
b2159eb
CUDA: MLA + MoE weight loading in CudaWeights
jamesburton Apr 26, 2026
bfe2351
CUDA: dispatch MLA + MoE through CudaTransformerModel.Forward
jamesburton Apr 26, 2026
82b3208
CUDA: tiny-random DeepSeek-V2 forward parity tests + FfnNorm dtype fix
jamesburton Apr 26, 2026
5f9a948
CUDA: parameterize graph-equivalence test + rollback/graph guard
jamesburton Apr 26, 2026
081e27c
.continue-here.md: rebase + Tier 1+2 (MLA/MoE dispatch + parity tests…
jamesburton Apr 26, 2026
802adc2
GGUF: DeepSeek-V2/V3 config extractor + MLA tensor loader (Phase 1+2 …
jamesburton Apr 26, 2026
9729a4f
.continue-here.md: Round 6 — GGUF DeepSeek-V2 prerequisite Phase 1+2
jamesburton Apr 26, 2026
d3b6b99
GGUF: DeepSeek-V2/V3 MoE 3D-stacked-expert tensor loader (Phase 3 of …
jamesburton Apr 26, 2026
b5fbe12
GGUF: end-to-end DeepSeek-V2 synthetic load integration test
jamesburton Apr 26, 2026
8498fd4
GGUF: fix MLA attention.key_length interpretation (total qk_head, not…
jamesburton Apr 26, 2026
31d5dbe
docs: Round 7 wrap-up + DEEPSEEK_QUANTIZED_GPU_PATH design note for t…
jamesburton Apr 26, 2026
7e44e4c
CUDA: quantized MLA loader infrastructure (#9-i + #9-ii of task #9)
jamesburton Apr 26, 2026
1996cd3
CUDA: wire quantized MLA forward path (#9-iii of task #9)
jamesburton Apr 26, 2026
4f0f3e8
.continue-here.md: Round 8 — task #9 complete (quantized MLA on GPU)
jamesburton Apr 26, 2026
df8bc15
CUDA: real-GGUF quantized MLA layer-0 smoke test (passes!)
jamesburton Apr 26, 2026
27d7038
CUDA: quantized MoE loader infrastructure (#10-i + #10-ii of task #10)
jamesburton Apr 26, 2026
85280af
CUDA: wire quantized MoE forward path + 2-layer real-GGUF smoke (#10-…
jamesburton Apr 26, 2026
c2e01c0
.continue-here.md: Round 9 — task #10 + #11 complete, real DeepSeek-V…
jamesburton Apr 26, 2026
8531a45
CUDA: skip F32 host MoE dequant on GPU loads + 4/8-layer real-GGUF smoke
jamesburton Apr 27, 2026
26728f6
.continue-here.md: Round 10 — pre-merge sweep (8-layer ceiling + 1527…
jamesburton Apr 27, 2026
aaefc8f
CUDA: direct quantized GEMV in MoE forward (Phase A grouped-GEMM win)
jamesburton Apr 27, 2026
d35f520
docs: Round 11 — Phase A direct GEMV landed; document Phase B remaining
jamesburton Apr 27, 2026
297ebc7
CUDA: add 27-layer V2-Lite Q3_K_M smoke test
jamesburton Apr 27, 2026
b57d827
CUDA: Phase B grouped-GEMV kernel for Q4_K MoE (gate/up paths)
jamesburton Apr 27, 2026
bbf4384
.continue-here.md: Round 12 — Phase B kernel landed + Q3_K loader gap…
jamesburton Apr 27, 2026
364bd73
CUDA: Q3_K + Q4_1 + Q5_1 dequant — full V2-Lite-Q3_K_M end-to-end
jamesburton Apr 27, 2026
940323b
.continue-here.md: Round 13 — Q3_K + Q4_1 + Q5_1 dequant; full V2-Lit…
jamesburton Apr 27, 2026
9297436
CUDA: Phase B grouped-GEMV — Q5_K + Q6_K + Q8_0 variants
jamesburton Apr 27, 2026
607c388
.continue-here.md: Round 14 — Phase B grouped-GEMV Q5_K + Q6_K + Q8_0
jamesburton Apr 27, 2026
c59c5f8
.continue-here.md: actionable instructions for the 3 open follow-ups
jamesburton Apr 27, 2026
b8c39f9
CUDA: install-dir fallback in CudaLibraryResolver
jamesburton Apr 27, 2026
237f0f3
CUDA: per-quant K alignment unlocks down_proj GEMV fast path
jamesburton Apr 27, 2026
4f618c5
.continue-here.md: Round 15 — three follow-ups closed (#3 + #1 + #2)
jamesburton Apr 27, 2026
1490a65
.continue-here.md: leaked worktrees fully cleaned up
jamesburton Apr 27, 2026
90bfeed
docs/superpowers/specs: Spec 1 — Q2_K + IQ-family quantization coverage
jamesburton Apr 27, 2026
11f19e7
docs/superpowers/plans: Plan 1.1 — Q2_K full L3 (Phase 1 of Spec 1)
jamesburton Apr 27, 2026
51d6bcb
CPU: Q2_K dequantization
jamesburton Apr 27, 2026
4dd36e0
CPU: Q2_K dequant cleanup — signature, [SkipLocalsInit], stride test
jamesburton Apr 27, 2026
87bed75
CUDA: Q2_K GPU dequant kernel
jamesburton Apr 27, 2026
3020d95
CUDA: Q2_K per-call quantized GEMV
jamesburton Apr 27, 2026
f36b24e
CUDA: Q2_K GEMV cleanup — GetFunction + doc Q2_K addition
jamesburton Apr 27, 2026
f286c05
CUDA: Q2_K MMQ kernel (dp4a fast path)
jamesburton Apr 27, 2026
ca9208a
CUDA: Q2_K MMQ cleanup — doc fix + comment polish
jamesburton Apr 27, 2026
bbc477f
CUDA: Q2_K MMQ pre-Q8_1 variant
jamesburton Apr 27, 2026
5293d37
CUDA: Q2_K MMVQ-large + pre-Q8_1 variants
jamesburton Apr 27, 2026
12a0fa1
CUDA: Q2_K grouped-MoE-GEMV variant
jamesburton Apr 27, 2026
7a2cf49
CUDA: V2-Lite Q2_K full-27-layer real-GGUF smoke
jamesburton Apr 27, 2026
6f905f3
.continue-here.md: Round 16 — Q2_K full L3 lands (Phase 1 of Spec 1)
jamesburton Apr 27, 2026
a6bb7e5
CUDA: Phase 1 final cleanup — DequantizeQ2_K visibility + MoE grouped…
jamesburton Apr 27, 2026
b041866
Post-rebase: parent-primary .continue-here.md + MoE Vulkan-overlay fi…
jamesburton Apr 27, 2026
0b3137c
Tests: real-weight Vulkan parity for 6 architectures (Phase 2)
Apr 27, 2026
5b12f90
Tests: real-weight Vulkan parity via GGUF (Phase 2 — Route A)
Apr 27, 2026
c9c08c5
Vulkan: F16 / BF16 native matmul kernels (GEMV + GEMM + F16 coopmat) …
Apr 27, 2026
6787492
Vulkan: F16 / BF16 upload paths + dispatcher routing — Phase 8 wiring
Apr 27, 2026
2b00a0f
Phase 3: Long-context YaRN reference + verification
Apr 27, 2026
4724397
GgufModelConfigExtractor: default DeepSeek-V2/V3 to Phase C latent cache
Apr 27, 2026
17820df
docs: reflect Phase 1 K-quants + Phase 2 real-weight Vulkan parity + …
Apr 28, 2026
8737008
LoRA: core types + CPU forward path (Phase 4a foundation)
Apr 28, 2026
baeb240
LoRA: HF PEFT adapter loader + unit tests (Phase 4a)
Apr 28, 2026
27f52ec
LoRA: forward parity + multi-adapter switch tests (Phase 4a)
Apr 28, 2026
3b28fa6
LoRA: TinyLlama real-adapter integration test (Phase 4a)
Apr 28, 2026
cf9dfc2
Vulkan: VulkanLoraAdapter device upload + handle cache (Phase 4b)
Apr 28, 2026
731c53c
Vulkan: LoRA delta dispatch in Forward + per-projection wire-up (Phas…
Apr 28, 2026
c578046
Vulkan: real TinyLlama LoRA parity vs CPU (Phase 4b)
Apr 28, 2026
43f0733
LoRA: server API integration — request field + admin endpoints (Phase…
Apr 28, 2026
a7e7883
LoRA: multi-adapter batcher + endpoint/batcher unit tests (Phase 4c)
Apr 28, 2026
9864bc6
LoRA: F16/BF16 native adapter weights + MLA/MoE acceptance + perf ben…
Apr 28, 2026
d1fb906
.continue-here.md: refresh handoff after Phase 1-4 + Phase 8 land
Apr 28, 2026
916c519
Merge branch 'main' of https://github.com/kkokosa/dotLLM
May 1, 2026
a3ad8ef
Attention: add ALiBi and sliding-window coverage
Apr 29, 2026
3d9bdaf
LoRA: wire MLA and MoE deltas
Apr 29, 2026
abb9610
Tests: add gated real-weight Mistral and MoE coverage
Apr 29, 2026
3c63eb0
KV cache: harden paged block storage
Apr 29, 2026
3d0b1dd
Vulkan: add MoE quant and grouped coopmat paths
Apr 29, 2026
ebc8be0
Docs: update Vulkan and model support matrix
Apr 29, 2026
b7dce18
Tests: allow nondeterministic MoE grouping order
Apr 29, 2026
66ae7a1
Complete CUDA iquant parity and perf coverage
jamesburton Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
225 changes: 225 additions & 0 deletions .continue-here.md

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore

# Claude Code local config (machine-specific paths, agent memory)
# Claude Code local config (machine-specific paths, agent memory, session lock)
.claude/local-paths.md
.claude/agent-memory/
.claude/scheduled_tasks.lock

# User-specific files
*.rsuser
Expand Down Expand Up @@ -425,3 +426,12 @@ FodyWeavers.xsd

# dotLLM test model cache
tests/.models/

# Scratch files used during nemotron_h research (do not commit)
_*.cpp
_*.txt
.mamba3-reference/
.mamba3-reference-canonical/
.mamba3-python-venv/
.venv-pyref/
.gpu-lock/
61 changes: 61 additions & 0 deletions .perf-runs/cross-lib-20260424-expA/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
date: 2026-04-24
experiment: A — clamp _decodeThreadCount to min(8, threadCount) when no NumaTopology
baseline: .perf-runs/cross-lib-20260424/ (dotLLM at 8.66 tok/s, 22.17 s wall)
---

## Result

Same harness, same model, same prompt, same host — only change is the
one-line decode-thread-count clamp in `ComputeThreadPool`:

| Backend | Run | tok/s | wall (s) |
|---|---|---:|---:|
| llama.cpp CPU (`-ngl 0`, from baseline) | 1 | 34.73 | 5.53 |
| dotLLM CPU (pre-experiment, from baseline) | 1 | **8.66** | 22.17 |
| dotLLM CPU + experiment A (cold) | 1 | **33.76** | 5.69 |
| dotLLM CPU + experiment A (warm prefix cache) | 2 | 39.03 | 4.92 |
| dotLLM CPU + experiment A (warm prefix cache) | 3 | 39.64 | 4.84 |

First-run / cold comparison: **dotLLM 33.76 vs llama.cpp 34.73 — within 3%**.
The 4× gap reported in the previous cross-lib comparison collapses to noise.

## What changed

One default, in `src/DotLLM.Cpu/Threading/ComputeThreadPool.cs`:

```diff
- : threadCount;
+ : Math.Clamp(DefaultDecodeThreadCountCap /* = 8 */, 2, threadCount);
```

When the pool is built without a `NumaTopology`, `_decodeThreadCount` used
to fall back to `threadCount`, so SpinWait mode ran all 31 workers on a
32-thread host. The `ThreadPoolDispatchBenchmarks` microbench (see
`.perf-runs/cross-lib-20260424/dispatch-microbench.md`) showed that path
collapses: Dispatch(no-op) costs 333 µs at 32T SpinWait vs 1 µs at 8T,
driven by 31 threads hammering one cache line on `_dispatchGeneration`
and a contended `_completion.Signal()` decrement.

Capping to 8 keeps SpinWait in the regime the microbench shows scales
well (2–16 threads, sub-µs dispatch cost). Prefill still uses all 32
threads via EventBased mode — unaffected.

## Why 8

Matches the heuristic already applied when a `NumaTopology` *is*
provided: `topology.MemoryChannelEstimate` (typically 2 channels × 4 on
Zen 5 desktop/workstation = 8). Decode is memory-bandwidth bound, not
compute bound, so extra concurrent loads past a small multiple of memory
channels add cache-line contention without adding useful bandwidth.

## Next

The 3% residual gap vs llama.cpp is within benchmark noise. If we want
to push past llama.cpp on this workload, the remaining levers in
priority order are the ones already listed in
`.perf-runs/cross-lib-20260424/dispatch-microbench.md` §Concrete next-step
experiments B and C (size-gated single-threaded fast path, cache-line
padding in `ComputeThreadPool`). Neither is currently justified by the
numbers — come back to them if we regress or if we see a similar issue
on a host with different topology.
52 changes: 52 additions & 0 deletions .perf-runs/cross-lib-20260424-expA/dotllm-throughput-2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"benchmark": "throughput_openai",
"run_started_at": "2026-04-24T16:48:19.500009+00:00",
"run_finished_at": "2026-04-24T16:48:25.691817+00:00",
"output_path": "C:\\Development\\dotLLM-mamba3\\.perf-runs\\cross-lib-20260424-expA\\dotllm-throughput-2.json",
"base_url": "http://127.0.0.1:8000",
"host_details": {
"captured_at": "2026-04-24T16:48:20.557529+00:00",
"hostname": "Strix",
"host_slug": "strix",
"os": {
"system": "Windows",
"release": "11",
"version": "10.0.26200",
"machine": "AMD64"
},
"manufacturer": "Bosgame",
"model": "BeyondMax Series",
"processor": "AMD64 Family 26 Model 112 Stepping 0, AuthenticAMD",
"logical_cpu_count": 32,
"total_memory_gb": 63.65,
"python_version": "3.12.10",
"ollama_version": "Warning: could not connect to a running Ollama instance",
"gpus": [
{
"Name": "AMD Radeon(TM) 8060S Graphics",
"AdapterRAM": 4293918720,
"DriverVersion": "32.0.12064.27",
"VideoProcessor": "AMD Radeon Graphics Processor (0x1586)",
"Status": "OK"
}
]
},
"models": [
"SmolLM-135M"
],
"results": [
{
"model": "SmolLM-135M",
"completion_tokens": 192,
"toks_per_s": 39.03,
"total_s": 4.92,
"cpu_avg_pct": 0,
"cpu_peak_pct": 0,
"ram_peak_gb": 0.71,
"gpu_util_avg": 25.5,
"gpu_util_peak": 25.5,
"gpu_mem_peak_gb": 3.33,
"response_preview": "Write a concise explanation of dependency injection with one short Python example.\n\n## 1.1.1. Introduction\n\nDependency injection is a technique that allows you to write a single unit of code that can "
}
]
}
52 changes: 52 additions & 0 deletions .perf-runs/cross-lib-20260424-expA/dotllm-throughput-3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"benchmark": "throughput_openai",
"run_started_at": "2026-04-24T16:48:31.857488+00:00",
"run_finished_at": "2026-04-24T16:48:37.834574+00:00",
"output_path": "C:\\Development\\dotLLM-mamba3\\.perf-runs\\cross-lib-20260424-expA\\dotllm-throughput-3.json",
"base_url": "http://127.0.0.1:8000",
"host_details": {
"captured_at": "2026-04-24T16:48:32.801487+00:00",
"hostname": "Strix",
"host_slug": "strix",
"os": {
"system": "Windows",
"release": "11",
"version": "10.0.26200",
"machine": "AMD64"
},
"manufacturer": "Bosgame",
"model": "BeyondMax Series",
"processor": "AMD64 Family 26 Model 112 Stepping 0, AuthenticAMD",
"logical_cpu_count": 32,
"total_memory_gb": 63.65,
"python_version": "3.12.10",
"ollama_version": "Warning: could not connect to a running Ollama instance",
"gpus": [
{
"Name": "AMD Radeon(TM) 8060S Graphics",
"AdapterRAM": 4293918720,
"DriverVersion": "32.0.12064.27",
"VideoProcessor": "AMD Radeon Graphics Processor (0x1586)",
"Status": "OK"
}
]
},
"models": [
"SmolLM-135M"
],
"results": [
{
"model": "SmolLM-135M",
"completion_tokens": 192,
"toks_per_s": 39.64,
"total_s": 4.844,
"cpu_avg_pct": 0,
"cpu_peak_pct": 0,
"ram_peak_gb": 0.71,
"gpu_util_avg": 21.5,
"gpu_util_peak": 21.5,
"gpu_mem_peak_gb": 3.33,
"response_preview": "Write a concise explanation of dependency injection with one short Python example.\n\n## 1.1.1. Introduction\n\nDependency injection is a technique that allows you to write a single unit of code that can "
}
]
}
52 changes: 52 additions & 0 deletions .perf-runs/cross-lib-20260424-expA/dotllm-throughput.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"benchmark": "throughput_openai",
"run_started_at": "2026-04-24T16:48:01.079631+00:00",
"run_finished_at": "2026-04-24T16:48:09.358730+00:00",
"output_path": "C:\\Development\\dotLLM-mamba3\\.perf-runs\\cross-lib-20260424-expA\\dotllm-throughput.json",
"base_url": "http://127.0.0.1:8000",
"host_details": {
"captured_at": "2026-04-24T16:48:02.358822+00:00",
"hostname": "Strix",
"host_slug": "strix",
"os": {
"system": "Windows",
"release": "11",
"version": "10.0.26200",
"machine": "AMD64"
},
"manufacturer": "Bosgame",
"model": "BeyondMax Series",
"processor": "AMD64 Family 26 Model 112 Stepping 0, AuthenticAMD",
"logical_cpu_count": 32,
"total_memory_gb": 63.65,
"python_version": "3.12.10",
"ollama_version": "Warning: could not connect to a running Ollama instance",
"gpus": [
{
"Name": "AMD Radeon(TM) 8060S Graphics",
"AdapterRAM": 4293918720,
"DriverVersion": "32.0.12064.27",
"VideoProcessor": "AMD Radeon Graphics Processor (0x1586)",
"Status": "OK"
}
]
},
"models": [
"SmolLM-135M"
],
"results": [
{
"model": "SmolLM-135M",
"completion_tokens": 192,
"toks_per_s": 33.76,
"total_s": 5.686,
"cpu_avg_pct": 0,
"cpu_peak_pct": 0,
"ram_peak_gb": 0.7,
"gpu_util_avg": 27.9,
"gpu_util_peak": 27.9,
"gpu_mem_peak_gb": 3.33,
"response_preview": "Write a concise explanation of dependency injection with one short Python example.\n\n## 1.1.1. Introduction\n\nDependency injection is a technique that allows you to write a single unit of code that can "
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"benchmark": "throughput_openai",
"run_started_at": "2026-04-24T16:48:31.857488+00:00",
"run_finished_at": "2026-04-24T16:48:37.835576+00:00",
"output_path": "C:\\Development\\dotLLM-mamba3\\.perf-runs\\cross-lib-20260424-expA\\throughput-resource-SmolLM-135M.json",
"base_url": "http://127.0.0.1:8000",
"host_details": {
"captured_at": "2026-04-24T16:48:32.801487+00:00",
"hostname": "Strix",
"host_slug": "strix",
"os": {
"system": "Windows",
"release": "11",
"version": "10.0.26200",
"machine": "AMD64"
},
"manufacturer": "Bosgame",
"model": "BeyondMax Series",
"processor": "AMD64 Family 26 Model 112 Stepping 0, AuthenticAMD",
"logical_cpu_count": 32,
"total_memory_gb": 63.65,
"python_version": "3.12.10",
"ollama_version": "Warning: could not connect to a running Ollama instance",
"gpus": [
{
"Name": "AMD Radeon(TM) 8060S Graphics",
"AdapterRAM": 4293918720,
"DriverVersion": "32.0.12064.27",
"VideoProcessor": "AMD Radeon Graphics Processor (0x1586)",
"Status": "OK"
}
]
},
"models": [
"SmolLM-135M"
],
"results": [
{
"model": "SmolLM-135M",
"completion_tokens": 192,
"toks_per_s": 39.64,
"total_s": 4.844,
"cpu_avg_pct": 0,
"cpu_peak_pct": 0,
"ram_peak_gb": 0.71,
"gpu_util_avg": 21.5,
"gpu_util_peak": 21.5,
"gpu_mem_peak_gb": 3.33,
"response_preview": "Write a concise explanation of dependency injection with one short Python example.\n\n## 1.1.1. Introduction\n\nDependency injection is a technique that allows you to write a single unit of code that can "
}
]
}
Loading