In che modo l’offload della CPU permette di eseguire modelli di grandi dimensioni su un server domestico?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

L'offload della CPU consente di eseguire un modello di dimensioni eccessive memorizzando parte dei suoi pesi nella RAM di sistema, invece di richiedere che l'intero modello rimanga nella memoria dell'acceleratore.

Su un server AI domestico, questo può trasformare un modello che non riesce a caricarsi su una singola GPU in un servizio locale utilizzabile. Il compromesso è diretto: diminuisce la pressione sulla VRAM, ma nel percorso di inferenza entrano la memoria della CPU, il traffico PCIe o dell'interconnessione e, talvolta, l'esecuzione sulla CPU. L'offload è innanzitutto una tecnica per aumentare la capacità e diventa una tecnica per migliorare le prestazioni solo quando la gerarchia di memoria è sufficientemente veloce.

Un modello di dimensioni eccessive non si avvia quando il dispositivo veloce non riesce a contenere lo stato richiesto

Un modello locale necessita di spazio per i pesi, oltre a cache KV, attivazioni, buffer temporanei e riserve del runtime. Se l'acceleratore non riesce a contenere lo stato residente richiesto, il caricamento può fallire prima ancora che inizi un'inferenza utile.

Hugging Face Accelerate considera l'inferenza di modelli di grandi dimensioni un problema di distribuzione dei pesi del modello tra i livelli di memoria disponibili. L'offload della CPU aggiunge la RAM di sistema come livello di archiviazione più lento per lo stato del modello.

Il modello diventa eseguibile perché una quantità minore deve rimanere nella VRAM nello stesso momento, non perché l'acceleratore abbia acquisito memoria fisica aggiuntiva.

I pesi trasferiti rimangono nella RAM di sistema finché non servono al relativo livello

Un runtime può mantenere determinati tensori dei parametri sulla CPU mentre il livello o il gruppo di livelli corrente è attivo sulla GPU. Con l'avanzare dell'esecuzione, i pesi necessari vengono trasferiti all'acceleratore e quelli vecchi possono essere riportati indietro o rimossi dalla memoria del dispositivo.

DeepSpeed ZeRO-Inference può mantenere i pesi del modello nella memoria della CPU o su NVMe e trasferirli alla GPU livello per livello. Questo riduce l'occupazione massima dell'acceleratore, ma rende il trasferimento dei pesi parte dell'esecuzione.

Il posizionamento dei livelli può anche essere statico: alcuni livelli rimangono sulla CPU ed eseguono lì, mentre altri restano sulla GPU. Entrambe le strategie scambiano una minore pressione sulla memoria del dispositivo con percorsi di memoria e trasferimento più lenti.

Il percorso PCIe o della memoria unificata diventa parte di ogni token

Se i pesi devono attraversare il bus PCIe durante l'esecuzione del forward pass, la latenza e la larghezza di banda del trasferimento entrano direttamente nel percorso critico dell'inferenza. Un modello che entra interamente nella VRAM può riutilizzare i pesi residenti alla velocità della memoria del dispositivo; un modello con offload può dover recuperare ripetutamente tensori di grandi dimensioni.

PyTorch documenta la memoria host bloccata e il comportamento dei trasferimenti dalla CPU alla GPU, mostrando perché lo spostamento tra host e dispositivo costituisca un dominio prestazionale distinto dai calcoli della GPU.

Per questo l'offload della CPU può trasformare un errore di memoria insufficiente in un modello funzionante ma più lento. Prima si risolve il problema della capacità; il throughput può diminuire sensibilmente.

-15% OFF

Più RAM di sistema aumenta la capacità, ma non garantisce maggiore velocità

È necessaria una quantità sufficiente di RAM per contenere la parte trasferita, oltre al sistema operativo, alla cache delle pagine, ai container, ai database e agli altri servizi del server domestico. Quando il modello finisce nella swap, una configurazione già lenta può diventare impraticabile.

Linux documenta il recupero della memoria e la swap come parte della gerarchia della memoria di sistema. Un modello con offload compete con ogni altro processo per lo stesso budget di RAM.

Un server domestico che esegue anche un NAS, un indicizzatore di foto e un database multimediale dovrebbe lasciare un margine effettivo, invece di dimensionare la RAM solo in base alle dimensioni del file del modello.

Quantizzazione e offload risolvono aspetti diversi del problema di adattamento

La quantizzazione riduce il numero di byte utilizzati dai pesi, diminuendo potenzialmente sia l'occupazione sulla GPU e sulla CPU sia il volume dei trasferimenti. L'offload modifica il luogo in cui questi byte risiedono durante l'esecuzione.

NVIDIA NeMo documenta la quantizzazione post-training in FP8, INT8 e INT4 per ridurre la memoria del modello. Un modello quantizzato può entrare interamente nella GPU ed evitare l'offload; un modello più grande può avere comunque bisogno di entrambe le tecniche.

La sequenza corretta consiste nel decidere prima il livello di precisione e la qualità del modello accettabili, quindi scegliere il posizionamento. Trasferire un formato inutilmente grande può sprecare larghezza di banda.

Usa l'offload della CPU quando eseguire il modello conta più del throughput massimo

Il caso d'uso più indicato è un modello locale utilizzato occasionalmente, che supera la VRAM ma offre comunque una latenza accettabile quando parte del suo stato risiede nella RAM. È meno adatto a un servizio interattivo multiutente, in cui ogni token deve attraversare ripetutamente un collegamento lento.

La guida di ZimaSpace alla memoria e al dimensionamento degli acceleratori per un NAS AI rappresenta il livello di pianificazione: l'offload dovrebbe essere considerato un ripiego per la capacità all'interno del carico di lavoro complessivo del server domestico.

Misura l'uso della VRAM, l'uso della RAM, i byte trasferiti tra host e dispositivo, il tempo al primo token, i token generati al secondo e l'effetto sugli altri servizi self-hosted. Una configurazione che si carica tecnicamente, ma forza l'uso della swap o rallenta il NAS, non è una soluzione adatta.

La spiegazione di ZimaSpace sulla permanenza dei modelli in memoria e sulla loro espulsione tratta il compromesso correlato: liberare memoria sull'acceleratore aumenta la capacità per altre attività, ma può far pagare nuovamente alla richiesta successiva il caricamento o il trasferimento.

Domande frequenti

L'offload della CPU combina RAM e VRAM in un unico pool di memoria veloce?

No. Consente al runtime di distribuire lo stato del modello tra entrambi i livelli, ma la RAM della CPU e la VRAM della GPU hanno larghezze di banda e latenze diverse. I trasferimenti tra le due possono diventare il principale collo di bottiglia dell'inferenza.

Aggiungere più RAM renderà più veloce un modello con offload?

Solo quando il sistema attuale ha poca RAM, utilizza il paging o non riesce a mantenere residente lo stato trasferito previsto. La RAM aggiuntiva inutilizzata non elimina i costi del PCIe o dell'esecuzione sulla CPU.

L'offload su SSD è uguale all'offload della CPU?

No. L'offload su disco aggiunge un livello di archiviazione ancora più lento quando la RAM non è sufficiente. Può aumentare ulteriormente la capacità, ma le pagine del modello devono attraversare lo storage e generalmente la memoria di sistema prima dell'esecuzione sull'acceleratore.

Hub Tecnologico e AI

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.