Nuit Blanche
· 3 min de lecture

Optimiser la RAM du Jetson Orin Nano Super pour l'inférence LLM locale

Optimiser la RAM du Jetson Orin Nano Super pour l'inférence LLM locale

En bref

Trois changements ciblés pour libérer de la RAM sur le Jetson Orin Nano Super 8 Go et y faire tenir des LLM locaux plus gros.

Le Jetson Orin Nano Super embarque 8 Go de mémoire unifiée LPDDR5 partagée entre le CPU et le GPU. Ça paraît confortable jusqu’à ce qu’on compte le système d’exploitation, les services en arrière-plan et les poids du modèle que l’on veut réellement faire tourner. Une installation JetPack par défaut consomme discrètement 1,5 à 2 Go avant même que la charge de travail démarre. Voici comment en récupérer la plus grande partie avec trois changements ciblés.


Pourquoi la mémoire unifiée change la donne

Sur un PC classique, la RAM système et la VRAM du GPU sont deux pools séparés. Sur le Jetson, chaque processus (l’OS, votre application et le moteur d’inférence GPU) puise dans les mêmes 8 Go. Du coup, un environnement de bureau qui tourne à vide n’est pas qu’un gaspillage cosmétique : il entre directement en concurrence avec le GPU pour la bande passante mémoire dont votre modèle a besoin.

Les trois optimisations ci-dessous sont indépendantes de la charge de travail. Elles s’appliquent à tout Jetson Orin Nano Super utilisé comme nœud d’inférence dédié.


1. Désactiver le bureau graphique (≈ 800 Mo récupérés)

Une installation JetPack fraîche démarre sur un environnement de bureau Ubuntu complet (GNOME avec tous ses services). Si votre Jetson est headless ou sert une interface dans le navigateur, ce bureau coûte environ 800 Mo pour rien.

Terminal window
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target

La première commande rend le mode headless permanent au fil des redémarrages. La seconde l’applique immédiatement sans reboot. Pour revenir en arrière à tout moment, remplacez multi-user.target par graphical.target.


2. Désactiver nvargus-daemon

JetPack embarque nvargus-daemon, la pile ISP et caméra de l’interface capteur du Jetson. Si votre projet n’utilise pas de caméra, ce service tourne en arrière-plan et consomme des ressources sans raison.

Terminal window
sudo systemctl disable nvargus-daemon --now

Le flag --now l’arrête immédiatement en plus de le désactiver pour les prochains boots. Le gain est modeste (quelques dizaines de Mo) mais c’est un changement sans risque.


3. Ajouter un swapfile sur disque (le piège ZRAM)

Un JetPack par défaut a déjà le swap activé. Lancer swapon --show révèle quelque chose comme ceci :

NAME TYPE SIZE USED PRIO
/dev/zram0 partition 635M 0B 100
/dev/zram1 partition 635M 0B 100
...

Six périphériques ZRAM pour environ 3,8 Go de swap au total. ZRAM compresse les pages mémoire sur place plutôt que de les écrire sur disque. C’est rapide et utile pour la pression mémoire générale de l’OS, mais ça a une limite fondamentale pour les charges LLM : c’est toujours adossé à la RAM. Quand Ollama charge un modèle qui tient tout juste dans 8 Go et a besoin de déborder quelque part, ZRAM n’offre aucune vraie soupape.

Un swapfile sur disque, sur le NVMe, voilà ce qui fournit une vraie capacité de débordement. D’abord, vérifiez l’organisation actuelle de votre stockage :

Terminal window
lsblk -o NAME,SIZE,MOUNTPOINT,FSTYPE

Le Jetson Orin Nano Super démarre par défaut depuis une carte microSD. Le NVMe, s’il est présent, apparaîtra comme nvme0n1 sans point de montage, sauf si vous l’avez monté explicitement ou migré votre système de fichiers racine dessus (comme décrit dans le guide de migration NVMe). Selon votre configuration, deux cas se présentent.

Si le NVMe est votre disque racine (/ monté sur nvme0n1p1), placez le swapfile directement sous /var/swap :

Terminal window
SWAP_PATH=/var/swap
sudo fallocate -l 8G $SWAP_PATH
sudo chmod 600 $SWAP_PATH
sudo mkswap $SWAP_PATH
sudo swapon $SWAP_PATH
echo "$SWAP_PATH none swap sw 0 0" | sudo tee -a /etc/fstab

Si le NVMe est un disque séparé et non monté, montez-le d’abord :

Terminal window
sudo mkdir -p /mnt/nvme
sudo mount /dev/nvme0n1p1 /mnt/nvme
SWAP_PATH=/mnt/nvme/swapfile

Lancez ensuite le même bloc fallocate que ci-dessus. Ajoutez aussi le montage lui-même à /etc/fstab pour qu’il persiste après les redémarrages.

Après ça, ZRAM et le swapfile NVMe coexistent. Linux assigne une priorité plus haute à ZRAM (il est plus rapide) et bascule sur le fichier NVMe sous vraie pression mémoire. Sur un NVMe de 232 Go, 8 Go de swapfile ne coûtent quasiment rien.

Source

Articles liés