{ "meta": { "title": "Zariadenia a zrýchlenie ProxMenux", "description": "Ako OCI manager Apps sprístupňuje GPU, NVIDIA, Coral, USB, FUSE a ďalšie zariadenia kontajneru OCI ako overené natívne zdroje Proxmox VE." }, "header": { "title": "Zariadenia a akcelerácia", "description": "GPU, NVIDIA, Coral, USB, FUSE a blokové zariadenia sa stávajú overenými natívnymi zdrojmi Proxmox VE pre kontajner.", "section": "OCI manager Apps" }, "sections": [ { "id": "principle", "title": "Zariadenie, ktoré aplikácia potrebuje, nie celý hostiteľ", "blocks": [ { "p": "Zariadenie požadované súborom Compose alebo aplikačným profilom sa stáva konkrétnou položkou devN alebo LXC pripojením. Požiadanie o GPU, USB zariadenie alebo Coral nerobí kontajner privilegovaným." }, { "flow": { "nodes": [ { "label": "Inventár hostiteľa", "detail": "/dev/dri/renderD128\nGID 993 · Intel" }, { "label": "ProxMenux", "detail": "výrobca a\noverenie oprávnení" }, { "label": "LXC", "detail": "rovnaké zariadenie\nefektívne GID" } ] } } ] }, { "id": "origin", "title": "Odkiaľ pochádza požiadavka na zariadenie", "blocks": [ { "table": { "headers": [ "Zdroj", "Čo sa číta", "Čo robí inštalátor" ], "rows": [ [ "Docker Compose", "devices, group_add, deploy.resources a NVIDIA žiadosti", "Každá požiadavka sa stáva požiadavkou zariadenia zobrazenou na preskúmanie" ], [ "Katalógový profil", "Podpora GPU, Coral, OpenCL, USB alebo FUSE, ktorú aplikácia skutočne má", "Ponúkajú sa len možnosti overené pre tento obraz" ], [ "Metadáta a dokumentácia obrazu", "VA-API, Selkies, LinuxServer mods alebo NVIDIA runtime", "Pridávajú sa zdokumentované premenné a príprava" ], [ "Výber užívateľa", "iba CPU, Intel/AMD, OpenCL, NVIDIA alebo voliteľné zariadenie", "Výber sa uloží do konfigurácie inštalácie" ] ] } }, { "calloutWarning": { "title": "Zistené zariadenia sa nepripájajú automaticky", "body": "Na hostiteľovi sa vytvorí inventár, ale ponúknu a pripoja sa len zariadenia deklarované v súbore Compose alebo kompatibilnom profile. GPU, USB adaptér či Coral prítomný na hostiteľovi sa nesprístupní každému LXC." } } ] }, { "id": "identify", "title": "Ako sa identifikuje hostiteľské zariadenie", "intro": "Pred úpravou LXC sa zariadenie číta na hostiteľovi a zodpovedá zvolenému profilu.", "blocks": [ { "table": { "headers": [ "Typ", "Identita", "Overenie" ], "rows": [ [ "Intel/AMD DRM", "/dev/dri/renderD* a /sys/class/drm/NODE/device/vendor", "Znakové zariadenie s výrobcom 0x8086 (Intel) alebo 0x1002 (AMD)" ], [ "AMD OpenCL", "Renderovací uzol a /dev/kfd, ak ho profil potrebuje", "Existencia, typ, výrobca, oprávnenia a deklarovaná zlučiteľnosť" ], [ "AMD ROCm", "Renderovací uzol, /dev/kfd a generácia, ktorú výpočtový ovládač hlási v /sys/class/kfd/kfd/topology/nodes/*/properties", "GPU generácie, ktorú obraz ROCm aplikácie podporuje (uvedené GPU RDNA2 a novšie), sa ponúkne bez úprav. Ostatné GPU týchto rodín, napríklad Radeon 680M a 780M, sa ponúkajú ako experimentálne a nikdy nie sú navrhnutou voľbou. ROCm ich oficiálne nepodporuje: aplikácia ich prezentuje ako generáciu danej rodiny (HSA_OVERRIDE_GFX_VERSION) a inštalátor pred stiahnutím väčšieho obrazu vyžiada potvrdenie. Staršia GPU, napríklad integrovaná grafika Ryzen 5000U, sa neponúkne a Immich ponechá rozpoznávanie na CPU" ], [ "NVIDIA", "nvidia-smi a nvidia-container-cli", "GPU, UUID, PCI bus, verzia ovládača, Toolkit, uzly /dev/nvidia*, binárne súbory a knižnice" ], [ "Coral PCIe/M.2", "/dev/apex_N a jeho odkaz na /sys/dev/char/MAJOR:MINOR", "Uzol znakového zariadenia, čísla major/minor, vlastník, GID a oprávnenia" ], [ "USB a sériové", "/dev/ttyUSB*, /dev/ttyACM* alebo /dev/bus/usb/BBB/DDD", "Uzol znakového zariadenia; pri USB aj výrobca, produkt a sériové číslo, ak ich sysfs zverejňuje" ], [ "KVM, TUN, FUSE, video a generické SCSI", "/dev/kvm, /dev/net/tun, /dev/fuse, /dev/videoN alebo /dev/sgN", "Podporovaná cesta, typ uzla a účinné práva" ], [ "Optická mechanika", "/dev/srN", "Blokové zariadenie" ] ] } } ] }, { "id": "install", "title": "Čo sa stane počas inštalácie", "blocks": [ { "steps": { "items": [ { "title": "Šablóna ponúka svoje profily", "body": "Napríklad len CPU, Intel/AMD VA-API, AMD OpenCL, Intel OpenCL alebo NVIDIA. Možnosti patria k obrazu, nie k spoločnému menu." }, { "title": "Vyberie sa profil", "body": "Určuje uzly zariadení, prostredie, mody alebo runtime, ktoré aplikácia potrebuje." }, { "title": "Navrhuje sa cesta", "body": "Pre DRM, /dev/dri/renderD128, ktoré môžu byť zmenené na hostiteľa s niekoľkými renderových uzlov. Pre USB alebo sériový je vybraný konkrétny uzol." }, { "title": "Overenie", "body": "Existencia, typ, povolený výrobca, povolenia a GID sú kontrolované. Nesúlad zastaví operáciu." }, { "title": "Uloží sa konfigurácia inštalácie", "body": "Cesta, režim, GID, zápis a profil sa zaznamenávajú pre aktualizácie a opätovné vytvorenia." }, { "title": "Pripojenie a skúška", "body": "pct set pridáva položku devN a prístup sa potom kontroluje vo vnútri LXC. LinuxServer obrazy sú tiež kontrolované ako používateľ abc." } ] } } ] }, { "id": "config", "title": "Ako sa objavuje v konfigurácii LXC", "intro": "Ilustračné hodnoty: dev0 a dev1 sú voľné pozície priradené Proxmox VE. renderD128, apex_0 a GID závisia od hardvéru uzla.", "blocks": [ { "codeGrid": { "items": [ { "title": "Intel/AMD VA-API", "code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=993,deny-write=0" }, { "title": "Coral PCIe/M.2", "code": "dev0: path=/dev/apex_0,mode=0660,gid=GID,deny-write=0" }, { "title": "Špecifické USB zariadenie", "code": "dev0: path=/dev/bus/usb/003/004,mode=0660,gid=GID,deny-write=0" }, { "title": "AMD OpenCL", "code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=GID,deny-write=0\ndev1: path=/dev/kfd,mode=0660,gid=GID,deny-write=0" } ] } }, { "p": "GID sa načíta na hostiteľovi pomocou stat a zapíše do položky devN; nepredpokladá sa, že skupiny render a video majú pevné číslo. Zariadenie má v LXC rovnakú cestu /dev, na ktorej ho vyhľadávajú vlastné mechanizmy aplikácie." } ] }, { "id": "profiles", "title": "Profily, ktoré môže obraz ponúknuť", "blocks": [ { "table": { "headers": [ "Profil", "Výsledná konfigurácia", "Ponúknuté, keď" ], "rows": [ [ "Intel/AMD VA-API", "Renderovací uzol /dev/dri", "Aplikácia podporuje video zrýchlenie" ], [ "OpenCL", "Render uzol, /dev/kfd v prípade potreby a oficiálny mod", "Obraz alebo profil ho dokumentuje" ], [ "NVIDIA", "Zariadenia a knižnice ovládača na hostiteľovi", "Hostiteľ má funkčný ovládač a NVIDIA Container Toolkit" ], [ "Coral", "/dev/apex_0 alebo zbernica USB", "Profil vyhlasuje Coral podporu (Frigate)" ], [ "USB, sériové, FUSE", "Jediné zariadenie, validovaný strom alebo funkcia LXC", "Vyžaduje ho uložená konfigurácia" ] ] } } ] }, { "id": "nvidia", "title": "NVIDIA", "blocks": [ { "calloutWarning": { "title": "Požiadavka na uzol: NVIDIA Container Toolkit", "body": "Funkčný ovládač na Proxmox VE nestačí na sprístupnenie GPU NVIDIA obrazu OCI. OCI manager Apps používa nvidia-container-cli zo súpravy NVIDIA Container Toolkit na identifikáciu zariadení a získanie binárnych súborov a knižníc zodpovedajúcich načítanému ovládaču." } }, { "p": "Inštalátor NVIDIA nástroja ProxMenux nainštaluje NVIDIA Container Toolkit z oficiálneho repozitára NVIDIA spolu s ovládačom. Skontroluje jeho štyri balíky, overí nvidia-container-cli a zaznamená výsledok do denníka zmien Audit a správa." }, { "p": "Tieto dva príkazy na hostiteľovi ukazujú, či je k dispozícii ovládač a súbor nástrojov:" }, { "shell": { "code": "nvidia-smi -L\nnvidia-container-cli --version" } }, { "p": "Na hostiteľovi, kde bol ovládač nainštalovaný inými prostriedkami, je Toolkit nainštalovaný z oficiálneho stabilného úložiska:" }, { "shell": { "code": "apt-get update\napt-get install -y --no-install-recommends ca-certificates curl gnupg2\n\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \\\n | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\n\ncurl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \\\n | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \\\n > /etc/apt/sources.list.d/nvidia-container-toolkit.list\n\napt-get update\napt-get install -y nvidia-container-toolkit libnvidia-container-tools" } }, { "p": "Inventár, ktorý používa OCI manager Apps, je výstupom príkazu:" }, { "shell": { "code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs" } }, { "calloutInfo": { "title": "Konfigurácia Runtime Docker nie je zahrnutá", "body": "Kontajnery sú natívne LXC a nepoužívajú démona Docker, takže nvidia-ctk runtime configure --runtime=docker nehrá žiadnu úlohu: ProxMenux priamo volá nvidia-container-cli a zapíše zariadenia a pripojenia LXC. Príkazy a podporované platformy sú uvedené v návode na inštaláciu NVIDIA Container Toolkit." } }, { "cards": { "items": [ { "icon": "cpu", "title": "Inventár z ovládača", "body": "nvidia-container-cli uvádza uzly zariadenia, binárne súbory, firmware a knižnice nainštalovaného ovládača." }, { "icon": "refresh", "title": "Bez pevnej verzie", "body": "Šablóna nepomenuje súbory knižnice. Profil je generovaný z aktuálneho hostiteľa." }, { "icon": "shield", "title": "Pripojenia iba na čítanie", "body": "Hostiteľské knižnice sú namontované iba na čítanie namiesto kopírovania do kontajnera." }, { "icon": "hardDrive", "title": "Zmeny ovládača", "body": "Po zmene ovládača sa inventár znovu vygeneruje pred začiatkom postihnutých LXC." } ] } }, { "code": { "title": "Výsledok NVIDIA (zjednodušený)", "code": "devN: path=/dev/nvidia0,...\ndevN: path=/dev/nvidiactl,...\ndevN: path=/dev/nvidia-uvm,...\nlxc.mount.entry: HOST_LIBRARY CONTAINER_LIBRARY none ro,bind,create=file 0 0" } }, { "p": "Sprístupniť len /dev/nvidia0 nestačí. Komponenty užívateľského priestoru načítaného ovládača sú namontované len na čítanie a nvidia-smi potom beží vnútri LXC pre porovnanie GPU, UUID, PCI zbernice a verzie s inventárom hostiteľa." } ] }, { "id": "usb", "title": "USB, sériové a USB Coral", "blocks": [ { "calloutWarning": { "title": "Číslovanie USB sa môže zmeniť", "body": "Cesta ako /dev/bus/usb/003/004 sa môže zmeniť po opätovnom pripojení zariadenia alebo reštarte hostiteľa. Profil zaznamená výrobcu, produkt a sériové číslo, ak sú dostupné, ale nová adresa zbernice sa automaticky nepremapuje." } }, { "p": "Periférne zariadenie je daný jeho konkrétnym uzlom: /dev/ttyUSB0, /dev/ttyACM0, /dev/apex_0 alebo /dev/bus/usb/BBB/DDD. Sprístupnenie celého /dev nie je akceptovaný. Coral je ponúkaný len pre aplikácie, ktorých profil deklaruje." } ] }, { "id": "trees", "title": "Stromy zariadení a funkcie LXC", "blocks": [ { "table": { "headers": [ "Žiadosť", "Výsledná konfigurácia", "Rozsah" ], "rows": [ [ "/dev/dvb, /dev/snd alebo /dev/bus/usb", "Každý uzol znakového zariadenia v strome dostane vlastnú položku devN s režimom a GID hostiteľa", "Len požadovaný strom, nie zvyšok /dev" ], [ "/dev/fuse", "Uzol a, keď ho profil potrebuje, funkcia fuse=1", "Samotná FUSE nepublikuje pripojenia do iných LXC" ], [ "/dev/net/tun", "Položka devN s rovnakou cestou vo vnútri LXC", "VPN alebo konfigurácia siete zostáva v aplikácii" ], [ "/dev/kvm", "Potvrdená položka devN", "Ponúka sa iba vtedy, keď to vyžaduje uložená konfigurácia" ] ] } } ] }, { "id": "security", "title": "Potvrdenie podľa úrovne rizika", "blocks": [ { "p": "Konkrétne zariadenia, voliteľné privilégium, požadované privilégium, AppArmor alebo seccomp relaxácia a prístup k mennému priestoru PID hostiteľa sa považujú za samostatné prípady, nie pod jedným generickým privilegovaným označením. Každá možnosť s rizikom sa vysvetľuje a potvrdzuje počas inštalácie." } ] } ] }