🧪 Stanno arrivando nuovi tutorial — dal braccio robotico al sensore
Vai al contenuto

Efficienza della memoria — Eseguire modelli in 8 GB ​

Sul kit Orin Nano Super, gli 8 GB di memoria unificata sono un limite rigido per tutto: il sistema operativo, il desktop, i servizi e il modello stesso. Le leve documentate si distribuiscono su tre livelli — piattaforma, modello e misurazione — e questa pagina segnala dove una tecnica è documentata solo per un modulo più grande.

Il budget di 8 GB in numeri concreti ​

  • Circa 7,6 GB degli 8 GB sono utilizzabili dopo le riservazioni di firmware e kernel — il budget che il blog di NVIDIA sull'efficienza della memoria usa per tutte le sue cifre di "memoria disponibile".
  • La memoria della CPU e la memoria della GPU (CUDA, buffer multimediali) provengono dallo stesso pool fisico; ridurne una aiuta l'altra.
  • La demo di punta del blog — una pipeline VLM da 2B parametri — gira a 4,5 / 7,6 GB (~60%).

Leva 1 — Livello piattaforma: quanto occupano il sistema operativo e i servizi ​

I risparmi seguenti provengono dal blog di NVIDIA sull'efficienza della memoria.

LevaRisparmio documentatoCome
Disattivare il desktop grafico (headless)Fino a 865 MBsudo systemctl set-default multi-user.target
Disattivare i servizi di rete e di journalingFino a 32 MBsudo systemctl disable <service-name>
Carveout di display e fotocameraCirca 100 MB in totaleModifica al device tree del BSP, poi nuovo flashing
Riservazione SWIOTLBCirca 4 MBArgomento del kernel swiotlb=2048, solo se compaiono problemi DMA
Pipeline in stile DeepStreamFino a 412 MBDa container a bare metal (70 MB); da Python a C++ (84 MB); disattivare Tiler/OSD e usare FakeSink (258 MB) — vedere DeepStream
Scelta del framework di inferenzaEviti oltre 2,7 GB di overheadRuntime snelli (runtime C++, llama.cpp); un framework più pesante può aggiungere oltre 2,7 GB già solo all'inizializzazione

Nota di Juxi: le modifiche ai carveout sono modifiche al sorgente del BSP: richiedono un nuovo flashing e fanno risparmiare poco. Cambi una cosa alla volta e conservi un'immagine di flashing funzionante — vedere Flashing e aggiornamenti.

Lo swap non è un risparmio, ma una valvola di sfogo. Il tutorial del fornitore sull'ottimizzazione della RAM sostituisce lo ZRAM con un file di swap da 16 GB su NVMe (sudo systemctl disable nvzramconfig prima); la demo da 8 GB di NVIDIA presupponeva circa 2 GB di swap usati al picco.

Dopo aver fermato un server, liberare la cache ​

L'uso della memoria può restare alto dopo aver fermato un server vLLM o SGLang, o un container Docker (problema noto 5661165 di L4T r39.2.1). Il comando di NVIDIA:

bash
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

La stessa correzione si applica quando una build di engine Edge-LLM esaurisce la memoria: sudo sysctl -w vm.drop_caches=3 più limiti di build più bassi (tutorial del fornitore).

Le modalità di alimentazione cambiano i clock, non la capacità ​

Modalità di alimentazioneID modalitàClock massimo CPUClock massimo GPUClock massimo memoria
15W01.497,6 MHz612 MHz2.133 MHz
25W (predefinita)11.344 MHz918 MHz3.199 MHz
MAXN_SUPER21.728 MHz1.020 MHz3.199 MHz

I clock massimi sopra riportati provengono dalle tabelle Power and Performance di NVIDIA per la r39.2. Le modalità di alimentazione cambiano le frequenze di clock, non la dimensione della memoria — un modello che non entra non entrerà in una modalità più veloce. Si cambia con sudo nvpmodel -q (elenco) e sudo nvpmodel -m <mode_id>; MAXN_SUPER richiede la configurazione di flashing Super ed è sperimentale (secondo quelle tabelle). Se mancano 25W o MAXN SUPER, vedere la Risoluzione dei problemi.

Attenzione: un'allocazione di memoria CUDA eccessivamente grande può riavviare il dispositivo (problema noto 5699079 di L4T r39.2.1). Le indicazioni nella stessa release notano: si assicuri che CUDA e le altre applicazioni non richiedano più memoria di quella fisicamente disponibile, e avvii i processi CUDA con punteggi OOM più alti, così che i processi di sistema non vengano terminati.

Leva 2 — Livello modello: quanto occupano il modello e la sua cache ​

La quantizzazione è la leva singola più importante ​

Orin esegue solo engine FP16, INT8 e INT4; FP8 e FP4 non girano su Orin (classe Thor/Blackwell). Per TensorRT Edge-LLM, usi checkpoint INT4 AWQ o INT4 GPTQ, eviti INT8 GPTQ e non scelga mai checkpoint FP8, MXFP8, FP4 o NVFP4. Vedere Inferenza LLM locale.

Cifre di prima parte: Qwen3 8B da FP16 a W4A16 recupera circa 10 GB; Qwen3 4B da BF16 a INT4 recupera circa 5,6 GB. Il grafico di NVIDIA per il caso 4B è didascalato "Jetson Orin NX 16 GB" — un modulo più grande, quindi tratti le cifre come riferimento, non come promessa per gli 8 GB.

Con quantizzazione a 4 bit e un runtime efficiente, il perimetro documentato da NVIDIA per questo budget è LLM fino a ~10B parametri e VLM fino a ~4B parametri.

Cosa benchmarka davvero NVIDIA su 8 GB ​

TensorRT Edge-LLM pubblica righe Orin Nano 8 GB per modelli da 0.6B a 2B parametri (famiglie Qwen3 e Qwen3.5); 2B è il modello più grande che NVIDIA benchmarka su questo modulo. Esiste un walkthrough di 4B INT4 AWQ come tutorial del fornitore (circa 2 GB di pesi), ma non sono pubblicati numeri ufficiali per i 4B.

Memoria per la costruzione degli engine (TensorRT Edge-LLM) ​

  • --externalize-weights int4_ffn (dense) o --externalize-weights int4_ffn int4_moe (MoE) riduce la memoria di costruzione degli engine sui dispositivi Orin con meno memoria di sistema.
  • Limiti tarati per Orin Nano dal tutorial del fornitore: llm_build --maxBatchSize 1 --maxInputLen 512 --maxKVCacheCapacity 1024. Se la build esaurisce ancora la memoria, liberi prima la memoria di sistema e riduca ulteriormente, ad esempio --maxInputLen 256 --maxKVCacheCapacity 512. Gli engine si costruiscono sul dispositivo e non sono portabili tra moduli.

Cache KV: dimensionamento e riutilizzo ​

La cache KV cresce con la lunghezza del contesto, la dimensione del batch e la concorrenza; fa parte del budget di memoria, non è un dettaglio accessorio.

  • I limiti di build la delimitano: --maxInputLen e --maxKVCacheCapacity; le build di benchmark per Orin Nano usavano maxInputLen 2048 e maxKVCacheCapacity 2200, batch 1.
  • Il riutilizzo della cache KV è una capacità documentata del runtime Edge-LLM: una cache locale al processo e indirizzata per contenuto, per prefissi di input ripetuti, così lo stato di prefill da documenti, turni precedenti, continuazioni generate e prefissi immagine ripetuti viene riutilizzato invece che ricalcolato.
  • Un file di modello che entra può comunque fallire: una segnalazione della community mostra file GGUF da 7,4 GB e 16 GB che falliscono con un errore di allocazione della cache KV su una scheda da 8 GB — aggiunga la cache KV e l'overhead di runtime quando verifica la compatibilità.
  • La riduzione del vocabolario (generazione limitata a un sottoinsieme di token specifico per l'attività) e la potatura dei token visivi (DART) (token visivi duplicati eliminati prima del prefill) sono pagine di funzionalità documentate di Edge-LLM. La build dell'engine visivo accetta anche limiti sui token immagine: --minImageTokens, --maxImageTokens, --maxImageTokensPerImage.

Importante: la cache KV FP8 — il risparmio di memoria della cache KV di circa il 50% — richiede SM89 o successivo (Ada Lovelace e oltre). Orin è SM87, quindi non è disponibile su questo kit. Usi la cache KV FP16.

Un prima/dopo di prima parte ​

Il caso di studio da 8 GB di NVIDIA (blog sull'efficienza della memoria, Tabella 7): modalità headless invece del desktop GNOME completo (1,8 GB → 1,1 GB) più un VLM GGUF a 4 bit (Q4_K_M, 6,6 GB → 2,2 GB). La pipeline non girava su Orin Nano 8 GB prima (il solo VLM usava l'87% della RAM) e ora gira a 4,5 / 7,6 GB (~60%) — oltre 5,1 GB risparmiati. La colonna "prima" è su Orin NX 16 GB: le stesse ottimizzazioni hanno spostato il carico di lavoro sul kit da 8 GB.

Leva 3 — Livello di misurazione: vedere dove va la memoria ​

StrumentoMostraNota
sudo tegrastatsCPU, GPU, memoria, temperatura, alimentazioneLa guida utente del kit di sviluppo: nvidia-smi non è lo strumento di monitoraggio principale su Jetson
nvidia-smi dmonUtilizzo della GPUSecondo la nota di rilascio 5406663; l'utilizzo della GPU nella Jetson Power GUI è "ancora in valutazione"
free -hLa vista del sistema operativo sulla memoriaNon dice quanto può allocare un carico di lavoro GPU
procrankMemoria fisica per processo (PSS)git clone https://github.com/csimmonds/procrank_linux.git, cd procrank_linux/, make, sudo ./procrank
client nvmapProcessi che detengono buffer GPU/multimedialisudo cat /sys/kernel/debug/nvmap/iovmm/clients

"Memoria libera" non è il budget ​

free -h mostra la vista aperta del sistema; le allocazioni della GPU provengono dallo stesso pool con una contabilità separata. In una segnalazione della community su una scheda da 8 GB, cudaMalloc è fallita per la cache KV mentre free -h mostrava ancora 5,7 GiB "liberi" [grado B, segnalazione della community]. Giudichi la compatibilità rispetto al budget di ~7,6 GB, non rispetto a "libera".

Metodo ​

  1. Confermi prima le basi della piattaforma — Verificare il sistema.
  2. Registri una baseline: memoria a riposo, poi sotto carico (tegrastats).
  3. Cambi una leva, misuri di nuovo. Se nulla si è mosso, torni indietro.

Da dove iniziare ​

In base alla dimensione documentata del guadagno:

  1. Runtime e quantizzazione — il livello più grande nel riepilogo di NVIDIA (circa 5–10 GB per framework di inferenza e quantizzazione dei modelli, secondo la Tabella 5 del blog).
  2. Headless — fino a ~865 MB, un solo comando.
  3. Taratura della pipeline — fino a ~412 MB (in stile DeepStream).
  4. Swap su NVMe — sollievo di pressione, non un risparmio.
  5. Carveout e SWIOTLB — circa 100 MB e 4 MB, più un nuovo flashing. Per ultimi.

Se un modello ancora non entra, il problema è il modello, non le impostazioni: passi a uno più piccolo, quantizzi di più, accorci il contesto o riduca il batch — vedere Inferenza LLM locale e le FAQ.

Fonti ​

Stato: bozza, in attesa di revisione da parte di cheny. Basato sulla documentazione ufficiale NVIDIA alla data indicata; non ancora verificato su hardware fisico da Juxi Technology.


NVIDIA® e Jetson™ sono marchi di NVIDIA Corporation. Questa pagina è pubblicata da Juxi Technology e non è una pubblicazione NVIDIA.