docs: review GPU and Coral guides in all seven translations

This commit is contained in:
Jonatan
2026-10-17 15:08:53 +02:00
parent ce1a3de719
commit 5210fc415a
54 changed files with 6780 additions and 905 deletions
@@ -0,0 +1,120 @@
{
"meta": {
"title": "Ajouter un Coral TPU à LXC | Documentation ProxMenux",
"description": "Partagez un Google Coral TPU USB ou M.2 / PCIe avec un LXC Proxmox. ProxMenux configure périphériques, droits et montages, démarre le conteneur et installe l’environnement Edge TPU sur les distributions compatibles."
},
"header": {
"title": "Ajouter un Coral TPU à LXC",
"description": "Partagez un Coral USB Accelerator ou M.2 / Mini-PCIe avec un LXC. ProxMenux configure le conteneur et l’environnement Edge TPU. Cette option concerne uniquement le TPU ; pour Quick Sync, VA-API ou NVENC, utilisez aussi Ajouter un GPU à LXC.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Écrit la configuration dans <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> pour <strong>USB Accelerator</strong>, <strong>Coral M.2 / PCIe</strong> ou les deux. Démarre le conteneur et installe <code>libedgetpu</code> de Google. Le GPU se configure séparément avec <lxcGpuLink>Ajouter un GPU à LXC</lxcGpuLink>."
},
"whenUse": {
"heading": "Quand l’utiliser",
"body": "Pour <frigateLink>Frigate</frigateLink> ou une autre application Linux compatible en LXC. Coral exécute l’inférence ML prise en charge à la place du CPU. Les performances dépendent du modèle et du matériel ; le décodage vidéo et les autres tâches consomment toujours des ressources."
},
"prereqs": {
"title": "Avant de commencer",
"drivers": "<strong>Préparez le Coral sur l’hôte</strong>. M.2 / PCIe nécessite le pilote hôte chargé ; USB nécessite l’accès au périphérique et les droits adaptés. Voir <hostLink>Installer Coral TPU sur l’hôte</hostLink>. L’environnement d’exécution doit être disponible dans le conteneur.",
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"container": "<strong>Un LXC existant</strong>, idéalement basé sur <strong>Debian / Ubuntu</strong> : l’installation utilise <code>apt-get</code>. Les <strong>conteneurs d’autres distributions</strong> peuvent choisir le <strong>mode passthrough uniquement</strong>, sans installation APT de <code>libedgetpu</code>. Utile si l’application inclut déjà cet environnement, comme l’image Docker Frigate.",
"downtime": "<strong>Prévoyez une courte interruption</strong> du conteneur. Le script l’arrête pour modifier sa configuration puis le démarre pour installer l’environnement d’exécution. Ces modifications ne nécessitent pas de redémarrage de l’hôte."
},
"hostPrep": {
"title": "L'hôte doit être préparé en premier",
"body": "M.2 / PCIe nécessite <code>gasket</code>/<code>apex</code> sur l’hôte et un périphérique fonctionnel. USB nécessite le périphérique connecté et les droits ; l’application ne doit pas nécessairement tourner sur l’hôte. <code>libedgetpu</code> doit être disponible là où elle s’exécute. Ordre : <strong>préparer l’hôte → accès LXC → configurer l’application</strong>."
},
"running": {
"heading": "Exécuter le script",
"body": "Dans ProxMenux, ouvrez <strong>Matériel : GPU et Coral-TPU → Ajouter un Coral TPU à LXC</strong>.",
"imageAlt": "Option Ajouter un Coral TPU à LXC dans le menu matériel"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Choisissez le conteneur. Le script configure l’accès USB même sans Coral USB connecté, puis ajoute M.2 / PCIe si ce matériel est détecté."
},
"walkthrough": {
"heading": "Étapes de la procédure",
"pick": {
"title": "Choisir le conteneur LXC",
"body": "Le sélecteur affiche les conteneurs admissibles de <code>pct list</code> ; les conteneurs OCI sont masqués et gérés dans Apps du gestionnaire OCI. Choisissez-en un, démarré ou arrêté. Le script l’arrête si nécessaire, le configure puis le démarre pour installer l’environnement d’exécution."
},
"gpuHint": {
"title": "Suggestion facultative pour l’accès GPU",
"body": "Si un GPU est détecté mais non configuré pour ce conteneur, le dialogue recommande <lxcGpuLink>Ajouter un GPU à LXC</lxcGpuLink> pour le décodage vidéo, par exemple Quick Sync, VA-API ou NVDEC. Continuer avec Coral uniquement : Oui poursuit ; Non quitte pour configurer d’abord le GPU."
},
"usb": {
"title": "Configurer l’accès USB du LXC",
"body": "Crée une règle udev hôte pour <code>/dev/coral</code> et monte l’arborescence <strong>entière</strong> <code>/dev/bus/usb</code> dans le conteneur. La configuration est écrite même sans Coral USB connecté et expose d’autres périphériques que le Coral.",
"whyTitle": "Pourquoi monter /dev/bus/usb au lieu de /dev/coral ?",
"whyBody": "Le chemin USB, par exemple <code>/dev/bus/usb/001/005</code>, change après reconnexion. Les anciennes versions montaient le lien <code>/dev/coral</code> et pouvaient conserver un chemin périmé. Monter toute l’arborescence USB rend le nœud actuel visible. L’application peut encore devoir le rouvrir."
},
"pcie": {
"title": "Configurer l’accès M.2 / PCIe du LXC",
"body1": "Si un Coral M.2 / PCIe est détecté et que <code>/dev/apex_0</code> existe, le script utilise l’API Proxmox <code>dev</code> pour gérer cgroup2 dans les LXC privilégiés et non privilégiés :",
"body2": "Si <code>/dev/apex_0</code> n’existe pas encore après <hostLink>Installer Coral sur l’hôte</hostLink>, le script utilise cgroup2 et un montage bind facultatif avec <code>create=file</code>. Cela ne crée pas à lui seul un périphérique fonctionnel :",
"rebootTitle": "Redémarrez l'hôte d'abord si vous venez d'installer des pilotes Coral",
"rebootBody": "Le montage de secours ne charge pas <code>apex</code> sur l’hôte. Chargez le pilote ou redémarrez après installation, puis vérifiez le périphérique. Relancez ensuite le script pour appliquer l’entrée moderne et redémarrez le conteneur."
},
"drivers": {
"title": "Démarrer le LXC et installer l’environnement Coral",
"body": "Démarre le conteneur et attend jusqu’à 15 secondes son état running, puis utilise <code>pct exec</code> pour lancer l’installation à l’intérieur. L’installateur :",
"items": [
"Exécute <code>apt-get update</code>.",
"Installe les prérequis du dépôt Coral : <code>gnupg</code>, <code>curl</code>, <code>ca-certificates</code>.",
"Importe la clé GPG Coral de Google sur <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> (chemin moderne, comme l'installateur hôte utilise) et ajoute le dépôt APT <code>coral-edgetpu-stable</code> avec <code>signed-by=</code>.",
"Installe <code>libedgetpu1-std</code> par défaut. Si un Coral M.2 est détecté, propose <code>libedgetpu1-std</code> ou <code>libedgetpu1-max</code>. Ce choix ne configure pas à lui seul la détection dans l’application."
],
"noIgpuTitle": "Pourquoi pas de pilotes iGPU ici ?",
"noIgpuBody": "Auparavant, il installait aussi <code>va-driver-all</code>, <code>intel-opencl-icd</code> et d’autres paquets Intel pour associer Quick Sync à Coral. Ce mélange causait des erreurs lorsqu’on souhaitait uniquement Coral. L’iGPU se configure désormais avec <lxcGpuLink>Ajouter un GPU à LXC</lxcGpuLink> ; utilisez-le d’abord pour le décodage vidéo matériel.",
"debianTitle": "Autres distributions : accès au périphérique uniquement",
"debianBody": "Utilise <code>apt-get</code> sous Debian/Ubuntu. Pour <strong>Alpine, Arch, RHEL ou SUSE</strong>, détectés via <code>/etc/os-release</code>, propose <em>continuer avec le seul accès matériel</em> ou <em>annuler</em>. Le premier choix configure <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> sans installer <code>libedgetpu</code>. Ce mode convient si l’application inclut déjà cet environnement, comme Frigate Docker. Sinon, installez <code>libedgetpu</code> selon le <coralLink>guide officiel Google</coralLink>."
},
"summary": {
"title": "Résumé",
"body": "À la fin, une liste affiche Coral USB et M.2 avec ✓ ou ⚠ selon la détection matérielle. Le conteneur reste démarré pour configurer Frigate, CodeProject.AI ou votre application."
}
},
"manual": {
"heading": "Procédure manuelle équivalente",
"body": "Si vous voulez voir exactement ce qui va dans la config LXC, ou l'appliquer à la main:",
"usbHeading": "USB Coral",
"pcieHeading": "M.2 / PCIe Coral",
"runtimeHeading": "Dans le conteneur : environnement Coral"
},
"verification": {
"heading": "Vérification",
"body": "Ouvrez un shell dans le conteneur et vérifiez que Coral est visible :"
},
"troubleshoot": {
"heading": "Dépannage",
"apexTitle": "LXC démarré, mais /dev/apex_0 absent",
"apexBody": "Vérifiez le pilote hôte : <code>lsmod | grep apex</code>. S’il manque, essayez <code>modprobe apex</code> ou redémarrez après installation. Une fois <code>/dev/apex_0</code> présent sur l’hôte, vérifiez l’entrée LXC puis redémarrez avec <code>pct stop &lt;ctid&gt; &amp;&amp; pct start &lt;ctid&gt;</code>.",
"replugTitle": "Coral USB disparaît après reconnexion sur un autre port",
"replugBody": "Vérifiez que le LXC monte <code>/dev/bus/usb</code> plutôt que le lien <code>/dev/coral</code>. Sa configuration doit contenir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sans dépendre directement de <code>/dev/coral</code>. Relancez le script si la configuration est ancienne.",
"alpineTitle": "Alpine / Arch / RHEL / SUSE : environnement non installé",
"alpineBody": "Le <em>mode passthrough uniquement</em> configure le périphérique sans installer <code>libedgetpu</code>. Utilisez un paquet compatible ou compilez les sources ; vérifiez sa disponibilité avant une commande comme <code>apk add</code> sous Alpine. Frigate peut inclure cet environnement. Avec Docker dans le LXC, transmettez aussi M.2 via <code>--device /dev/apex_0:/dev/apex_0</code> ou montez USB dans Docker ; le montage LXC seul ne suffit pas.",
"frigateTitle": "Frigate affiche « Coral EdgeTPU detected but not available »",
"frigateBody": "Vérifiez environnement, visibilité et droits de lecture/écriture du processus réel. Pour USB, examinez les droits et l’éventuel groupe <code>plugdev</code>. Pour M.2, inspectez <code>/dev/apex_0</code> avec <code>ls -l /dev/apex_0</code>. Un nom comme <code>apex</code> dans <code>/etc/group</code> ne suffit pas : GID numériques et correspondances LXC doivent coïncider. Vérifiez aussi si un autre processus utilise déjà le TPU ; ne passez pas d’abord en mode privilégié.",
"logsTitle": "Vérifier les journaux de l'hôte et du conteneur",
"logsBody": "Sur l’hôte, examinez les messages noyau avec <code>journalctl -k | grep -i -e apex -e gasket -e usb</code>. Dans le LXC, consultez les journaux applicatifs ; avec Docker imbriqué, utilisez <code>docker logs &lt;container&gt;</code>. Droits, environnement absent, connexion USB ou autre processus utilisant le TPU peuvent provoquer l’échec."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Installer Coral TPU sur l’hôte",
"href": "/docs/hardware/install-coral-tpu-host",
"tail": " — préalable nécessaire pour utiliser une carte Coral M.2 / PCIe dans un CT."
},
{
"label": "Ajouter un GPU à LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — accès GPU, souvent associé à Coral dans Frigate."
}
]
}
}
@@ -0,0 +1,178 @@
{
"meta": {
"title": "Ajouter un GPU à une VM | Documentation ProxMenux",
"description": "Attribuez un GPU physique à une VM Proxmox. ProxMenux vérifie IOMMU, configure VFIO et les périphériques VM et détecte les conflits avec d’autres VM ou LXC."
},
"header": {
"title": "Ajouter un GPU à une VM (passthrough)",
"description": "Détecte les GPU Intel, AMD ou NVIDIA pour l’accès direct depuis une VM. Vérifie IOMMU et les périphériques associés, configure VFIO et la VM et applique ses règles de compatibilité. Vérifiez tous les périphériques concernés.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Automatise la configuration hôte et <code>hostpci</code> décrite dans la <pveLink>documentation PCI passthrough Proxmox</pveLink>. Vérifie les attributions aux <em>autres</em> invités et propose de résoudre les conflits. Ne garantit pas toute combinaison GPU, réinitialisation et pilote invité."
},
"who": {
"heading": "C'est pour qui ?",
"body": "Pour qu’une <strong>machine virtuelle</strong> utilise directement un GPU via VFIO. Tant qu’il est lié à VFIO, le pilote hôte ne peut pas l’utiliser, même VM arrêtée. Pour le partager avec <em>LXC</em>, utilisez <lxcLink>Ajouter un GPU à LXC</lxcLink>."
},
"prereqs": {
"title": "Avant de commencer",
"gpu": "<strong>GPU compatible</strong> physiquement installé. Le script détecte Intel, AMD et NVIDIA via <code>lspci</code>.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
"iommu": "<strong>Prise en charge IOMMU</strong> matérielle et activation dans le micrologiciel si nécessaire (Intel VT-d ou AMD-Vi). Vérifie le système et peut configurer Linux ; ne modifie pas BIOS/UEFI et ne prouve pas qu’un IOMMU inactif y est désactivé.",
"q35": "Cet assistant exige <strong>q35</strong> et refuse <code>i440fx</code>. Le type de machine est distinct du micrologiciel BIOS/UEFI. Changer le chipset d’une VM existante se planifie et n’est pas automatique.",
"q35Check": "qm config VMID | grep machine",
"moreGpus": "Prévoyez <strong>un autre GPU ou accès alternatif</strong> via SSH, IPMI ou série. Réserver le GPU principal peut couper l’affichage local. Pour <em>NVIDIA</em>, une carte hors du groupe IOMMU concerné peut rester sur l’hôte.",
"nvidiaInstalled": "Après <nvidiaLink>installation NVIDIA sur l’hôte</nvidiaLink>, les fonctions sélectionnées sont réservées à <code>vfio-pci</code> plutôt qu’à <code>nvidia</code>. Le module <code>nvidia</code> peut rester disponible pour les <strong>autres</strong> cartes hors du groupe IOMMU concerné. Vérifiez avec <code>nvidia-smi</code>."
},
"pickOne": {
"title": "Attribution exclusive VM ou partage LXC",
"body": "Un GPU lié à <code>vfio-pci</code> pour la transmission VM ne peut pas être utilisé simultanément par l'hôte ou un LXC. Si vous avez deux GPU, vous pouvez en consacrer un à chaque chemin. Si vous n'en avez qu'une, choisissez :",
"vmItem": "<strong>VM :</strong> accès direct et exclusif pour cette VM.",
"lxcItem": "<strong>LXC (<lxcLink>Ajouter un GPU à LXC</lxcLink>) :</strong> partage le périphérique avec l’hôte et d’autres conteneurs via le pilote natif."
},
"running": {
"heading": "Exécuter l’installateur",
"body": "Ouvrez ProxMenux et choisissez <strong>Matériel : GPU et Coral-TPU → Ajouter un GPU à une VM</strong>.",
"imageAlt": "Option du menu pour ajouter un GPU à une VM"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Détection et sélection précèdent les changements principaux, confirmés par un résumé final. L’activation IOMMU possède une confirmation préalable et peut déjà modifier le démarrage. Le nettoyage audio ultérieur peut aussi demander un choix."
},
"walkthrough": {
"heading": "Étapes de la procédure",
"detect": {
"title": "Détecter les GPU et vérifier IOMMU",
"body": "Vérifie IOMMU actif, pas seulement les paramètres. Après confirmation séparée, peut ajouter <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> avec <code>iommu=pt</code>. Choisit <code>/etc/kernel/cmdline</code> si un marqueur ZFS comme <code>root=ZFS=</code> existe, sinon <code>/etc/default/grub</code>. Cette heuristique ne prouve pas le chargeur utilisé. Redémarrez puis vérifiez les groupes réels.",
"tipTitle": "Post-installation déjà configurée ?",
"tipBody": "Si la <postLink>prise en charge VFIO IOMMU</postLink> est configurée et active dans le noyau, le contrôle passe. Un réglage prévu pour le prochain démarrage ne prouve pas son activation actuelle.",
"imageAlt": "Liste des GPU détectés avec l'adresse du fournisseur et du PCI"
},
"preflight": {
"title": "Choisir un GPU et lancer les contrôles préalables",
"intro": "Une fois que vous choisissez le GPU, le script exécute une série de vérifications qui peuvent chaque bloquer les progrès suivants:",
"items": [
"<strong>Contrôle SR-IOV.</strong> Refuse VF et PF avec VF actives : cette procédure configure des périphériques complets, pas SR-IOV. Configurez SR-IOV séparément sur du matériel compatible.",
"<strong>Un seul GPU.</strong> La console locale peut perdre son affichage lorsque VFIO le réserve. Vérifiez d’abord l’accès SSH ou web depuis un autre ordinateur.",
"<strong>Politique de réinitialisation AMD.</strong> Lit <code>/sys/bus/pci/devices/&lt;pci&gt;/reset_method</code>. APU ou carte dédiée sans FLR est <em>bloquée par la politique de l’assistant</em> ; un sous-type inconnu sans FLR exige confirmation. Cela ne prouve pas une impossibilité universelle.",
"<strong>État D3cold.</strong> L’assistant bloque les cartes AMD signalant <code>D3cold</code> en raison du risque d’échec d’activation. Vérifiez alimentation et micrologiciel.",
"<strong>Groupe IOMMU.</strong> Lit <code>/sys/kernel/iommu_groups/</code> et inclut <em>tous les membres sauf les ponts</em>, parfois des contrôleurs réseau ou de stockage. Vérifiez avant confirmation. Si IOMMU attend un redémarrage, seule la fonction GPU est initialement prévue ; contrôlez l’isolation après."
],
"audioIntro": "<strong>Audio associé.</strong> Deux cas selon l’emplacement du contrôleur :",
"audioDgpu": "<strong>GPU dédié :</strong> l’audio HDMI occupe souvent la fonction <code>.1</code> du même emplacement PCI et est inclus si détecté. Si l’hôte l’utilisait, il en perd l’accès lors de la réservation à la VM.",
"audioIgpu": "<strong>Sans fonction audio <code>.1</code> :</strong> l’audio peut être sur un autre périphérique comme <code>00:1f.3</code>. Liste les contrôleurs et pilotes, par exemple <code>snd_hda_intel</code>. Par défaut <strong>aucun</strong> n’est sélectionné ; choisissez seulement le nécessaire."
},
"pickVm": {
"title": "Choisir la VM cible",
"body": "Choisissez la VM. Exige q35 et réutilise les entrées GPU existantes si possible. BIOS/UEFI est un réglage distinct, pas un type de machine. Ne change pas automatiquement chipset ou mode de démarrage du système installé.",
"imageAlt": "Sélection de VM par nom, ID et état"
},
"switchMode": {
"title": "Gérer les attributions existantes",
"intro": "Le script scanne chaque config VM et chaque config LXC sur l'hôte à la recherche du GPU que vous avez choisi. Trois résultats possibles :",
"items": [
"<strong>GPU disponible.</strong> Continue sans retirer d’attribution.",
"<strong>Attribué à une autre VM.</strong> Arrêtez d’abord la source. Vous pouvez <em>garder ses entrées et désactiver le démarrage automatique</em> ou <em>retirer les entrées en conservant le démarrage automatique</em>. Avec <code>vfio-pci</code> déjà actif et sans changement hôte, le transfert VM→VM peut éviter un redémarrage hôte.",
"<strong>Utilisé par LXC.</strong> Pour les conteneurs ordinaires, <em>garder la configuration et désactiver le démarrage automatique</em> ou <em>retirer les périphériques et règles anciennes <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code> en conservant le démarrage automatique</em>. OCI conserve la configuration, est arrêté sans démarrage automatique ; retirez son GPU dans Apps. La détection par famille peut inclure d’autres cartes."
],
"imageAlt": "Boîte de dialogue offrant de supprimer le GPU d'un LXC avant de l'assigner au VM",
"smartTitle": "Vérifier l’audio associé au retrait du GPU",
"smartBody": "Propose ensuite une liste d’<strong>audio potentiellement inutilisé</strong> dans la VM source. Décochez ce qui reste nécessaire. Par exemple, peut conserver <code>02:00.1</code> et proposer de retirer <code>00:1f.3</code>. La liste détermine les suppressions supplémentaires, sans garantie universelle d’association audio/affichage."
},
"audioPick": {
"title": "Sans audio .1, sélectionner les contrôleurs nécessaires",
"body": "Pour les GPU dont l’audio est séparé, une liste présente les contrôleurs audio PCI et leurs pilotes, hors groupe IOMMU déjà inclus. Choisissez seulement ceux nécessaires à la VM, ou aucun.",
"imageAlt": "Boîte de dialogue de liste de contrôle avec chaque contrôleur audio PCI hôte (BDF + pilote) lorsque le GPU n'a pas d'audio associé .1",
"warnTitle": "Ne sélectionnez pas l’audio nécessaire à l’hôte",
"warnBody": "Attribuer l’audio peut retirer l’accès à l’hôte ; le contrôleur ne peut pas appartenir à une autre VM active simultanément. Laissez l’audio facultatif non sélectionné si inutile et vérifiez ses attributions. Le bip de console ne vient pas nécessairement du PCI audio."
},
"summary": {
"title": "Examiner le résumé de la confirmation",
"body": "Vérifiez le plan final, surtout chaque membre IOMMU, et annulez s’il est incorrect. Empêche les changements principaux, sans annuler une activation IOMMU précédemment confirmée.",
"imageAlt": "Résumé des modifications prévues sur hôte et VM"
},
"hostApply": {
"title": "Les changements d'hôte sont appliqués",
"intro": "La phase d’application modifie hôte et VM. Le nettoyage audio peut encore demander un choix. Modifications possibles :",
"items": [
"<code>/etc/modules</code> — ajoute <code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code> (plus <code>vfio_virqfd</code> sur les noyaux &lt; 6.2).",
"<code>/etc/modprobe.d/vfio.conf</code> — AMD/Intel : <code>options vfio-pci ids=&lt;vendor:device,...&gt; disable_vga=1</code>. NVIDIA : <code>softdep nvidia pre: vfio-pci</code> (<code>_drm</code>/<code>_modeset</code>/<code>_uvm</code>) ; la liaison réelle se fait par BDF. AMD ajoute l’ordre de chargement <code>softdep</code>: <code>vfio-pci</code> → <code>radeon</code>/<code>amdgpu</code>.",
"Écrit <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> et <code>kvm.conf</code> avec <code>allow_unsafe_interrupts=1</code> et <code>ignore_msrs=1</code>. Réglages du script, pas des exigences universelles Windows/macOS ; les interruptions non sûres réduisent la protection du remappage.",
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Ces règles globales au fabricant peuvent toucher d’autres cartes utilisant le même pilote. Le module <code>nvidia</code> est bloqué <strong>uniquement</strong> via <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> lorsque <em>toutes</em> les NVIDIA de l’hôte sont réservées à VFIO.",
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>NVIDIA seulement.</strong> Applique <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> au PCI ADD des BDF enregistrés, y compris les fonctions du groupe IOMMU concerné. Hors de ces groupes, <code>nvidia</code> peut rester actif. La politique BDF ne divise pas les groupes matériels.",
"<strong>AMD seulement.</strong> Tente d’extraire la ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT vers <code>/usr/share/kvm/vbios_&lt;card&gt;.bin</code>. Si réussi, utilise <code>romfile=</code>. Une ROM valide ne garantit pas l’initialisation GPU.",
"<strong>NVIDIA seulement.</strong> Arrête et désactive <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> seulement si toutes les NVIDIA sont réservées à VFIO. En usage mixte, conserve les services et <code>nvidia</code> pour les cartes natives.",
"<code>update-initramfs -u -k all</code> — ne fonctionne que si l'un des éléments ci-dessus a réellement changé."
]
},
"vmApply": {
"title": "La configuration VM est appliquée via qm set",
"body": "La configuration VM à <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> est mise à jour via <code>qm set</code> (jamais par <code>sed</code>):",
"after1": "Ajoute <code>x-vga=1</code> pour AMD et NVIDIA, <strong>pas</strong> Intel. C’est la politique du script, pas la preuve que tous les iGPU Intel manquent de micrologiciel ou que ce réglage bloque toujours.",
"after2": "D'autres lignes <code>hostpciN</code> sont jointes si le groupe IOMMU du GPU contient d'autres appareils que vous devez transmettre ensemble."
},
"reboot": {
"title": "Redémarrer si la modification hôte l’exige",
"body": "Suivez le redémarrage demandé si démarrage ou pilotes changent et vérifiez la liaison active avant de lancer la VM. La configuration enregistrée ne prouve pas son activation. VM→VM avec VFIO correct peut éviter de redémarrer l’hôte.",
"imageAlt": "Écran sommaire montrant ce qui a été changé, suivi d'une invite de redémarrage"
}
},
"vendors": {
"heading": "Notes par fabricant",
"nvidiaHeading": "NVIDIA",
"nvidiaBody": "Conserve un ancien contournement <em>Code 43</em> : <code>hidden=1</code>, ID <code>NV43FIX</code> dans <code>args</code>, <code>kvm=off</code>. Pas une exigence universelle des GeForce actuels : NVIDIA a activé le passthrough Windows avec R465. Le code peut avoir d’autres causes ; vérifiez GPU et pilote.",
"nvidiaMultiHeading": "Prise en charge multi-GPU NVIDIA",
"nvidiaMultiBody": "Usage mixte NVIDIA <strong>par BDF</strong>. Enregistre les fonctions <code>vfio-pci</code> par adresse plutôt que seulement par ID <code>vendor:device</code>. Hors des groupes concernés, peut conserver <code>nvidia</code> ; vérifiez avec <code>nvidia-smi</code>. N’isole pas deux cartes du même groupe.",
"amdHeading": "AMD",
"amdBody": "Certains GPU AMD échouent à se réinitialiser après arrêt VM. L’assistant vérifie les capacités annoncées, pas tous les cycles réels. <vendorResetLink>vendor-reset</vendorResetLink> prend en charge une liste limitée et exige noyau compatible et chargement précoce ; il n’est pas installé. <em>RadeonResetBugFix</em> sous Windows dépend aussi du matériel, sans garantie générale.",
"intelHeading": "Intel iGPU",
"intelBody": "L’attribution Intel iGPU complète et SR-IOV sont distincts. Cet assistant réserve le périphérique à une VM sans <code>x-vga=1</code>. <sriovLink>i915-sriov-dkms</sriovLink> exige matériel et noyau pris en charge ; « UHD 630+ » n’est pas une règle de compatibilité. Prévoyez un autre accès hôte."
},
"verification": {
"heading": "Vérification"
},
"troubleshoot": {
"heading": "Dépannage",
"code43Title": "Code 43 dans Windows (NVIDIA)",
"code43Body": "Code 43 ne prouve pas un échec du masquage. Consultez <code>qm config VMID | grep -E \"cpu|args\"</code> avec la vraie VMID, puis <code>hidden=1</code> et <code>hv_vendor_id=NV43FIX</code>. Vérifiez aussi pilote invité, micrologiciel et attribution. Relancer peut quitter si déjà attribué.",
"amdResetTitle": "AMD GPU fonctionne une fois, échoue sur le redémarrage VM",
"amdResetBody": "Un échec de réinitialisation est une cause possible. Redémarrer ou couper/rétablir l’alimentation peut aider temporairement. Vérifiez la compatibilité et le chargement précoce de <code>vendor-reset</code> ; <code>softdep amdgpu pre: vendor-reset</code> seul ne garantit pas un chargement avant VFIO. <em>RadeonResetBugFix</em> exige aussi un GPU compatible.",
"stuckBootTitle": "VM démarrage bloqué / GPU non détecté",
"stuckBootBody": "Consultez l’adresse réelle avec <code>lspci -nnk -s PCI_ADDRESS</code> ; attendez <code>Kernel driver in use: vfio-pci</code>. Remplacez PCI_ADDRESS. Si le pilote natif reste actif, vérifiez la politique de liaison, pas seulement <code>/etc/modprobe.d/blacklist.conf</code> ; NVIDIA utilise les BDF. Lisez <code>dmesg | grep vfio</code>. Après correction, <code>update-initramfs -u -k all</code> puis redémarrage prévu.",
"darkTitle": "La console d'hôte devient sombre après le redémarrage et je ne peux pas SSH",
"darkBody": "Un écran noir ne prouve pas l’arrêt de l’hôte. Si SSH échoue aussi, vérifiez réseau et contrôleurs inclus dans le groupe IOMMU. Récupérez l’accès via IPMI, série ou environnement de secours ; examinez <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> et annulez seulement les attributions/règles concernées. Ne supprimez pas les autres réglages.",
"logTitle": "Vérifiez le journal d'installation",
"logBody": "Chaque exécution écrit <code>/tmp/add_gpu_vm.log</code>. Joignez le journal aux demandes d’aide."
},
"revert": {
"heading": "Annuler manuellement les modifications",
"intro": "Arrêtez la VM et retirez seulement ses attributions PCI concernées dans Matériel ou avec l’index explicite ci-dessous. Cela ne rend pas encore le GPU au pilote hôte. Utilisez Changer le mode GPU pour cette transition et vérifiez les invités concernés."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Installer les pilotes NVIDIA (host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — préparer le pilote des cartes gardées sur l’hôte ; un GPU lié à VFIO ne peut pas l’utiliser simultanément."
},
{
"label": "Ajouter un GPU à LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": "— modèle alternatif: partager le GPU avec plusieurs conteneurs au lieu de le consacrer à un VM."
},
{
"label": "Changer le mode GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — basculer le même GPU entre partage et attribution exclusive."
},
{
"label": "commandes GPU Passthrough",
"href": "/docs/help-info/gpu-commands",
"tail": " — lspci, vérification d’IOMMU et référence de qm set hostpci."
}
]
}
}
@@ -0,0 +1,185 @@
{
"meta": {
"title": "Ajouter un GPU à LXC | Documentation ProxMenux",
"description": "Partagez un GPU Intel, AMD ou NVIDIA avec LXC. ProxMenux configure périphériques, groupes et bibliothèques selon la distribution ; l’application doit prendre en charge et configurer l’accélération."
},
"header": {
"title": "Ajouter un GPU à LXC",
"description": "Partage l’accès GPU avec LXC via les périphériques de l’hôte. Le pilote reste sur l’hôte ; les applications nécessitent des bibliothèques compatibles et leur propre configuration.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Ajoute <code>dev&lt;N&gt;</code> à <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> pour les périphériques <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> concernés. Démarre le conteneur, installe les paquets adaptés et aligne <code>video</code> et <code>render</code>. L’accélération exige matériel, bibliothèques et configuration d’application compatibles."
},
"compare": {
"heading": "Partage LXC ou attribution directe à une VM",
"intro": "LXC partage le noyau et peut <em>partager</em> le GPU entre hôte et conteneurs. Avec une <vmLink>attribution complète à une VM</vmLink>, le périphérique est réservé à cette VM et indisponible pour le pilote de l’hôte.",
"headerFeature": "Fonctionnalité",
"headerLxc": "LXC (cette page)",
"headerVm": "VM",
"rows": [
{
"feature": "L'hôte utilise toujours le GPU?",
"lxc": "Oui",
"vm": "Non — exclusivement au VM"
},
{
"feature": "Plusieurs conteneurs partageant un GPU?",
"lxc": "Oui",
"vm": "Non"
},
{
"feature": "Nécessite IOMMU / VFIO sur l'hôte?",
"lxc": "Non",
"vm": "Oui"
},
{
"feature": "Redémarrer nécessaire ?",
"lxc": "Habituellement non (relancez simplement le CT)",
"vm": "Lors de modifications du pilote hôte ou de l’IOMMU ; pas à chaque attribution"
},
{
"feature": "Systèmes d’exploitation invités",
"lxc": "Seul Linux (LXC est uniquement Linux)",
"vm": "Système invité pris en charge avec pilote GPU compatible"
}
]
},
"prereqs": {
"title": "Avant de commencer",
"gpu": "<strong>GPU sur l’hôte</strong> Intel, AMD ou NVIDIA, détecté via <code>lspci</code>.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
"vfio": "<strong>Le GPU ne doit pas être lié à vfio-pci.</strong> Il nécessite le pilote natif de l’hôte. S’il est attribué à une VM, le script propose <switchLink>Changer le mode GPU</switchLink>.",
"nvidia": "<strong>Pour NVIDIA :</strong> installez d’abord le pilote hôte. Les bibliothèques du conteneur doivent correspondre à sa version. Voir <nvidiaLink>Installer les pilotes NVIDIA sur l’hôte</nvidiaLink>.",
"nvidiaCheck": "nvidia-smi",
"container": "<strong>Un LXC existant.</strong> Le script n’en crée pas. Les deux modes sont pris en charge ; un conteneur <strong>privilégié</strong> n’est pas toujours requis. Périphériques et droits numériques de l’application doivent correspondre."
},
"unpriv": {
"title": "Compatible avec les conteneurs privilégiés et non privilégiés",
"body": "Le script écrit les entrées <code>dev&lt;N&gt;</code> dans la configuration LXC et, sur les conteneurs non privilégiés, aligne les GIDs <code>video</code> et <code>render</code> entre l'hôte et le conteneur de sorte que les nœuds de périphérique GPU soient accessibles de l'intérieur sans que vous ayez à éditer manuellement <code>lxc.idmap</code>."
},
"running": {
"heading": "Exécuter l’installateur",
"body": "Ouvrez ProxMenux et choisissez <strong>Matériel : GPU et Coral-TPU → Ajouter un GPU à LXC</strong>.",
"imageAlt": "Option du menu pour ajouter un GPU à LXC"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Choisissez conteneur et familles GPU, puis passez les contrôles. Le traitement arrête et modifie ensuite le conteneur sans confirmation finale supplémentaire. Le nettoyage VFIO facultatif est confirmé séparément et peut modifier l’hôte auparavant."
},
"walkthrough": {
"heading": "Étapes de la procédure",
"detect": {
"title": "Détecter les GPU hôtes",
"body": "Cherche les contrôleurs GPU avec <code>lspci</code>. Pour NVIDIA, vérifie le module <code>nvidia</code> et <code>nvidia-smi</code> ; la version détectée détermine l’installateur <code>.run</code> du conteneur.",
"tipTitle": "NVIDIA pas prêt?",
"tipBody": "Si le module ou NVIDIA ne fonctionne pas sur l’hôte, utilisez d’abord <nvidiaLink>Installer les pilotes NVIDIA sur l’hôte</nvidiaLink>, puis vérifiez le pilote."
},
"pickCt": {
"title": "Choisir un conteneur LXC",
"body": "Liste les LXC admissibles par ID et nom. Les conteneurs OCI utilisent Apps du gestionnaire OCI pour leurs périphériques. Le conteneur est arrêté pour configuration, démarré pour installation, puis retrouve normalement son état initial.",
"imageAlt": "Sélection d’un conteneur LXC existant"
},
"selectGpu": {
"title": "Sélectionner les familles de GPU",
"body": "La liste choisit des familles de fabricants, pas un périphérique PCI isolé. Intel/AMD ajoutent les nœuds DRI prévus ; NVIDIA ses périphériques disponibles, pouvant couvrir plusieurs cartes. Une seule famille est choisie automatiquement. Vérifiez la liste finale, surtout avec plusieurs GPU.",
"imageAlt": "Liste des familles GPU détectées avec nom et adresse PCI"
},
"preflight": {
"title": "Vérifications préalables",
"imageAlt": "Proposition de changement de mode d’un GPU lié à vfio-pci",
"intro": "Trois contrôles, qui peuvent vous bloquer ou vous rediriger :",
"items": [
"<strong>Contrôle SR-IOV.</strong> L’assistant bloque une VF ou une PF avec VF actives. C’est une limite de sa sélection large de périphériques, pas une interdiction générale dans LXC. Configurez-les séparément.",
"<strong>Lié à vfio-pci.</strong> Le pilote natif ne peut pas créer <code>/dev/dri/*</code> ou <code>/dev/nvidia*</code>. Propose <switchLink>Changer le mode GPU</switchLink> ; suivez les indications de redémarrage avant de revenir.",
"<strong>Déjà configuré.</strong> Si tous les périphériques sont présents, quitte sans réinstaller les bibliothèques. Continue seulement pour les familles sélectionnées manquantes."
]
},
"applyConfig": {
"title": "Appliquer les modifications de configuration LXC",
"body1": "Arrête le conteneur et modifie <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>. Les entrées <code>dev&lt;N&gt;</code> portent les GID choisis. Le mécanisme <code>dev:</code> remplace ici les règles manuelles <code>lxc.mount.entry</code>. Vérifiez configuration et droits.",
"body2": "Exemple après Intel + NVIDIA sur le même conteneur:"
},
"installDrivers": {
"title": "Démarrer le conteneur et installer les pilotes à l'intérieur",
"body": "Démarre le conteneur et attend environ 30 secondes au maximum que <code>pct exec</code> réponde. Détecte la distribution via <code>/etc/os-release</code> et installe les paquets adaptés.",
"headerDistro": "Distribution",
"headerInt": "Intel / AMD",
"headerNvidia": "NVIDIA",
"rows": [
{
"distro": "Alpine",
"intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
"nvidia": "apk add nvidia-utils"
},
{
"distro": "Arch / Manjaro",
"intel": "pacman -Sy intel-media-driver mesa libva-utils",
"nvidia": "pacman -Sy nvidia-utils"
}
],
"debianDistro": "Debian / Ubuntu / autres",
"debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
"debianNvidia": "Extrait <code>.run</code> sur l’hôte → <code>pct push</code> → installe avec <code>--no-kernel-modules --no-dkms</code>.",
"whyTitle": "Pourquoi utiliser l’installateur NVIDIA .run sous Debian",
"whyBody": "Les paquets peuvent ne pas correspondre à l’hôte. Les bibliothèques <strong>doivent correspondre au module hôte chargé</strong> pour NVML et <code>nvidia-smi</code>. Debian/glibc utilise le <code>.run</code> de cette version en cache, l’extrait et l’archive sur l’hôte, le transfère avec <code>pct push</code> et installe avec <code>--no-kernel-modules --no-dkms</code>. Alpine et Arch utilisent leurs dépôts ; vérifiez les versions."
},
"alignGids": {
"title": "Aligner les GID et restaurer l'état",
"body1": "Lit les GID hôte de <code>video</code> et <code>render</code>, avec 44/104 comme valeurs de secours, puis adapte <code>/etc/group</code> dans le conteneur. <code>video:44</code> et <code>render:104</code> sont des exemples. Vérifiez les groupes de l’application et les droits effectifs.",
"body2": "À la fin normale, un conteneur initialement arrêté est de nouveau arrêté ; un conteneur actif reste actif. En cas d’échec de démarrage ou d’installation, vérifiez l’état final et le journal."
}
},
"vendors": {
"heading": "Notes par fabricant",
"intelHeading": "Intel iGPU",
"intelBody": "L’accélération Intel, dont <em>Quick Sync</em>, dépend de la génération, des codecs et de l’application. Partage les nœuds existants comme <code>/dev/dri/card0</code> et <code>/dev/dri/renderD128</code>, dont les numéros peuvent varier. Le pilote natif de l’hôte, par exemple <code>i915</code>, doit les fournir.",
"amdHeading": "AMD",
"amdBody": "AMD utilise DRI pour Mesa/VA-API. Si <code>/dev/kfd</code> existe sur l’hôte, le partage aussi. ROCm/OpenCL exige matériel et bibliothèques compatibles ; partager le périphérique n’installe pas toute la pile ROCm.",
"nvidiaHeading": "NVIDIA",
"nvidiaBody": "Partage les périphériques <code>/dev/nvidia*</code>. <strong>La concordance des versions</strong> est essentielle pour <code>nvidia-smi</code>. Debian/glibc utilise le <code>.run</code> de la version hôte, Alpine/Arch leurs dépôts. Sous 2048 MiB de RAM configurée, la procédure Debian propose une hausse temporaire puis restaure la valeur ; exige aussi 1500 MiB libres sur disque.",
"updateTitle": "Après mise à jour NVIDIA sur l’hôte, vérifiez les bibliothèques LXC",
"updateBody": "D’anciennes bibliothèques peuvent provoquer une erreur dans <code>nvidia-smi</code>. L’<nvidiaLink>installateur NVIDIA de l’hôte</nvidiaLink> propose de mettre à jour les conteneurs. Relancer l’ajout peut quitter si les périphériques existent déjà : cela ne garantit pas la mise à jour. Vérifiez les versions et actualisez les paquets ou l’installation utilisateur adaptée."
},
"verification": {
"heading": "Vérification",
"body": "Dans le conteneur, vérifiez que le GPU est visible et utilisable."
},
"troubleshoot": {
"heading": "Dépannage",
"mismatchTitle": "nvidia-smi: Failed to initialize NVML: Driver/library version mismatch",
"mismatchBody": "Les bibliothèques ne correspondent pas au module chargé. Vérifiez les versions et mettez à jour l’espace utilisateur LXC. Le <code>.run</code> en cache sert à Debian/glibc, mais l’ajout peut quitter si tous les périphériques existent déjà.",
"denyTitle": "Autorisation refusée sur /dev/dri/renderD128 à l'intérieur du conteneur",
"denyBody": "Vérifiez périphérique et droits numériques de <code>render</code>, puis l’appartenance de l’utilisateur à <code>render</code>. Si disponible, ajoutez-le à <code>render</code> avec <code>usermod -aG render &lt;user&gt;</code> en remplaçant le marqueur par le compte réel. Redémarrez sa session. Changer de privilèges n’est pas une solution générale.",
"vainfoTitle": "vainfo dit: VA-API version 1.xx; a échoué à initialiser",
"vainfoBody": "Vérifiez accès et pilote VA-API. Les noms varient selon la distribution : par exemple <code>intel-media-driver</code> pour les Intel récents pris en charge, <code>i965-va-driver</code> pour les anciens compatibles, <code>mesa-va-drivers</code> pour AMD. Le message seul ne prouve pas un paquet manquant.",
"logTitle": "Journal d’installation",
"logBody": "Chaque exécution écrit <code>/tmp/add_gpu_lxc.log</code> sur l’hôte. Joignez le journal aux demandes d’aide."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Installer les pilotes NVIDIA (host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — installez le pilote hôte avant de partager NVIDIA."
},
{
"label": "Ajouter GPU à VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — solution pour réserver un GPU à une VM."
},
{
"label": "Changer le mode GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — basculer le GPU entre partage LXC et attribution VM."
},
{
"label": "commandes GPU Passthrough",
"href": "/docs/help-info/gpu-commands",
"tail": "— référence rapide pour les commandes shell connexes."
}
]
}
}
@@ -0,0 +1,203 @@
{
"meta": {
"title": "Installer Coral TPU sur l’hôte | Documentation ProxMenux",
"description": "Installe les composants Coral sur Proxmox VE selon le matériel détecté : gasket/apex avec DKMS pour M.2 / Mini-PCIe, libedgetpu1-std pour USB. Exécute les deux procédures si les deux types sont détectés."
},
"header": {
"title": "Installer Coral TPU sur l’hôte",
"description": "Préparez l’hôte Proxmox pour Coral et le partage LXC. Détecte M.2 / Mini-PCIe, USB ou les deux, puis installe les modules DKMS pour PCIe et l’environnement Google Edge TPU pour USB.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Un <strong>installateur unique détectant le matériel</strong>. PCIe utilise <code>gasket</code> et <code>apex</code> avec DKMS ; les compilations futures nécessitent sources et en-têtes compatibles. USB utilise <code>libedgetpu1-std</code>. Les deux procédures s’exécutent si les deux types sont détectés. L’environnement USB doit être là où tourne l’application ; il n’est pas nécessairement requis sur l’hôte pour un usage LXC seul."
},
"which": {
"heading": "Quel Coral ai-je ?",
"body": "Les modèles PCIe et USB diffèrent par leur format et leurs besoins. Le script gère les deux ; identifiez votre périphérique avant de le lancer.",
"headerForm": "Facteur de forme",
"headerDetect": "Détection",
"headerInstall": "Type d’installation",
"headerReboot": "Redémarrer ?",
"pcieForm": "M.2 / Mini-PCIe",
"pcieFormSub": "(cartes M.2 avec un ou deux Edge TPU)",
"pcieDetect": "Identifiant fabricant PCI <code>1ac1</code>",
"pcieInstall": "Module noyau (gasket + apex) via DKMS",
"pcieReboot": "Oui",
"usbForm": "Accélérateur USB",
"usbFormSub": "(petit dongle en plastique)",
"usbDetect": "USB <code>1a6e:089a</code> (non programmé) / <code>18d1:9302</code> (programmé)",
"usbInstall": "Environnement utilisateur <code>libedgetpu1-std</code> du dépôt APT Google",
"usbReboot": "Non"
},
"prereqs": {
"title": "Avant de commencer",
"coral": "<strong>Un Coral connecté</strong> (M.2, Mini-PCIe ou USB) pour installer. Sans matériel détecté, le script peut nettoyer ou retirer une installation existante, mais n’installe pas de nouvelle prise en charge matérielle.",
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"internet": "<strong>Accès à Internet</strong> sur l’hôte pour cloner le pilote PCIe depuis GitHub ou télécharger <code>libedgetpu1-std</code> depuis le dépôt APT Google pour USB.",
"headers": "<strong>En-têtes du noyau disponibles via APT</strong> : <code>proxmox-headers-$(uname -r)</code>. Requis seulement pour PCIe/M.2 ; le script les installe.",
"reboot": "<strong>Prévoyez un redémarrage</strong> pour PCIe. Le script tente de charger les modules compilés ; redémarrer vérifie aussi leur chargement automatique."
},
"hostPrepTip": {
"title": "Cela ne prépare que l'hôte",
"body": "Prépare l’hôte pour <em>accéder au périphérique</em>, sans configurer ni tester l’application. Pour <em>utiliser</em> Coral dans une application compatible comme Frigate, suivez <lxcLink>Ajouter Coral TPU à un LXC</lxcLink>."
},
"running": {
"heading": "Exécuter l’installateur",
"body": "Ouvrez ProxMenux sur l’hôte et choisissez <strong>Matériel : GPU et Coral-TPU → Installer/mettre à jour Coral TPU sur l’hôte</strong>.",
"imageAlt": "Option du menu pour installer ou mettre à jour Coral TPU sur l’hôte"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Détecte d’abord le matériel et prépare le plan adapté. L’installation nécessite une confirmation."
},
"walkthrough": {
"heading": "Étapes de la procédure",
"detect": {
"title": "Détection du matériel",
"body": "Cherche le fabricant <code>0x1ac1</code> dans <code>/sys/bus/pci/devices/*/vendor</code> et utilise <code>lsusb</code> pour USB. Il existe <strong>deux</strong> identifiants USB selon l’état du micrologiciel :",
"items": [
"<code>1a6e:089a</code> — Global Unichip, état <em>non programmé</em>, avant le chargement du micrologiciel par l’environnement d’exécution.",
"<code>18d1:9302</code> — Google, état <em>programmé</em>, après chargement du micrologiciel."
],
"outro": "Sans Coral détecté ni installation existante, le script affiche un message et se termine. Des composants présents peuvent ouvrir le menu de nettoyage ou de suppression."
},
"prompt": {
"title": "Confirmation de l’installation",
"body": "Avant l’installation, une boîte de dialogue présente les périphériques et composants prévus. Annuler ignore l’installation. Le nettoyage facultatif des anciens composants possède sa propre confirmation préalable.",
"imageAlt": "Résumé des périphériques Coral et des étapes d’installation"
},
"pcie": {
"title": "PCIe : modules gasket et apex via DKMS",
"body": "Exécuté uniquement pour un Coral PCIe/M.2 détecté. Compile les modules pour le noyau actuellement exécuté sur l’hôte.",
"items": [
"<strong>Nettoyage.</strong> Si une installation précédente de <code>gasket-dkms</code> a laissé les paquets dans un état défectueux, le script tente de la purger avant compilation.",
"<strong>Dépendances de compilation :</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
],
"cloneIntro": "<strong>Clone les sources du pilote.</strong> Préfère <feranickLink>feranick/gasket-driver</feranickLink>, sinon utilise <googleLink>google/gasket-driver</googleLink>. La compilation dépend de la compatibilité du noyau. Les sources Google reçoivent ces correctifs selon la version :",
"kernelPatches": [
"À partir du noyau 6.5, le correctif remplace <code>no_llseek</code> par <code>noop_llseek</code> dans les sources de secours.",
"Noyau 6.13 ou supérieur : transforme l’argument de <code>MODULE_IMPORT_NS(DMA_BUF)</code> en chaîne littérale."
],
"afterItems": [
"<strong>Copie les sources dans <code>/usr/src/gasket-1.0/</code>,</strong> génère <code>dkms.conf</code> et les enregistre avec <code>dkms add</code>.",
"<strong>Compile et installe :</strong> <code>dkms build</code>, puis <code>dkms install</code>. En cas d’échec, affiche les 50 dernières lignes de <code>make.log</code> si disponible.",
"<strong>Crée le groupe <code>apex</code> et les règles udev</strong> (<code>/etc/udev/rules.d/99-coral-apex.rules</code>) pour attribuer le groupe à <code>/dev/apex_*</code>.",
"<strong>Tente de charger les modules :</strong> <code>modprobe gasket</code> et <code>modprobe apex</code>."
],
"imageAlt": "Compilation DKMS et chargement des modules gasket/apex"
},
"usb": {
"title": "USB : environnement Edge TPU de Google",
"body": "Ne fonctionne que si un accélérateur USB a été détecté. Bien plus simple :",
"items": [
"<strong>Ajoute la clé GPG Google</strong> dans <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
"<strong>Ajoute le dépôt APT</strong> dans <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> ; <code>signed-by=</code> limite la vérification à son trousseau. Il s’agit du format .list sur une ligne, pas du format deb822 .sources.",
"<strong>Installe <code>libedgetpu1-std</code></strong>, l’environnement Edge TPU aux performances standard.",
"<strong>Recharge udev</strong> et applique les règles du paquet au périphérique USB."
],
"stdTitle": "Pourquoi libedgetpu1-std et pas libedgetpu1-max ?",
"stdBody": "Le paquet <code>max</code> active la fréquence maximale prise en charge, avec davantage de performances, de consommation et de chaleur. Vérifiez le refroidissement et les conditions d’utilisation. Les paquets sont mutuellement exclusifs ; changez avec <code>apt install libedgetpu1-max</code>."
},
"reboot": {
"title": "Redémarrage proposé après l’installation PCIe",
"body": "Après PCIe, propose un redémarrage. Le script a tenté <code>modprobe</code> ; vérifiez les modules et <code>/dev/apex_0</code> avec le groupe <code>apex</code>. Un redémarrage planifié vérifie le chargement automatique. USB seul ne demande pas de redémarrer l’hôte.",
"imageAlt": "Résumé et proposition de redémarrage après installation PCIe"
}
},
"legacyCleanup": {
"heading": "Nettoyer l’ancien gasket-dkms sur les hôtes utilisant seulement USB",
"intro": "Si <strong>aucun Coral PCIe/M.2 n’est détecté</strong> mais qu’une ancienne installation de <code>gasket-dkms</code> existe, propose un nettoyage facultatif avec confirmation.",
"items": [
"Si un Coral PCIe/M.2 est détecté, suit la procédure normale de recompilation DKMS et ne propose pas ce nettoyage.",
"Purge <code>gasket-dkms</code>, supprime les anciennes entrées DKMS et sources gasket, puis répare l’état en attente de <code>dpkg</code>/APT.",
"Conserve les paquets USB <code>libedgetpu1-std</code> et <code>libedgetpu1-max</code>, donc le Coral USB garde son environnement d’exécution.",
"Le script vérifie que le paquet héritage a disparu et que la gestion du paquet est saine avant de signaler le succès."
],
"warningTitle": "Confirmez d'abord le matériel",
"warningBody": "Si un Coral PCIe/M.2 attendu n’apparaît pas, annulez le nettoyage et vérifiez carte, emplacement et micrologiciel."
},
"reinstallUninstall": {
"heading": "Réinstaller ou désinstaller",
"intro": "Si une installation PCIe avec <code>gasket-dkms</code>, USB avec <code>libedgetpu1-std</code>/<code>libedgetpu1-max</code> ou les deux est détectée, affiche un menu d’actions.",
"imageAlt": "Menu pour réinstaller, mettre à jour ou désinstaller Coral",
"imageCaption": "Le menu apparaît si un composant existe : entrée DKMS gasket, paquet <code>libedgetpu1-*</code> ou périphériques <code>/dev/apex_*</code>.",
"reinstallHeading": "Réinstaller / mettre à jour",
"reinstallBody": "Suit l’installation normale : recompile après changement de noyau ou met à jour <code>libedgetpu1-*</code> depuis Google. Nettoie d’abord l’ancien état DKMS pour qu’une installation échouée ne bloque pas la compilation.",
"uninstallHeading": "Désinstaller — ce qui est enlevé",
"uninstallIntro": "Nécessite une confirmation. Les applications LXC utilisant <code>/dev/apex_*</code> peuvent perdre l’accès pendant la suppression ou après redémarrage. Étapes :",
"uninstallItems": [
"Tente de décharger <code>apex</code> et <code>gasket</code> ; leur utilisation peut empêcher le retrait.",
"Supprime chaque entrée DKMS enregistrée <code>gasket/&lt;version&gt;</code> afin que les modules ne reviennent pas sur le prochain noyau installé.",
"Purge <code>gasket-dkms</code>, <code>libedgetpu1-std</code> et <code>libedgetpu1-max</code>, puis exécute <code>apt-get autoremove --purge</code>.",
"Supprime <code>/etc/udev/rules.d/99-coral-apex.rules</code> et restaure le groupe par défaut de <code>60-gasket-dkms.rules</code> si ce fichier existe encore.",
"Vérifie les membres supplémentaires de <code>apex</code>. <strong>Si la liste est vide</strong>, tente de supprimer le groupe ; sinon conserve <code>apex</code> et liste ses membres. Ce n’est pas une vérification complète des utilisateurs dont c’est le groupe principal.",
"Supprime les anciens dépôts dont <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> et les trousseaux nommés <code>coral-edgetpu-archive-keyring.gpg</code>. Le trousseau actuel /etc/apt/keyrings/coral-edgetpu.gpg reste présent.",
"Propose un redémarrage <strong>seulement si PCIe était installé</strong> pour retirer les modules encore actifs. USB seul ne nécessite pas de redémarrage."
],
"lxcWarnTitle": "Récipients LXC avec passage apex",
"lxcWarnBody": "Retirer les composants de l’hôte peut interrompre l’accès LXC. Prévoyez une maintenance si des applications compatibles comme Frigate dépendent de ce Coral."
},
"updates": {
"heading": "Notifications de mise à jour",
"intro": "ProxMenux recense les composants Coral et vérifie PCIe/M.2 et USB séparément. Si les deux sont présents, chaque variante utilise sa propre source de versions :",
"headerVariant": "Variante",
"headerTracked": "Version enregistrée",
"headerUpstream": "Source des versions",
"pcieVariant": "PCIe / M.2",
"pcieTracked": "D’abord l’étiquette enregistrée après installation, puis la version d’un paquet <code>gasket-dkms</code> sain, sinon celle du module DKMS. Cette dernière n’indique pas le niveau de correctifs du fork.",
"pcieUpstream": "Dernière étiquette GitHub de <code>feranick/gasket-driver</code> ; cache de sept jours et comparaison du numéro de compilation.",
"usbVariant": "USB",
"usbTracked": "<code>libedgetpu1-std</code> ou <code>libedgetpu1-max</code> version apt",
"usbUpstream": "Candidat local <code>apt-cache policy</code> (Google Coral apt repo)",
"outro": "Si une nouvelle version est détectée, Monitor envoie <code>coral_driver_update_available</code> sur les canaux activés. La notification renvoie à l’installateur : choisissez <strong>Réinstaller / mettre à jour</strong>.",
"antiTitle": "Sans notifications répétitives",
"antiBody": "Une notification par variante lorsque la version disponible change. Pas de répétition à chaque contrôle quotidien ; un nouvel avis attend une version ultérieure.",
"rebootTitle": "Mises à jour PCIe : prévoyez un redémarrage",
"rebootBody": "Le module PCIe recompilé doit être chargé ; un redémarrage planifié vérifie aussi le chargement automatique. La bibliothèque USB ne nécessite pas de redémarrer l’hôte, mais les applications utilisant l’ancienne version peuvent devoir redémarrer."
},
"manual": {
"heading": "Procédure manuelle équivalente",
"intro": "Ces commandes présentent les principales étapes de chaque procédure pour consultation ou exécution manuelle.",
"pcieHeading": "PCIe / M.2 (gasket + apex via DKMS)",
"usbHeading": "USB (environnement libedgetpu)"
},
"verification": {
"heading": "Vérification",
"pcieHeading": "PCIe / M.2",
"usbHeading": "USB"
},
"troubleshoot": {
"heading": "Dépannage",
"dkmsFailTitle": "Échec de compilation DKMS après mise à jour du noyau",
"dkmsFailBody": "Des en-têtes manquants sont une cause possible. Vérifiez <code>proxmox-headers-$(uname -r)</code> avec <code>dpkg -l proxmox-headers-$(uname -r)</code> et installez-les si nécessaire. Consultez le journal pour les incompatibilités du noyau. Relancer appelle <code>cleanup_broken_gasket_dkms</code>, sans garantir la compatibilité avec tout noyau.",
"apexMissTitle": "/dev/apex_0 manquant après redémarrage",
"apexMissBody": "Vérifiez la détection PCIe et la correspondance module/noyau actif. Essayez <code>modprobe apex</code> et consultez <code>dmesg | grep -iE \"apex|gasket\"</code>. Compilation, chargement ou configuration de l’emplacement/du micrologiciel peuvent empêcher la création du périphérique.",
"lxcMissTitle": "L’hôte voit /dev/apex_0, mais pas le LXC",
"lxcMissBody": "Un nœud visible ne prouve pas le fonctionnement. Vérifiez l’accès sur l’hôte, le montage LXC, les règles cgroup et les droits UID/GID. Voir <lxcLink>Ajouter Coral TPU à un LXC</lxcLink>.",
"usbUnreachTitle": "Accélérateur USB détecté mais Frigate / TFLite ne peut pas l'atteindre",
"usbUnreachBody": "Vérifiez les règles de <code>libedgetpu1-std</code> et les droits avec <code>ls -l /dev/bus/usb/*/*</code>. L’utilisateur/groupe mappé de l’application doit pouvoir lire et écrire ; root propriétaire n’est pas une erreur en soi. Après modification, exécutez <code>udevadm control --reload-rules &amp;&amp; udevadm trigger</code> puis reconnectez si nécessaire.",
"logTitle": "Journal d’installation",
"logBody": "Chaque exécution écrit <code>/tmp/coral_install.log</code>. En cas d’échec DKMS, ajoute les 50 dernières lignes de <code>/var/lib/dkms/gasket/1.0/build/make.log</code> si disponible. Joignez le journal à la demande d’aide."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Ajouter un Coral TPU à LXC",
"href": "/docs/hardware/coral-tpu-lxc",
"tail": " — donner accès au Coral de l’hôte à un conteneur avec une application compatible."
},
{
"label": "Installer les pilotes NVIDIA (host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — la même démarche pour les GPU NVIDIA."
},
{
"label": "ProxMenux Monitor — Onglet matériel",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — le panneau Coral présente pilote, modules, périphériques et environnement d’exécution, plus la température si un capteur pris en charge la fournit."
}
]
}
}
@@ -0,0 +1,175 @@
{
"meta": {
"title": "Installer NVIDIA sur l’hôte | Documentation ProxMenux",
"description": "Installez les pilotes propriétaires NVIDIA sur Proxmox VE avec ProxMenux : filtrage GPU, vérifications de compilation et DKMS, persistance, correctif NVENC facultatif et mise à jour des bibliothèques LXC."
},
"header": {
"title": "Installer les pilotes NVIDIA sur l'hôte",
"description": "Installez NVIDIA sur l’hôte Proxmox VE. Filtre les branches maintenues selon l’ID PCI du GPU, vérifie la compilation, utilise DKMS, gère nouveau et installe la persistance. Peut aussi actualiser les bibliothèques des LXC utilisant NVIDIA.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Détecte le GPU et propose des branches maintenues incluant son ID PCI. Bloque <code>nouveau</code>, télécharge l’installateur officiel <code>.run</code>, utilise DKMS et installe <code>nvidia-persistenced</code> avec les règles udev ; correctif NVENC facultatif. La compilation vérifie le noyau actuel sans garantir toutes les applications. Les LXC NVIDIA peuvent recevoir des bibliothèques correspondantes."
},
"who": {
"heading": "C'est pour qui ?",
"body": "Pour le traitement vidéo ou le calcul GPU avec Plex, Jellyfin, Frigate, Immich ou Stable Diffusion <strong>dans LXC</strong>, installez d’abord NVIDIA sur l’<em>hôte</em> Proxmox. L’attribution directe à une <strong>VM</strong> utilise la procédure VFIO distincte."
},
"prereqs": {
"title": "Avant de commencer",
"gpu": "<strong>Un GPU NVIDIA</strong> installé dans l’hôte. Détection automatique ; cette option ne gère ni AMD ni Intel.",
"gpuCheck": "lspci | grep -i nvidia",
"notVm": "Le GPU <strong>ne doit pas être réservé à une VM via VFIO</strong>. L’installateur refuse ce cas pour ne pas perturber l’affectation.",
"internet": "Accès Internet sur l’hôte. Télécharge le pilote depuis <code>download.nvidia.com</code> et peut cloner <code>nvidia-persistenced</code> et <code>nvidia-patch</code> depuis GitHub.",
"space": "Prévoyez de l’espace dans <code>/opt/nvidia</code> pour <code>.run</code> et de la RAM pour compiler. Le parcours LXC hors Arch vérifie 1500 MiB libres et peut demander temporairement 2048 MiB de RAM si nécessaire, puis restaure la limite précédente. Prévoyez le redémarrage hôte."
},
"vmWarn": {
"title": "GPU réservé à une VM ? Arrêtez ici",
"body": "Si un périphérique NVIDIA est lié à <code>vfio-pci</code>, l’installateur quitte, même VM arrêtée. Une réservation n’implique pas une utilisation active. Planifiez le retour au pilote hôte et retirez les anciennes affectations VM/VFIO avant redémarrage et installation."
},
"running": {
"heading": "Exécution de l'installateur",
"body": "Ouvrez <strong>Hardware Graphics → NVIDIA GPU Driver Installer</strong> dans ProxMenux. Le menu dépend de la présence d’un pilote actif.",
"imageAlt": "Menu matériel avec l’installateur NVIDIA sélectionné"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Détecte les périphériques, choisit une version et installe. Un nettoyage VFIO confirmé séparément peut précéder l’aperçu. La préparation des dépôts/en-têtes et le téléchargement précèdent le remplacement du pilote ; une seule confirmation finale ne marque pas le début de tous les changements."
},
"walkthrough": {
"detect": {
"title": "Détection et aperçu de GPU",
"body1": "Affiche les contrôleurs vidéo NVIDIA, l’état du pilote ou <em>« Aucun pilote NVIDIA installé »</em>, et les LXC configurés pour NVIDIA avec leur version interne.",
"body2": "Vérifiez GPU et versions hôte/conteneurs. Annulez dans l’aperçu si la sélection est inattendue ; un nettoyage VFIO confirmé auparavant a déjà été effectué.",
"imageAlt": "Aperçu avant installation : GPU, pilote et LXC configurés pour NVIDIA"
},
"version": {
"title": "Choisissez la version du pilote",
"body1": "Filtre les versions de <code>nvidia.com</code> qui <strong>incluent l’ID PCI du GPU dans la table des puces compatibles</strong> et écarte les versions bêta/développement par heuristiques. <em>&lt;version&gt; — Recommandée</em> privilégie la dernière version de la branche installée, puis Production Branch, puis le numéro compatible le plus élevé.",
"body2": "Si le pilote est enregistré comme corrigé via keylase, le sélecteur se limite à la table NVENC. <em>Réinstaller / mettre à jour</em> comporte toujours les confirmations et le choix du correctif ; vérifiez le résultat.",
"whyTitle": "Comment la compatibilité du noyau est validée",
"whyBody": "Filtre selon les branches maintenues et l’ID PCI, sans matrice noyau/pilote fixe. Une compilation préalable teste le noyau actuel. Un échec confirmé revient au sélecteur ; un test indisponible peut avertir puis continuer. Installation finale et vérification du fonctionnement restent nécessaires.",
"imageAlt": "Sélecteur des branches compatibles GPU avec recommandation en premier"
},
"uninstall": {
"title": "Retirer l’ancien pilote avant réinstallation",
"body": "Après téléchargement et vérification de l’installateur choisi, retire le pilote précédent. Arrête les services NVIDIA, décharge les modules, retire les entrées DKMS et purge <code>nvidia-*</code> / <code>libnvidia-*</code> / <code>cuda-*</code>. Cela vaut aussi pour une réinstallation confirmée de la même version."
},
"prepare": {
"title": "Préparer le système",
"body": "Pendant la préparation, le script :",
"items": [
"Vérifie les dépôts avant suppression ou installation. Sans abonnement et avec Enterprise uniquement, demande l’accord pour passer à no-subscription ; un refus arrête l’installation.",
"Installe <code>pve-headers-$(uname -r)</code> (ou <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> et <code>dkms</code>.",
"Crée le fichier géré par ProxMenux <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> avec <code>blacklist nouveau</code> et <code>options nouveau modeset=0</code>. Enregistre l’éventuel ajout dans <code>blacklist.conf</code> et tente de décharger nouveau.",
"Ecrit <code>/etc/modules-load.d/nvidia-vfio.conf</code> avec <code>nvidia</code> et <code>nvidia_uvm</code> afin que les modules se chargent tôt au démarrage."
]
},
"download": {
"title": "Téléchargez et exécutez l'installateur NVIDIA",
"body": "Télécharge <code>NVIDIA-Linux-x86_64-&lt;version&gt;.run</code> dans <code>/opt/nvidia</code> et vérifie taille et type exécutable. Ces contrôles de format ne vérifient pas une signature cryptographique. Enregistre DKMS pour les changements de noyau ; sources et noyau doivent rester compatibles.",
"imageAlt": "Progression du téléchargement et compilation DKMS de l’installateur NVIDIA"
},
"persist": {
"title": "Service de persistance et règles udev",
"body": "Installe <persistLink>nvidia-persistenced</persistLink> et écrit <code>/etc/udev/rules.d/70-nvidia.rules</code> pour créer <code>/dev/nvidia*</code> au démarrage. Cela évite qu’un LXC cherche le GPU avant la création des périphériques."
},
"nvenc": {
"title": "Optionnel : appliquer le patch NVENC",
"body": "Les limites de sessions NVENC dépendent du GPU et du pilote. <patchLink>keylase/nvidia-patch</patchLink> peut retirer la limite du pilote pour les versions prises en charge. Choisissez <strong>Oui</strong> si vous avez besoin de ce changement d’encodage et si votre version est compatible. Cela n’accélère pas le décodage ni ne supprime les limites matérielles.",
"supportTitle": "Vérifier la compatibilité du correctif",
"supportBody": "Vérifiez la version exacte dans la <patchTableLink>table des correctifs</patchTableLink>. Si elle manque, gardez le pilote sans correctif ou choisissez une autre version maintenue compatible GPU, noyau et correctif ; sa proximité dans la liste ne suffit pas."
},
"propagate": {
"title": "Facultatif : actualiser les bibliothèques NVIDIA des LXC",
"body1": "Propose les bibliothèques du pilote aux LXC détectés. Elles et le module hôte <strong>doivent avoir des versions correspondantes</strong> ; sinon <code>nvidia-smi</code> peut signaler « version mismatch ».",
"body2": "Debian / Ubuntu et les autres conteneurs glibc reçoivent l’installateur <code>.run</code> extrait avec <code>--no-kernel-modules --no-dkms --no-install-compat32-libs</code> ; la RAM peut temporairement passer à 2 GiB puis être restaurée. <strong>Arch, Manjaro et EndeavourOS</strong> utilisent <code>pacman -Syu nvidia-utils</code> depuis leurs dépôts, sans fixer la version hôte : vérifiez le résultat. <strong>Alpine</strong> reçoit le contenu <code>.run</code> extrait via <code>pct push</code>, installe <code>gcompat</code> et <code>binutils</code> avec <code>apk</code> et crée les liens SONAME via <code>readelf</code>. Vérifiez le fonctionnement ; la couche de compatibilité ne garantit pas toutes les bibliothèques sous musl.",
"imageAlt": "Dialogue des LXC NVIDIA et de leurs versions pour confirmer la mise à jour"
},
"reboot": {
"title": "Redémarrer",
"body": "Reconstruit <code>initramfs</code> pour tous les noyaux et propose un redémarrage. <strong>Prévoyez ce redémarrage</strong> pour vérifier modules et configuration nouveau au démarrage, même si le pilote répond déjà."
}
},
"reinstallUninstall": {
"heading": "Réinstaller ou désinstaller",
"intro": "Si <code>nvidia</code> est chargé et que <code>nvidia-smi</code> renvoie une version, affiche un menu d’actions. Ce critère détecte un pilote actif ; des fichiers peuvent être installés sans module chargé.",
"imageAlt": "Menu d'action NVIDIA offert lorsqu'un pilote est déjà installé — deux choix: réinstaller / mettre à jour le pilote, ou désinstaller complètement le pilote NVIDIA",
"imageCaption": "Le menu action n'apparaît que lorsqu'un pilote NVIDIA est actuellement actif sur l'hôte.",
"reinstallHeading": "Réinstaller / mettre à jour",
"reinstallBody": "Choisit une version, prépare dépôts/en-têtes, télécharge et teste la compilation avant le remplacement du pilote. Permet une mise à jour dans la branche maintenue ou un autre choix compatible. Les options de bibliothèques LXC et de correctif NVENC réapparaissent ensuite.",
"uninstallHeading": "Désinstaller — ce qui est enlevé",
"uninstallIntro": "Après confirmation Oui/Non, retire les composants suivants :",
"uninstallItems": [
"Exécute <code>nvidia-uninstall --silent</code> pour l’installation <code>.run</code>, arrête et désactive <code>nvidia-persistenced</code> et <code>nvidia-powerd</code>, puis tente de décharger <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> et <code>nvidia</code>. Les applications LXC NVIDIA sont affectées ; des clients actifs peuvent empêcher le déchargement.",
"Exécute <code>apt purge</code> sur <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> et <code>libcudnn*</code>, supprime l'arborescence des sources DKMS et le cache d'installation <code>/opt/nvidia</code> .run.",
"Supprime la configuration de chargement des modules (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) et les entrées de liste noire de nouveau gérées par ProxMenux. Les anciens fichiers ProxMenux de liste noire à deux lignes sont également migrés puis supprimés. Les fichiers modifiés ou indépendants de l’administrateur sont conservés.",
"Retire <code>/etc/udev/rules.d/70-nvidia.rules</code> et marque NVENC <em>removed</em> dans le registre des installations gérées ; aucun fichier d’état séparé.",
"Reconstruit <code>initramfs</code> pour tous les noyaux, exécute <code>proxmox-boot-tool refresh</code> selon l’amorçage et propose un redémarrage."
],
"lxcWarnTitle": "LXC avec accès NVIDIA",
"lxcWarnBody": "Retirer le pilote hôte interrompt les applications LXC NVIDIA même si leurs bibliothèques restent installées. Prévoyez une maintenance pour Frigate, Plex, Jellyfin, Ollama et autres applications GPU."
},
"updates": {
"heading": "Notifications de mises à jour",
"body": "Le pilote NVIDIA est suivi dans le registre des installations gérées. Au démarrage et toutes les 24 heures, Monitor compare les versions de <code>download.nvidia.com/XFree86/Linux-x86_64/</code> à celle indiquée par <code>nvidia-smi</code>. Il notifie uniquement les nouvelles versions de maintenance de la branche installée.",
"kindsHeading": "Message de mise à jour",
"kindsItems": [
"<strong>Maintenance de la même branche.</strong> Exemple : 580.65.06 installée → 580.105.08 disponible. Monitor ne déduit pas la compatibilité noyau entre branches."
],
"antiTitle": "Éviter les notifications répétées",
"antiBody": "Une notification par nouvelle version, pas à chaque contrôle quotidien. Aucune notification sans version plus récente dans la branche installée.",
"applyTitle": "Appliquer la mise à jour",
"applyBody": "Monitor signale les mises à jour sans les installer automatiquement. Ouvrez l’installateur, choisissez <strong>Réinstaller / mettre à jour</strong> et une version compatible, puis terminez compilation et installation. Prévoyez le redémarrage proposé et vérifiez ensuite hôte et bibliothèques LXC."
},
"verify": {
"heading": "Vérification de l'installation",
"intro": "Après redémarrage de l’hôte, connectez-vous via SSH ou le shell Proxmox et exécutez :",
"after": "Vérifiez le GPU et la version attendue. Des processus peuvent déjà apparaître si des services hôte ou conteneurs démarrés automatiquement utilisent le GPU. Vérifiez ensuite la persistance :",
"imageAlt": "Sortie de nvidia-smi sur l'hôte montrant le GPU détecté et la version du pilote installé"
},
"troubleshoot": {
"heading": "Dépannage",
"smiFailTitle": "nvidia-smi affiche « NVIDIA-SMI has failed »",
"smiFailBody": "Causes possibles : <strong>nouveau</strong>, <strong>en-têtes absents ou incompatibles</strong>, sources du pilote incompatibles ou autres erreurs de chargement. Examinez <code>lsmod | grep nouveau</code>, <code>dmesg | grep -i nvidia</code> et les journaux installateur/DKMS. Si la règle nouveau doit être corrigée, vérifiez <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> avant <code>update-initramfs -u -k all</code> et redémarrage. Tout échec de compilation ne vient pas des en-têtes.",
"lxcMissTitle": "Le conteneur LXC ne peut pas voir le GPU après la mise à jour de l'hôte",
"lxcMissBody": "Avant de réinstaller, vérifiez périphériques hôte, droits LXC et version des bibliothèques. Un conflit de versions peut nécessiter le pilote utilisateur correspondant, selon la distribution ; sous glibc, avec <code>--no-kernel-modules</code>. Réinstaller les bibliothèques ne corrige pas les montages ou droits manquants.",
"logTitle": "Vérifiez le journal d'installation",
"logBody": "L’installation écrit dans <code>/tmp/nvidia_install.log</code>. En cas d’échec, examinez téléchargement, compilation DKMS et services. Joignez le journal au signalement GitHub."
},
"manualSteps": {
"heading": "Vous cherchez les étapes manuelles?",
"body": "Voir <guideLink>Guides → NVIDIA</guideLink> pour les étapes manuelles, dont <code>wget</code> et <code>./NVIDIA-Linux-...run</code>. Le guide explique les composants sans reproduire exactement l’installateur. La procédure maintenue ProxMenux apporte filtrage GPU, vérification de compilation, mises à jour LXC et contrôles VFIO."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Ajouter GPU à VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — attribuer NVIDIA directement à une VM via VFIO."
},
{
"label": "Ajouter un GPU à LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — partager NVIDIA avec un ou plusieurs conteneurs."
},
{
"label": "Changer de mode GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — basculer entre passthrough VM et partage LXC."
},
{
"label": "ProxMenux Monitor — Onglet matériel",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — fenêtre GPU ouvrant cet installateur et affichant le suivi en temps réel."
},
{
"label": "Commandes de passthrough GPU",
"href": "/docs/help-info/gpu-commands",
"tail": "— lspci / dmesg / IOMMU / nvidia-smi référence."
}
]
}
}
@@ -0,0 +1,172 @@
{
"meta": {
"title": "Changer de mode GPU (VM ↔ LXC) | Documentation ProxMenux",
"description": "Basculez un GPU entre VFIO pour VM et pilote natif pour LXC. ProxMenux détecte le pilote, propose des choix pour les invités concernés, retire les affectations audio associées et reconstruit initramfs si la configuration hôte change."
},
"header": {
"title": "Changer de mode GPU (VM ↔ LXC)",
"description": "Basculez un GPU attribué entre passthrough VM et partage LXC. ProxMenux gère pilote, VFIO, modules et initramfs, puis demande comment traiter les invités concernés. Vérifiez les choix et la configuration obtenue après redémarrage.",
"section": "Matériel : GPU et Coral-TPU"
},
"intro": {
"title": "Fonctionnement",
"body": "Avec <code>vfio-pci</code>, le GPU est réservé à une VM. Avec le pilote natif <em>(i915 / amdgpu / nvidia)</em>, l’hôte et les LXC peuvent le partager. <strong>Changer de mode GPU</strong> gère <code>vfio.conf</code>, les blocages de modules et les références des invités, et signale les affectations restantes."
},
"graphics": {
"lxcTitle": "Prêt pour les conteneurs LXC",
"lxcDesc": "Pilote natif actif",
"vmTitle": "Prêt pour le passthrough VM",
"vmDesc": "Pilote VFIO-PCI actif"
},
"when": {
"heading": "Quand devrais-je utiliser ça ?",
"intro": "À utiliser si le GPU est <strong>déjà attribué</strong> et que vous souhaitez changer son usage :",
"headerSituation": "Situation actuelle",
"headerUse": "Vous utilisez cette page ?",
"rows": [
{
"situation": "GPU libre, jamais attribué : l’utiliser dans une VM.",
"useRich": "Non — utilisez <vmLink>Ajouter un GPU à VM</vmLink>"
},
{
"situation": "GPU libre, jamais attribué : l’utiliser dans un LXC.",
"useRich": "Non — utilisez <lxcLink>Ajouter un GPU à LXC</lxcLink>"
},
{
"situationRich": "Le GPU est attribué à une VM via <code>vfio-pci</code> ; je veux plutôt l’utiliser dans un LXC.",
"useRich": "<strong>Oui — cette page.</strong>"
},
{
"situation": "Le GPU est partagé avec un LXC ; je veux le réserver à une VM.",
"useRich": "<strong>Oui — cette page.</strong>"
},
{
"situation": "Je veux retirer toutes les affectations de ce GPU.",
"use": "Le mode LXC rend le GPU au pilote hôte ; retirez les affectations des invités via les choix de conflit correspondants. Le GPU reste associé à un pilote."
}
]
},
"prereqs": {
"title": "Avant de commencer",
"assigned": "<strong>Un GPU déjà attribué</strong> à une VM via VFIO ou à un LXC. Pour la première affectation, utilisez Ajouter un GPU à VM / LXC.",
"iommu": "<strong>IOMMU doit être actif sur l’hôte</strong> pour passer <em>au</em> mode VM. Firmware et noyau doivent le permettre ; les paramètres explicites ne sont pas toujours nécessaires. Si besoin, le script tente <code>intel_iommu=on iommu=pt</code> ou <code>amd_iommu=on</code> selon le système d’amorçage, avec <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Vérifiez les avertissements et redémarrez si demandé.",
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
"reboot": "<strong>Prévoyez un redémarrage.</strong> Les changements persistants de pilote et d’amorçage peuvent nécessiter de reconstruire initramfs puis de redémarrer. Le script le demande à la fin.",
"knowList": "<strong>Identifiez les VM et LXC utilisant le GPU.</strong> Le script détecte les références et demande quoi faire pour chaque invité ; connaître la liste facilite la vérification."
},
"blocklist": {
"title": "Tous les GPU ne sont pas sûrs de passer à un VM",
"body": "Le script bloque le mode VM pour certains identifiants, dont <code>8086:5a84</code> et <code>8086:5a85</code>, selon sa politique de compatibilité. Une correspondance déclenche un avertissement. Cette liste n’empêche pas de passer <em>au</em> mode LXC ; d’autres contrôles restent possibles."
},
"running": {
"heading": "Exécuter le script",
"body": "Ouvrez <strong>Matériel : GPU et Coral-TPU → Changer de mode GPU (VM ↔ LXC)</strong> dans ProxMenux.",
"imageAlt": "Option Changer de mode GPU (VM ↔ LXC) du menu matériel"
},
"howRuns": {
"heading": "Déroulement du script",
"body": "Le choix du GPU et du sens précède le changement principal. Un nettoyage VFIO séparé peut demander confirmation plus tôt ; les invités concernés ont leurs propres dialogues. Lisez chaque confirmation : une seule validation finale ne couvre pas tous les changements."
},
"walkthrough": {
"heading": "Étapes de la procédure",
"detect": {
"title": "Détecter les GPU et leur pilote actuel",
"body": "Examine les contrôleurs VGA, 3D et Display de l’hôte et consulte <code>/sys/bus/pci/devices/*/driver</code>. Affiche nom, adresse PCI et pilote actuel de chaque GPU pour identifier son mode.",
"imageAlt": "Liste de contrôle GPU montrant chaque GPU détecté avec son pilote actuel (vfio-pci / nvidia / amdgpu / i915) et emplacement PCI"
},
"pickGpu": {
"title": "Choisir les GPU à basculer",
"body": "Un seul GPU est sélectionné automatiquement. Avec plusieurs, vous pouvez en cocher plusieurs, à condition qu’ils soient dans le <em>même</em> mode. Un mélange de modes demande de restreindre la sélection.",
"tipTitle": "Basculer plusieurs GPU ensemble",
"tipBody": "Exemple : passer trois NVIDIA en mode VM, puis rendre l’iGPU aux LXC. Deux exécutions avec chacune une cible commune, plutôt qu’une opération par carte."
},
"direction": {
"title": "Examiner l'orientation proposée",
"intro": "Basé sur le mode actuel, le script propose le contraire comme cible:",
"items": [
"<strong>VM → LXC :</strong> retire l’affectation à <code>vfio-pci</code> pour permettre au pilote natif (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) de prendre en charge le GPU. Pour NVIDIA, supprime les entrées BDF correspondantes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> au prochain démarrage.",
"<strong>LXC → VM :</strong> prépare l’affectation à <code>vfio-pci</code>. AMD / Intel bloque le pilote natif et utilise <code>options vfio-pci ids=…</code>. Pour NVIDIA, <code>nvidia</code> n’est <strong>pas</strong> bloqué globalement : les règles BDF appliquent <code>driver_override=vfio-pci</code> aux périphériques des groupes IOMMU concernés. Les GPU hors de ces groupes peuvent conserver <code>nvidia</code>. Vérifiez chaque membre."
],
"outro": "Confirmez la direction ou annulez."
},
"conflict": {
"title": "Choix pour chaque VM ou LXC concerné",
"body": "Vérifie <code>/etc/pve/lxc/*.conf</code> selon les familles de pilotes GPU et <code>/etc/pve/qemu-server/*.conf</code> pour les affectations PCI. La détection LXC ne correspond pas exactement à chaque carte par BDF. Vérifiez les invités détectés et choisissez quoi faire pour chacun :",
"headerPolicy": "Politique",
"headerEffect": "Effet",
"headerWhen": "Quand choisir",
"keepPolicy": "Conserver la configuration, désactiver le démarrage automatique",
"keepEffect": "<code>pct set CTID -onboot 0</code> ou <code>qm set VMID -onboot 0</code>. Les entrées GPU sont conservées.",
"keepWhen": "Si vous comptez réutiliser l’invité après retour au mode GPU initial. Choix prudent par défaut.",
"removePolicy": "Supprimer GPU de la configuration",
"removeEffect": "Retire les entrées <code>hostpci</code> / <code>dev</code> identifiées et les références anciennes prises en charge.",
"removeWhen": "Pour utiliser l’invité sans GPU. Vérifiez d’abord l’application : le repli sur CPU dépend d’elle, et retirer le périphérique ne la reconfigure pas automatiquement.",
"imageAlt": "Dialogue de choix pour chaque VM ou LXC concerné"
},
"audio": {
"title": "Retirer les affectations audio associées en quittant le mode VM",
"body1": "De nombreux GPU NVIDIA / AMD proposent l’audio HDMI sur la fonction <code>.1</code> du même emplacement ; d’autres périphériques audio peuvent être attribués. Retirer le GPU peut laisser des entrées audio <code>hostpci</code> obsolètes. Vérifiez les affectations à conserver.",
"body2": "Identifie les adresses BDF audio et propose une liste des affectations à retirer. Supprime aussi leurs identifiants vendor:device de <code>/etc/modprobe.d/vfio.conf</code>, uniquement si aucune autre VM ne les utilise."
},
"apply": {
"title": "Appliquer les changements à l’hôte et aux invités",
"body": "Une fois que vous confirmez, le script écrit les modifications côté hôte — <code>vfio.conf</code>, liste noire, modules, et (pour NVIDIA) la règle par BDF udev à <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> plus l'état BDF à <code>/etc/proxmenux/vfio-bind.bdfs</code>. Elle applique également la politique de conflit choisie à chaque VM/LXC. Si la configuration de l'hôte a réellement changé, il exécute <code>update-initramfs -u -k all</code> suivi de <code>proxmox-boot-tool refresh</code>; sinon, les deux sont ignorés."
},
"reboot": {
"title": "Redémarrer",
"body": "Redémarrez l’hôte pour appliquer la nouvelle affectation persistante. Vous pouvez différer le redémarrage, mais vérifiez le pilote actif avant de lancer l’invité cible : l’ancien peut rester actif jusque-là.",
"imageAlt": "Boîte de dialogue résumé listant ce qui a changé, suivie de l'invite de redémarrage"
}
},
"manual": {
"heading": "Inspection manuelle",
"intro": "Avant <strong>VM → LXC</strong>, examinez le pilote et la politique BDF. Cet exemple NVIDIA utilise <code>10de:2204</code> ; adaptez-le à votre carte. Ces commandes consultent l’état ; le script gère aussi les invités et les membres du groupe IOMMU.",
"lxcToVm": "Avant <strong>LXC → VM</strong>, examinez l’adresse PCI et son groupe IOMMU. Remplacez l’adresse d’exemple et vérifiez tous les membres avant attribution.",
"oneVmTitle": "Un GPU physique attribué par VFIO ne peut servir qu’à une VM à la fois",
"oneVmBody": "Mettre plusieurs entrées <code>hostpci</code> avec la même fente PCI dans deux VMs est valide config, mais seulement une des VMs peut commencer avec le GPU — la seconde échouera. La politique de conflit ProxMenux vise précisément à éviter ce piège."
},
"verification": {
"heading": "Vérification après redémarrage"
},
"troubleshoot": {
"heading": "Dépannage",
"stillVfioTitle": "GPU affiche toujours vfio-pci après le passage au mode LXC",
"stillVfioBody": "Un module VFIO chargé ne prouve pas quel pilote utilise ce GPU. Vérifiez l’affectation, l’exécution de <code>update-initramfs</code> et le redémarrage. <code>lsmod | grep vfio</code> liste seulement les modules. Pour AMD / Intel, inspectez <code>vfio.conf</code> ; pour NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> et <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Corrigez les règles avant <code>update-initramfs -u -k all</code> et redémarrage.",
"vmFailTitle": "Une VM ne démarre plus après passage du GPU en mode LXC",
"vmFailBody": "Vérifiez les références <code>hostpci</code> obsolètes. Le choix <em>Retirer le GPU de la configuration</em> peut les supprimer pendant le changement prévu. Avant de relancer le script, vérifiez le sens proposé pour ne pas inverser le mode par erreur. Sinon, retirez l’affectation dans Proxmox, VM arrêtée.",
"smiFailTitle": "nvidia-smi affiche « Driver/library version mismatch » après retour à LXC",
"smiFailBody": "Comparez le module NVIDIA chargé aux bibliothèques installées, y compris dans les LXC. Alignez les versions : redémarrer charge le module installé sans corriger des paquets incompatibles. Recharger via <code>modprobe -r nvidia</code> puis <code>modprobe nvidia</code> nécessite l’arrêt des clients GPU et peut échouer si des modules dépendants sont utilisés.",
"logTitle": "Journal d’exécution",
"logBody": "Chaque exécution écrit dans <code>/tmp/proxmenux_gpu_switch_mode.log</code> sur l’hôte. Joignez le journal à votre demande d’aide GitHub."
},
"related": {
"heading": "Voir aussi",
"items": [
{
"label": "Ajouter GPU à VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — configuration initiale du mode VM."
},
{
"label": "Ajouter un GPU à LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — configuration initiale du mode LXC."
},
{
"label": "Installer les pilotes NVIDIA (host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — requis pour le mode LXC avec les GPU NVIDIA."
},
{
"label": "ProxMenux Monitor — Onglet matériel",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — section Cartes graphiques, avec le mode actuel et la commande de changement."
},
{
"label": "Commandes de passthrough GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — référence rapide des commandes."
}
]
}
}