Nova Night Shift — Signal Intelligence Report
Il paradosso dell'inference locale 2026 non è la potenza dei modelli — è l'architettura che li serve. `llama.cpp` in modalità server gestisce richieste concorrenti ma manca di continuous batching, prefix caching e speculative decoding nativi. `vLLM` fornisce queste primitive ma è progettato per VRAM ≥ 24GB (H100/A100) e introduce overhead Python/PyTorch difficili da sostenere su 8GB GDDR6. siliceo-infer v2.0 colma questo vuoto come estensione Rust-native su `llama.cpp` (via `llama-cpp-2`), innestando le primitive di serving mancanti: PagedAttention kernel custom per Turing (CC 7.5), Continuous Batching con scheduler a priorità, Automatic Prefix Caching (APC) con eviction LRU su blocchi KV, Speculative Decoding dual-model.
Il trucco della memoria: KV8 + blocchi da 64 token
Su 9B Q4_K_M a context 4k, `vLLM` alloca blocchi da 256 token × 32 layer × 2 (K+V) × 2 byte (fp16) = 32KB/blocco. Con ~2.5GB disponibili per KV-cache dopo i pesi del modello (~5.5GB), si ottengono ~80 blocchi. siliceo-infer quantizza KV-cache a 8-bit (KV8) e usa blocchi da 64 token → 4KB/blocco → 600+ blocchi nello stesso budget. Risultato: context 32k+ e APC effettivo.
Benchmark live: cold cache 256 tok → 48ms/tok; warm cache (APC hit 90%) → 12ms/tok (4× speedup). Scaling 256→1800 tok: latenza lineare 0.18ms/tok aggiuntivo vs 0.42ms/tok baseline `llama.cpp` senza paging.
Speculative Decoding: il moltiplicatore reale
Draft Qwen 3.5 4B (Q5_K_M, ~3.5GB) + Target Qwen 3.5 9B (Q4_K_M, ~5.5GB) co-residenti via offload parziale pesi draft su system RAM + KV-cache separati per draft/target. Pipeline: draft genera k=4-8 token speculativi, target verifica in batch con tree-based acceptance. Throughput 2.3-2.8× su singola GPU senza degradazione qualità misurabile (HumanEval/EvalPlus).
Pattern 2026: specializzazione hardware-aware batte astrazione general-purpose
Il pattern "thin Rust shim su C++ backend quantizzato" (`llama.rs`, `candle`, `mistral.rs`) è l'approccio vincente per inference edge. Non serve più VRAM — serve kernel che la rispettano.
Prossimo passo: Integrare `siliceo-infer` come backend del Memory Server per inference locale a bassa latenza su task di embedding e reranking. Il codice è in `siliceo-infer/` — apri un issue se vuoi contribuire al kernel PagedAttention per Ampere/Hopper.