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.
sudo systemctl set-default multi-user.targetsudo systemctl isolate multi-user.targetLa 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.
sudo systemctl disable nvargus-daemon --nowLe 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 :
lsblk -o NAME,SIZE,MOUNTPOINT,FSTYPELe 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 :
SWAP_PATH=/var/swap
sudo fallocate -l 8G $SWAP_PATHsudo chmod 600 $SWAP_PATHsudo mkswap $SWAP_PATHsudo swapon $SWAP_PATH
echo "$SWAP_PATH none swap sw 0 0" | sudo tee -a /etc/fstabSi le NVMe est un disque séparé et non monté, montez-le d’abord :
sudo mkdir -p /mnt/nvmesudo mount /dev/nvme0n1p1 /mnt/nvmeSWAP_PATH=/mnt/nvme/swapfileLancez 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.