jetson-headless-mode

Par nvidia · skills

Planifiez et appliquez en toute sécurité des modifications en mode headless sur Jetson pour récupérer la mémoire occupée par l'interface graphique et les démons.

npx skills add https://github.com/nvidia/skills --skill jetson-headless-mode

Mode sans affichage Jetson

Plan-then-apply pour une réclamation de mémoire utilisateur sûre et réversible : basculer la cible systemd par défaut de graphical.target et désactiver un ensemble sélectionné de daemons non essentiels. C'est le gain mémoire le plus rentable et le plus sûr sur Jetson.

Objectif

Construire un plan mode sans affichage approuvé par l'utilisateur à partir de données d'audit en direct, puis appliquer uniquement des modifications sûres et réversibles au niveau utilisateur qui réduisent l'usage mémoire du bureau et des daemons sur Jetson.

Quand l'utiliser

  • « Libère autant de mémoire que possible — je n'ai pas besoin de l'interface graphique. »
  • « Je déploie ce Jetson comme appliance d'inférence / nœud edge. »
  • Après que jetson-memory-audit affiche default_systemd_target=graphical.target ou montre que gdm3 / lightdm / sddm est actif sur un système que l'utilisateur décrit comme sans affichage.

Quand NE PAS l'utiliser

  • L'utilisateur a besoin du bureau local, de la sortie affichage, d'une interface kiosk, ou d'une session X/Wayland. Dans ce cas, ne recommande pas de désactiver la cible graphique ou le gestionnaire d'affichage ; utilise jetson-memory-audit en lecture seule et suggère plutôt des options mémoire sans GUI.
  • Vous n'avez pas de données d'audit actuelles. Exécutez jetson-memory-audit en premier, ou demandez à l'utilisateur son résultat, avant de proposer des modifications ou d'estimer les économies.

Utilise les données actuelles de l'appareil comme source de vérité. La famille Jetson, le SKU/variante, les totaux de mémoire, les services d'affichage actifs, et les estimations d'économies doivent provenir de jetson-diagnostic/scripts/detect_jetson.sh, audit.json, ou une exécution nouvelle de jetson-memory-audit. Si une valeur n'est pas disponible, dis qu'elle est inconnue plutôt que de deviner. Les chiffres d'économies ci-dessous sont des limites supérieures ; le vrai delta est celui qu'un audit avant/après rapportera.

Conditions préalables

  • Commencer à partir d'un snapshot JSON jetson-memory-audit actuel.
  • Confirmer que l'utilisateur n'a pas besoin du bureau local, de la sortie affichage, d'une interface kiosk, ou d'une session X/Wayland.
  • Les modifications mutantes nécessitent sudo et l'approbation explicite de l'utilisateur ; exécute un dry-run en premier sauf si l'approbation a déjà été donnée dans la même invite.
  • Exécute sur l'hôte Jetson ou dans un sandbox visible à l'hôte avec accès à l'état systemd.

Scripts disponibles

Script Objectif Arguments
scripts/plan.sh Lit un JSON d'audit mémoire et émet un plan contenant des recommandations sûres et réversibles. --audit PATH ou --audit -, plus --human.
scripts/apply.sh Affiche ou applique les commandes sûres d'un JSON de plan. Dry-run par défaut. --plan PATH ou --plan -, --apply, --reboot, --drop-caches.

Si votre runtime d'agent supporte run_script, utilise-le pour exécuter scripts/plan.sh et scripts/apply.sh et résume la sortie renvoyée. Sinon, exécute les scripts avec bash depuis la racine du dépôt.

Instructions

  1. Exécute scripts/plan.sh pour lire audit.json (de jetson-memory-audit) et émettre un plan avec uniquement des knobs safety: safe (commutation de cible, gestionnaires d'affichage, audio, impression, modem, etc.).
  2. Affiche le plan à l'utilisateur et confirme.
  3. Exécute scripts/apply.sh --plan plan.json pour un dry run. Réexécute avec --apply pour exécuter. Ajoute --drop-caches pour vider le cache de pages après, ou --reboot pour que l'effet prenne place immédiatement.
  4. Réexécute jetson-memory-audit/scripts/audit.sh pour vérifier le vrai delta.

Flux de travail attendu

Utilise les scripts pour les estimations et l'application afin que les recommandations soient basées sur l'état actuel de l'appareil plutôt que sur le tableau des limites supérieures statiques seul.

  • Pour les invites « que économiserait le mode sans affichage », « estimer », « planifier », ou de planification en production, exécute scripts/plan.sh --audit <audit.json> et rapporte estimated_total_savings_mb, le top recommendations[*].knob, et si un gestionnaire d'affichage ou graphical.target est actif. N'exécute pas apply.sh.
  • Pour les invites où l'utilisateur dit explicitement d'appliquer le mode sans affichage maintenant, exécute scripts/apply.sh --plan <plan.json> une fois en dry run d'abord. Si l'utilisateur a déjà approuvé la mutation dans la même invite, réexécute la même commande avec --apply et mentionne la(les) commande(s) réversible(s).
  • Si l'exécution directe échoue dans un runtime d'agent, invoque les scripts avec bash {baseDir}/scripts/<script-name> .... N'essaie pas de chmod les fichiers skill installés.

Contrat plan / apply

  • plan.sh émet la même forme JSON que jetson-inference-mem-tune/scripts/recommend.py : un tableau de recommendations avec {layer, knob, estimated_savings_mb, safety, command, reversible_command, rationale}.
  • apply.sh filtre les entrées à safety == "safe" avec un command non vide, puis re-vérifie le marqueur de sécurité filtré dans la boucle shell avant l'exécution. Anything else, such as kernel command-line changes, device-tree changes, or accuracy tradeoffs, is out of scope for this skill.
  • Le mode par défaut est dry-run. --apply est requis pour muter le système.

Knobs couverts

Knob Action Économies estimées Réversible ?
disable-graphical-target systemctl set-default multi-user.target jusqu'à 865 MB oui
stop-gdm3 / gdm / lightdm / sddm / display-manager systemctl disable --now <svc> ~200 MB / svc oui
stop-pulseaudio désactiver daemon audio ~8 MB oui
stop-bluetooth désactiver stack Bluetooth ~6 MB oui
stop-ModemManager désactiver gestionnaire WWAN ~4 MB oui
stop-cups / stop-cups-browsed désactiver stack impression ~5 / ~3 MB oui
stop-snapd désactiver daemon Snap ~30 MB oui
stop-whoopsie / kerneloops désactiver rapporteurs de plantage ~4 / ~2 MB oui
stop-avahi-daemon désactiver mDNS ~3 MB oui
stop-unattended-upgrades / packagekit désactiver travaux de paquets en arrière-plan ~6 / ~8 MB oui

NE désactive PAS ces services

  • nvargus-daemon — requis pour tout pipeline caméra libargus.
  • nvgetty.service — console série ; la désactiver peut te verrouiller hors de la récupération.
  • nvpmodel — service mode puissance ; requis pour le tuning horloge/puissance.
  • containerd / docker — laisse actif si tu exécutes des conteneurs (la plupart des workloads d'inférence le font).
  • Services kernel liés à nvfb / nvdisplay — liés à la configuration d'affichage au démarrage, donc cette skill ne les change pas.

Sécurité

  • N'édite pas /boot/extlinux/extlinux.conf, le device tree, ou les réservations mémoire au démarrage.
  • Ne désactive pas les services pour lesquels elle n'a pas d'entrée explicite (pas de « désactiver tout ce qui n'est pas sur liste blanche »).
  • Chaque modification appliquée a une reversible_command documentée. Réexécuter le plan avec les annulations suffit à restaurer.
  • Dry-run par défaut. --apply est le seul moyen de muter.
  • Rapporte uniquement les faits d'appareil et les chiffres d'économies qui proviennent de la détection en direct ou de la sortie d'audit.

Comportement multi-plateforme

Le même ensemble de knobs s'applique à chaque famille Jetson dans la matrice ci-dessus. Le script lit JETSON_GENERATION / JETSON_PRODUCT_LINE / JETSON_VARIANT de jetson-diagnostic/scripts/detect_jetson.sh (et exporte toujours le legacy JETSON_SKU) afin que l'agent puisse attribuer les économies correctement dans son résumé, mais il ne branche pas sur la ligne de produit.

Skills similaires