Come eseguire una rete neurale da 744 miliardi di parametri su un normale computer
Quando apri la pagina di un modello come GLM-5.2 con 744 miliardi di parametri o Kimi K3 con 2.8 trilioni, il primo pensiero è piuttosto diretto: ti serve un rack server con una dozzina di GPU H100. Se non hai queste risorse a disposizione, l'unica opzione che resta è pagare per le chiamate API.
Recentemente mi sono imbattuto nel progetto JustVugg/colibri. L'autore ha scritto un motore di inferenza leggero in puro C senza dipendenze di terze parti. Il motore riesce a eseguire modelli MoE massicci su un desktop o laptop normale con 24 GB di RAM, caricando i pesi direttamente da un SSD veloce.
Qual'è il trucco
L'architettura Mixture-of-Experts (MoE) è progettata in modo che l'intero modello non sia necessario per generare un singolo token. Ad esempio, in GLM-5.2 su 744 miliardi di parametri, solo circa 40 miliardi sono attivi. Inoltre, da token a token, solo circa 11 GB di pesi cambiano, corrispondenti agli esperti selezionati dal router.
Invece di cercare di stipare 370 GB di modello nella memoria video, il motore distribuisce i dati attraverso una gerarchia di archiviazione:
- La parte densa del modello (embeddings, attenzione, livelli condivisi) pesa circa 9.9 GB in quantizzazione int4 e rimane permanentemente nella RAM.
- Quasi 20.000 esperti risiedono su un SSD NVMe veloce e vengono caricati su richiesta tramite I/O asincrono.
- Gli esperti più usati si stabiliscono nella cache LRU della RAM o della VRAM.
Essenzialmente, questo funziona come un compilatore JIT, ma per i pesi delle reti neurali. Il motore traccia le statistiche di accesso, ricorda i rami caldi e mette in cache esattamente quegli esperti necessari per il contesto corrente.
Come funziona il motore
Il codebase è conciso. Il core è scritto in C (ogni famiglia di modelli è separata nel proprio file, ad esempio c/colibri.c per GLM) e compila con gcc o clang con supporto OpenMP. Nessun framework enorme o runtime mostruosi. Python è usato solo per la conversione una tantum dei pesi e il wrapper dell'interfaccia web.
Quando genera ogni token, il motore esegue diversi passaggi:
- Calcola il routing un livello avanti attraverso un thread prefetch separato. Il router predice l'esperto necessario con circa il 71% di accuratezza, quindi le letture del disco avvengono in parallelo con i calcoli.
- Unisce le richieste agli esperti identici in un batch per eliminare letture duplicate.
- Legge le tre matrici di ogni esperto in una singola chiamata di sistema
pread. - Salva le statistiche di hit in un file di cronologia in modo che nelle esecuzioni successive, i livelli caldi siano pre-pinnati in memoria.
Il supporto per due dispositivi di archiviazione è implementato in modo interessante. Se distribuisci copie dei pesi su due SSD diversi, il motore distribuisce le richieste degli esperti proporzionalmente alla velocità di lettura di ciascun disco. Una coppia di drive a 9 GB/s e 3 GB/s accelera la lettura di circa un terzo.
Per l'accelerazione del calcolo, sono supportati CUDA, Metal sui chip Apple Silicon e Vulkan. La variante Vulkan funziona anche con GPU più vecchie come l'AMD RX 580 tramite il driver RADV, per il quale il vendor ha chiuso il supporto per l'ultimo ROCm molto tempo fa.
Il pacchetto include una dashboard web con visualizzazione dell'attività degli esperti. Nella pagina Atlas, puoi ruotare una mappa 3D di migliaia di esperti e osservare come diversi gruppi gestiscono codice, argomenti legali o lingue straniere.
Numeri reali di velocità
Non ci sono miracoli, quindi la velocità è limitata dalla larghezza di banda del disco e dalla memoria disponibile.
I benchmark del progetto hanno registrato i seguenti risultati sul modello GLM-5.2:
- Un laptop con 25 GB di RAM e cache fredda produce un modesto 0.05-0.1 token al secondo. È lento, ma il modello risponde senza distorsioni logiche.
- Una workstation con 128 GB di RAM senza GPU discreta raggiunge circa 1.8 token al secondo con cache riscaldata.
- Un laptop con una RTX 5070 Ti mobile accelera a 1.07 token al secondo grazie alla pipeline GPU.
- Un server con sei schede RTX 5090 mantiene gli esperti interamente nella memoria video e mostra 5.8-6.8 token al secondo.
Modelli supportati
Oltre al GLM-5.2 base, l'autore ha aggiunto il supporto per altre quattro architetture:
- Inkling (975B) — eseguire la parte densa in int4 richiede circa 25 GB di RAM e 469 GB di spazio su disco.
- Kimi K3 (2.8T) — un gigante che pesa 1.6 TB, legge i pesi nativi MXFP4 direttamente dagli shard originali senza pre-conversione.
- DeepSeek V4 Flash (284B) — funziona con 167 GB di pesi in formato fp4/fp8 e richiede da 16 a 22 GB di RAM.
- OLMoE (7B) — una variante compatta con 4 GB di pesi per esperimenti rapidi su 8 GB di RAM.
Come eseguire
Il motore è distribuito come binari precompilati per Linux, macOS e Windows, oppure può essere compilato dal sorgente in un minuto:
git clone https://github.com/JustVugg/colibri && cd colibri/c
./setup.sh
Dopo la compilazione, scarica i pesi quantizzati per il modello desiderato da Hugging Face (ad esempio, GLM-5.2 int4 occupa circa 372 GB) e avvia la chat tramite terminale:
COLI_MODEL=/path/to/glm52_i4 ./coli chat
Se vuoi un server locale compatibile con l'API OpenAI insieme al pannello web, esegui:
./coli web --model /path/to/glm52_i4
Prima di lanciare, vale la pena controllare la distribuzione della memoria con ./coli plan ed eseguire un rapido test dell'hardware con ./coli tune.
A chi sarà utile questo progetto
Colibrì è improbabile che si adatti alla produzione ad alto carico a causa della latenza di lettura del disco su hardware consumer. Tuttavia, è una grande scoperta per ricercatori, appassionati e sviluppatori che hanno bisogno di testare il ragionamento dei migliori modelli open-source in locale senza acquistare GPU server per milioni di rubli. Il codice core è compatto e trasparente, rendendo il motore conveniente da usare come playground per i propri esperimenti con I/O e quantizzazione.
Progetti correlati