Quando ci siamo trovati di fronte al termine Janas abbiamo avuto un tuffo al cuore: sì, perché amiamo la Sardegna e la mitologia legata alle sue tradizioni e alla sua storia. Le fatine sarde, delicate e gentili, danno il nome a un progetto innovativo, tutto italiano, che affronta uno dei problemi più concreti dell’intelligenza artificiale locale: eseguire modelli linguistici di grandi dimensioni senza acquistare GPU dedicate con decine di gigabyte di VRAM oppure workstation particolarmente costose.
Così, grazie a Janas e soprattutto al lavoro di Maurizio “camauri” Cammalleri, un modello di intelligenza artificiale da 80 miliardi di parametri, con un file di circa 48 GB, può funzionare su un normale notebook con appena 32 GB di RAM.
Fino a poco tempo fa, una configurazione del genere avrebbe comportato compromessi pesanti, soprattutto in termini di velocità. Janas-LLM (repository GitHub), un nuovo motore di inferenza open source scritto in C, prova a dimostrare che il limite della memoria fisica può essere aggirato sfruttando in modo intelligente le unità SSD NVMe, la struttura dei modelli Mixture of Experts e una gestione selettiva dei pesi.
Janas: come eseguire modelli AI più grandi della memoria disponibile
Un LLM (Large Language Model) deve accedere a grandi quantità di parametri durante l’elaborazione. Se tutti i pesi (valori numerici che il modello apprende durante l’addestramento e che determinano l’importanza delle informazioni elaborate, influenzando il modo in cui riconosce le relazioni tra i dati e genera le risposte) risiedono nella RAM o nella VRAM, CPU e GPU possono recuperarli senza attendere continuamente operazioni di lettura dal disco.
Quando la dimensione del modello supera quella della memoria disponibile, però, la situazione cambia. Il sistema operativo può ricorrere alla memoria virtuale, alle pagine mappate su file o allo swap, ma il costo dei trasferimenti rischia di ridurre drasticamente le prestazioni.
La quantizzazione permette di rappresentare i pesi con un numero inferiore di bit rispetto ai tradizionali 16 o 32 bit. Un modello da decine di miliardi di parametri può così occupare molto meno spazio, pur mantenendo capacità linguistiche generalmente vicine a quelle della versione originale, con differenze che dipendono dalla tecnica e dal modello utilizzati.
Ma spesso non è possibile fare affidamento sullo sula quantizzazione perché un file da 48 GB resta troppo grande per entrare integralmente nei 32 GB di memoria fisica di un portatile, soprattutto considerando sistema operativo, applicazioni e memoria necessaria per le operazioni di inferenza.
Il ruolo decisivo dei modelli Mixture of Experts
Janas affronta la questione in modo intelligente: i pesi rimangono sull’unità di memorizzazione; il motore recupera quelli necessari e conserva nella memoria una selezione dei componenti utilizzati più di frequente. Il concetto consiste nel ridurre la quantità di dati che il processore deve mantenere residenti per produrre ogni token (ne parliamo nell’articolo sull’intelligenza artificiale spiegata facile).
La tecnica funziona particolarmente bene con i già citati modelli Mixture of Experts (MoE), un’architettura che suddivide parte della rete neurale in diversi gruppi di parametri specializzati, chiamati appunto expert.
In un modello denso tradizionale, ogni token attraversa sostanzialmente gli stessi blocchi di calcolo; in un MoE, invece, un componente chiamato router decide quali expert attivare per elaborare il token corrente.
Un modello può quindi contenere decine di miliardi di parametri complessivi, pur utilizzandone una frazione durante ciascun passaggio di elaborazione. Nel caso di Qwen3-Next-80B-A3B, la sigla indica proprio una famiglia con circa 80 miliardi di parametri totali e un numero di parametri attivi per token dell’ordine di alcuni miliardi.
SSD NVMe e letture dirette: perché Janas non si limita a usare lo swap
La quantità di parametri attivi non equivale alla memoria necessaria per eseguire il modello: se gli expert richiesti cambiano continuamente, l’infrastruttura deve comunque essere in grado di recuperarli rapidamente.
Il motore di Janas è abile nel mantenere una cache degli expert nella RAM disponibile e recupera dall’SSD quelli che non sono presenti. Gli expert utilizzati ripetutamente hanno maggiori probabilità di rimanere in memoria, mentre quelli meno richiesti possono tornare a essere recuperati dall’unità locale.
Janas utilizza, su Linux, operazioni di lettura basate su O_DIRECT, un meccanismo che consente di effettuare I/O diretto evitando il normale passaggio dei dati attraverso la page cache del kernel. Inoltre, si serve di tecniche di prefetching per anticipare la selezione dei componenti necessari e guadagnare tempo.
La documentazione tecnica di Janas riporta un esempio con Qwen3-Next-80B e una cache da 4 GB: durante la lettura di un prompt di 4.096 token, il prefetch porta la velocità da 36,8 a 42 token al secondo. Con una cache da 16 GB, il miglioramento risulta molto più contenuto, da 48,5 a 50 token al secondo.
È una conferma del fatto che il vantaggio non proviene da un’accelerazione indiscriminata dei calcoli, ma dalla riduzione delle attese quando una parte importante dei pesi deve ancora essere recuperata.
Janas alla prova dei fatti: prestazioni e limiti di un progetto promettente
I risultati sono notevoli: su un notebook con Intel Core Ultra 9 185H, 32 GB di RAM e SSD NVMe, Janas riesce a eseguire Qwen3-Next-80B-A3B a circa 24 token al secondo, contro i 2,8 token al secondo ottenuti con llama.cpp nella configurazione utilizzata per il confronto.
Sfruttando tecniche di generazione speculativa, in una prova conversazionale la velocità raggiunge circa 37 token al secondo.
Il motore supporta inoltre l’accelerazione tramite Vulkan, sfruttando anche le GPU integrate Intel Arc, e funziona sia su Linux sia su Windows 10 e Windows 11.
Le prestazioni dipendono molto dalla velocità dell’unità SSD, dalla quantità di RAM destinata alla cache e dalle caratteristiche del modello; Janas, inoltre, rimane inoltre un progetto sperimentale, con un supporto hardware e software ancora limitato.
La magia di Janas (GitHub) è comunque quella di aver mostrato che la dimensione complessiva di un modello AI non deve necessariamente coincidere con la quantità di memoria fisica richiesta per utilizzarlo. Sfruttando le caratteristiche dei modelli MoE e gestendo opportunamente gli accessi allo storage, anche un comune notebook può affrontare carichi di inferenza fino a ieri riservati a configurazioni decisamente più costose.
Quella dell’italiano Cammalleri è un’intuizione che potrebbe contribuire a rendere l’AI locale molto più accessibile e versatile.