Protocollo di decisione per l'inferenza locale: dalla restrizione VRAM alla validazione dell'isolamento di rete
Immagine generata dalla Redazione di Inferama
01

Definizione del budget di memoria: pesi, KV cache e overhead

Il primo passo del protocollo è determinare l'impronta di memoria reale di un modello, che non si limita ai parametri quantizzati. La memoria totale richiesta è la somma di quattro componenti indipendenti: i pesi del modello, la cache chiave-valore (KV cache), le attivazioni transitorie e l'overhead del framework di inferenza.

Un errore comune è applicare un margine fisso del 20% sui pesi, il che è impreciso perché questi termini scalano in modo diverso. Ad esempio, in un modello da 7B parametri con quantizzazione Q4_K_M, i pesi occupano circa 4,9 GB (0,61 byte per parametro, non 0,5 come suggerisce la formula semplificata a 4 bit). A questo va aggiunta la KV cache, che cresce linearmente con la lunghezza del contesto. Per un contesto di 8.000 token, la KV cache può aggiungere tra 1 e 2 GB aggiuntivi, a seconda dell'architettura di attenzione (GQA o MHA) e della precisione della cache (FP16 o FP8).

Il budget di memoria deve distinguere il file dei pesi dalle risorse utilizzate durante l’esecuzione. Il fatto che un artefatto possa essere scaricato e conservato sul disco non dimostra che il sistema disponga della memoria necessaria per elaborare la richiesta prevista. Pesi, cache, attivazioni temporanee e overhead contribuiscono al consumo, ma non crescono tutti nello stesso modo. Separare queste componenti rende più utile una stima e permette di capire quale requisito cambia quando aumenta il contesto o si modifica il carico di lavoro.

La lunghezza del contesto va quindi indicata insieme alla configurazione della prova. Una conversazione breve non esercita la stessa richiesta di cache di un ingresso lungo; allo stesso modo, il caricamento iniziale del modello non dimostra che l’intera finestra di contesto sia utilizzabile con le risorse disponibili. Il margine deve essere valutato rispetto all’architettura e alla precisione della cache. Applicare una percentuale fissa a qualsiasi file confonde la dimensione dei pesi con il fabbisogno complessivo dell’inferenza.

Dettaglio della memoria per un modello 7B in Q4_K_M (contesto 8k)

Stima basata sulla metodologia di calcolo della VRAM per LLM self-hosted.

ComponenteDimensione stimataNote
Pesi (Q4_K_M)~4,9 GB0,61 byte/parametro (4,9 bit effettivi)
KV Cache (8k token)~1,5 GBDipende da n_kv_heads e head_dim
Overhead (CUDA/Framework)~1,0 GBMinimo fisso per GPU
Totale Minimo~7,4 GBRichiede GPU da 8 GB o superiore
02

Selezione della quantizzazione: precisione effettiva vs. bit nominali

La scelta della quantizzazione deve basarsi sui bit effettivi, non sul nome del file. I formati GGUF mescolano precisioni: Q4_K_M equivale a circa 4,9 bit effettivi (0,61 byte/parametro), mentre Q8_0 sono 8,5 bit (1,06 byte/parametro). Assumere 4,0 bit per Q4 sottodimensiona i pesi di circa il 20%, il che può portare a una selezione di hardware insufficiente.

Il degrado di qualità varia a seconda del task. Q4_K_M offre un equilibrio accettabile per la maggior parte dei casi d'uso generali, con una perdita di qualità stimata tra l'1% e il 3% rispetto a FP16. Q5_K_M è consigliabile se si dispone di VRAM aggiuntiva e si richiede maggiore precisione nel ragionamento o nel codice. Q8_0 si avvicina alla qualità originale ma raddoppia il consumo di memoria rispetto a Q4, quindi è fattibile solo su hardware di fascia alta o per task di valutazione critica.

Il nome della quantizzazione identifica una variante, ma non costituisce da solo una misura completa della memoria. Nei formati a precisione mista alcune parti mantengono precisioni diverse: per questo il calcolo basato soltanto sui bit nominali può sottostimare la dimensione effettiva. Il confronto deve utilizzare l’artefatto e la configurazione realmente scelti, senza dedurre che download con nomi simili abbiano requisiti identici. La misura dei pesi resta distinta dalla memoria necessaria al runtime per lavorare.

Anche il compromesso di qualità dipende dal compito. Una stima generale della perdita non garantisce lo stesso effetto su ragionamento, codice e ogni altra attività. Per confrontare le quantizzazioni è utile mantenere costanti modello, richieste, runtime e criteri di valutazione, cambiando la variante che si vuole esaminare. Il risultato descrive quella prova: non dimostra che la medesima differenza si ripeta in ogni applicazione. Una precisione maggiore può richiedere più memoria senza produrre un vantaggio rilevante per tutti gli usi.

03

Configurazione del runtime di inferenza: Ollama, LM Studio o vLLM

La selezione del motore di inferenza dipende dal carico di lavoro. Per un singolo utente su un desktop, Ollama e LM Studio (basati su llama.cpp) sono paragonabili in termini di prestazioni e offrono un'API compatibile con OpenAI su localhost. Ollama si distingue per la facilità d'uso e la gestione dei modelli con un solo comando, mentre LM Studio offre un'interfaccia grafica più completa per l'esperimentazione.

Per ambienti di produzione con più utenti simultanei, vLLM è superiore grazie all'uso dell'attenzione paginata e dell'elaborazione batch continua. In test di concorrenza, vLLM può servire fino a 44 volte più token al secondo rispetto a llama.cpp sotto carico elevato. Tuttavia, per un singolo utente, la differenza è minima, quindi la scelta deve privilegiare la facilità di audit e l'integrazione con il flusso di lavoro esistente.

Il motore di inferenza deve essere scelto in funzione del carico. La sperimentazione su desktop dà peso alla semplicità di installazione, alla gestione dei modelli e alla possibilità di osservare le singole risposte. Un servizio con utenti simultanei deve considerare anche come le richieste condividono le risorse. Un vantaggio di throughput misurato in concorrenza non equivale automaticamente alla stessa riduzione del tempo di risposta per una conversazione individuale. Il benchmark citato resta legato alle condizioni in cui è stato eseguito.

Un’interfaccia compatibile con un’API nota può facilitare l’integrazione, ma non certifica prestazioni equivalenti né isolamento di rete. La configurazione della prova dovrebbe rendere identificabili artefatto, quantizzazione, runtime, contesto e carico. Se questi elementi cambiano contemporaneamente, diventa più difficile attribuire un miglioramento o un errore a una causa precisa. Una configurazione esplicita aiuta invece a distinguere un limite del modello da un problema di risorse o di esecuzione.

Confronto dei runtime di inferenza locale

Criteri di selezione in base al caso d'uso.

RuntimeCaso d'uso idealeVantaggio chiaveLimitazione
OllamaUso personale / SviluppoFacilità di installazione e API localeMeno controllo sui parametri avanzati
LM StudioEsperimentazione / RAGInterfaccia grafica e gestione dei vettoriApplicazione a codice chiuso (CLI aperta)
vLLMProduzione / Alta concorrenzaThroughput massimo e batching continuoComplessità di configurazione e requisiti GPU
04

Audit dell'isolamento di rete: verifica della privacy

L'isolamento di rete è una strategia di sicurezza che implica la divisione della rete in segmenti indipendenti per prevenire l'accesso non autorizzato o la perdita di dati. Nel contesto dell'inferenza locale, l'obiettivo è garantire che il processo di inferenza non stabilisca connessioni in uscita non autorizzate, mantenendo i dati all'interno della giurisdizione controllata dall'operatore.

Per verificare empiricamente l'isolamento, è necessario utilizzare strumenti di monitoraggio del traffico come Wireshark o tcpdump per catturare le connessioni del processo di inferenza. Inoltre, è possibile configurare regole del firewall per bloccare tutto il traffico in uscita tranne le connessioni necessarie (se presenti). Negli ambienti aziendali, questo si allinea alle pratiche di isolamento di rete gestito, dove l'accesso in uscita è controllato tramite endpoint privati e tag di servizio.

Esecuzione locale e isolamento verificato rispondono a domande differenti. La prima indica dove avviene il calcolo; il monitoraggio del traffico osserva quali connessioni vengono aperte nelle condizioni della prova. Le regole del firewall aggiungono un controllo sulle connessioni consentite. Una cattura senza traffico in uscita descrive l’intervallo osservato e non dimostra, da sola, che ogni esecuzione futura sarà identica. Il termine locale non sostituisce quindi la verifica del comportamento e delle restrizioni effettivamente applicate.

Processo di audit di rete per l'inferenza locale

Passaggi per certificare che lo stack non esponga dati.

  1. 01Identificare il PID del processo di inferenza (es. ollama, vllm).
  2. 02Eseguire un monitor di rete (es. tcpdump -i any host <IP_destinazione>) per catturare il traffico in uscita.
  3. 03Verificare che non ci siano connessioni a domini esterni non autorizzati.
  4. 04Configurare regole del firewall (iptables/nftables) per bloccare le uscite indesiderate.
  5. 05Ripetere il test con carichi di lavoro vari per garantire la consistenza.
05

Validazione dell'integrità dell'artefatto e test di fumo

Prima di integrare il modello nel flusso di lavoro, è cruciale verificare l'integrità dell'artefatto scaricato. Ciò implica confrontare la checksum del file GGUF o safetensors con quella pubblicata dal provider o dalla comunità. Una discrepanza indica una possibile corruzione o manipolazione del file.

Una volta validata l'integrità, è necessario eseguire un test di fumo minimo: generare una risposta semplice per confermare che il modello si carica correttamente in memoria e produce un output coerente. Questo test deve essere eseguito in un ambiente di rete isolato per non compromettere l'audit della privacy. Se il test fallisce, è necessario rivedere la compatibilità tra quantizzazione, runtime e hardware prima di procedere.

Il checksum confronta il file scaricato con l’artefatto atteso. Una corrispondenza aiuta a escludere una modifica o una corruzione del download rispetto al valore pubblicato, ma non verifica la correttezza delle risposte del modello. Lo smoke test affronta un altro aspetto: controlla che l’artefatto si carichi e produca un risultato nella configurazione scelta. Superare questa prova minima è il punto di partenza per una valutazione del carico reale, non la conferma che contesti più lunghi o richieste simultanee funzioneranno allo stesso modo.

Se il caricamento o la prima risposta falliscono, il controllo deve tornare alla compatibilità tra artefatto, quantizzazione, runtime e hardware. Registrare la configurazione e l’errore consente di ripetere la prova senza cambiare implicitamente le condizioni. Le verifiche di integrità, isolamento e funzionamento minimo sono complementari: ognuna controlla un aspetto diverso e nessuna sostituisce le altre. Solo mantenendo queste distinzioni si evita di interpretare una risposta riuscita come dimostrazione generale di qualità o riservatezza.

06

Continua a esplorare

Fonti consultate

03

Correzioni e trasparenza

Se trovi un dato errato o non aggiornato, inviaci la pagina e la fonte da verificare.

Proponi una correzione