Riggen_HomeLab_GpU - itnett/FTD02H-N GitHub Wiki
Du har bekreftet at IOMMU-støtte er aktivert på systemet ditt, og at NVIDIA GPU-en er gruppert riktig med IOMMU-gruppe 35:
GPU-en din, en NVIDIA GeForce GTX 970, og dens tilhørende lydkontroller er begge i IOMMU-gruppe 35:
-
/sys/kernel/iommu_groups/35/devices/0000:05:00.0
- NVIDIA GeForce GTX 970 -
/sys/kernel/iommu_groups/35/devices/0000:05:00.1
- NVIDIA High Definition Audio Controller
For å konfigurere GPU passthrough, følg disse trinnene:
-
Åpne Grub-konfigurasjonen:
nano /etc/default/grub
-
Endre Grub-konfigurasjonen for å aktivere IOMMU-støtte:
Legg til
intel_iommu=on
elleramd_iommu=on
i linjen som begynner medGRUB_CMDLINE_LINUX_DEFAULT
. Siden du bruker en Intel-baserte CPU, bruk følgende:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Merk:
iommu=pt
(pass-through mode) er nyttig for å redusere overhead ved bruk av IOMMU. -
Oppdater Grub og start systemet på nytt:
update-grub reboot
Basert på dine dmesg
-utskrifter, er det noen meldinger om "Firmware Bug". Disse meldingen gjelder DMAR-tabellen i BIOS. Hvis du opplever problemer under passthrough, kan det hende du må oppdatere BIOS-firmware for å løse disse feilene.
Du må "blackliste" Nouveau-driveren og angi NVIDIA GPU-en og dens lydkontroller for passthrough:
-
Opprett en svarteliste for Nouveau-driveren:
Lag en ny fil for å blokkere Nouveau:
echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf update-initramfs -u
-
Legg til PCI Device til VM-en:
- Åpne Proxmox GUI.
- Velg VM-en hvor du ønsker å legge til GPU-en.
- Gå til "Hardware", og klikk "Add" > "PCI Device".
- Velg GPU-en (
0000:05:00.0
) og dens lydkontroller (0000:05:00.1
). - Aktiver "All Functions" og "Primary GPU" hvis dette er den eneste GPU-en.
-
Bekreft Passthrough:
Start VM-en og installer NVIDIA-driverne inne i VM-en. Sørg for at VM-en kan gjenkjenne GPU-en korrekt.
Etter at passthrough er konfigurert, kan du overvåke GPU-bruken fra VM-en ved å bruke nvidia-smi
, som tidligere nevnt, eller mer avanserte verktøy som Prometheus og Grafana for å samle og vise GPU-statistikk.
- Hvis du har noen problemer med GPU passthrough, sjekk alltid IOMMU-grupper og bekreft at GPU-en ikke deler gruppen med andre enheter som kan forårsake problemer.
- Det kan også være nødvendig å oppdatere GPU-driverne både på verten og i VM-en.
Med disse trinnene skal du være i stand til å konfigurere GPU passthrough i Proxmox og bruke GPU-en effektivt i virtuelle maskiner.
root@pve01:~# nvidia-smi Fri Aug 30 22:38:22 2024 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA GeForce GTX 970 On | 00000000:05:00.0 On | N/A | | 0% 36C P8 16W / 200W | 1MiB / 4096MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
root@pve01:# lsmod | grep nvidia
nvidia_uvm 1609728 0
nvidia_drm 81920 0
nvidia_modeset 1314816 2 nvidia_drm
video 69632 1 nvidia_modeset
nvidia 56807424 19 nvidia_uvm,nvidia_modeset
root@pve01:# dmesg | grep -e DMAR -e IOMMU
[ 0.008372] ACPI: DMAR 0x000000003A95DD20 0000F4 (v01 ALASKA A M I 00000001 INTL 20091013)
[ 0.008395] ACPI: Reserving DMAR table memory at [mem 0x3a95dd20-0x3a95de13]
[ 0.168628] DMAR: Host address width 46
[ 0.168630] DMAR: DRHD base: 0x000000fbffd000 flags: 0x0
[ 0.168643] DMAR: dmar0: reg_base_addr fbffd000 ver 1:0 cap d2008c10ef0466 ecap f0205b
[ 0.168647] DMAR: DRHD base: 0x000000fbffc000 flags: 0x1
[ 0.168652] DMAR: dmar1: reg_base_addr fbffc000 ver 1:0 cap d2078c106f0466 ecap f020df
[ 0.168655] DMAR: RMRR base: 0x0000003b4cb000 end: 0x0000003b4dafff
[ 0.168660] DMAR: ATSR flags: 0x0
[ 0.168663] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x0
[ 0.168666] DMAR-IR: IOAPIC id 1 under DRHD base 0xfbffc000 IOMMU 1
[ 0.168669] DMAR-IR: IOAPIC id 2 under DRHD base 0xfbffc000 IOMMU 1
[ 0.168671] DMAR-IR: HPET id 0 under DRHD base 0xfbffc000
[ 0.168673] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[ 0.168674] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[ 0.169216] DMAR-IR: Enabled IRQ remapping in xapic mode
[ 0.340401] DMAR: [Firmware Bug]: RMRR entry for device 08:00.0 is broken - applying workaround
[ 0.340406] DMAR: [Firmware Bug]: RMRR entry for device 09:00.0 is broken - applying workaround
[ 0.340410] DMAR: No SATC found
[ 0.340412] DMAR: IOMMU feature sc_support inconsistent
[ 0.340413] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 0.340415] DMAR: dmar0: Using Queued invalidation
[ 0.340424] DMAR: dmar1: Using Queued invalidation
[ 0.346442] DMAR: Intel(R) Virtualization Technology for Directed I/O
[ 2.410420] DMAR: DRHD: handling fault status reg 2
[ 2.411208] DMAR: [DMA Read NO_PASID] Request device [08:00.0] fault addr 0xfffcd000 [fault reason 0x06] PTE Read access is not set
root@pve01:# lspci -nnk | grep -i nvidia
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
Kernel driver in use: nvidia
Kernel modules: nvidia
05:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
root@pve01:# lspci -nnk | grep -i nvidia
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
Kernel driver in use: nvidia
Kernel modules: nvidia
05:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
root@pve01:# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/17/devices/0000:00:02.2
/sys/kernel/iommu_groups/35/devices/0000:05:00.1
/sys/kernel/iommu_groups/35/devices/0000:05:00.0
/sys/kernel/iommu_groups/7/devices/0000:ff:14.7
/sys/kernel/iommu_groups/7/devices/0000:ff:14.3
/sys/kernel/iommu_groups/7/devices/0000:ff:14.1
/sys/kernel/iommu_groups/7/devices/0000:ff:14.6
/sys/kernel/iommu_groups/7/devices/0000:ff:14.2
/sys/kernel/iommu_groups/7/devices/0000:ff:14.0
/sys/kernel/iommu_groups/25/devices/0000:00:16.0
/sys/kernel/iommu_groups/15/devices/0000:00:01.1
/sys/kernel/iommu_groups/33/devices/0000:00:1f.2
/sys/kernel/iommu_groups/33/devices/0000:00:1f.0
/sys/kernel/iommu_groups/33/devices/0000:00:1f.3
/sys/kernel/iommu_groups/5/devices/0000:ff:12.0
/sys/kernel/iommu_groups/5/devices/0000:ff:12.1
/sys/kernel/iommu_groups/23/devices/0000:00:11.0
/sys/kernel/iommu_groups/13/devices/0000:00:00.0
/sys/kernel/iommu_groups/31/devices/0000:00:1c.7
/sys/kernel/iommu_groups/3/devices/0000:ff:0f.6
/sys/kernel/iommu_groups/3/devices/0000:ff:0f.4
/sys/kernel/iommu_groups/3/devices/0000:ff:0f.0
/sys/kernel/iommu_groups/3/devices/0000:ff:0f.5
/sys/kernel/iommu_groups/3/devices/0000:ff:0f.1
/sys/kernel/iommu_groups/21/devices/0000:00:05.2
/sys/kernel/iommu_groups/11/devices/0000:ff:1e.4
/sys/kernel/iommu_groups/11/devices/0000:ff:1e.2
/sys/kernel/iommu_groups/11/devices/0000:ff:1e.0
/sys/kernel/iommu_groups/11/devices/0000:ff:1e.3
/sys/kernel/iommu_groups/11/devices/0000:ff:1e.1
/sys/kernel/iommu_groups/1/devices/0000:ff:0b.1
/sys/kernel/iommu_groups/1/devices/0000:ff:0b.2
/sys/kernel/iommu_groups/1/devices/0000:ff:0b.0
/sys/kernel/iommu_groups/38/devices/0000:09:00.0
/sys/kernel/iommu_groups/28/devices/0000:00:1c.2
/sys/kernel/iommu_groups/18/devices/0000:00:03.0
/sys/kernel/iommu_groups/36/devices/0000:07:00.0
/sys/kernel/iommu_groups/8/devices/0000:ff:15.2
/sys/kernel/iommu_groups/8/devices/0000:ff:15.0
/sys/kernel/iommu_groups/8/devices/0000:ff:15.3
/sys/kernel/iommu_groups/8/devices/0000:ff:15.1
/sys/kernel/iommu_groups/26/devices/0000:00:1a.0
/sys/kernel/iommu_groups/16/devices/0000:00:02.0
/sys/kernel/iommu_groups/34/devices/0000:02:00.0
/sys/kernel/iommu_groups/6/devices/0000:ff:13.2
/sys/kernel/iommu_groups/6/devices/0000:ff:13.0
/sys/kernel/iommu_groups/6/devices/0000:ff:13.7
/sys/kernel/iommu_groups/6/devices/0000:ff:13.5
/sys/kernel/iommu_groups/6/devices/0000:ff:13.3
/sys/kernel/iommu_groups/6/devices/0000:ff:13.1
/sys/kernel/iommu_groups/6/devices/0000:ff:13.6
/sys/kernel/iommu_groups/6/devices/0000:ff:13.4
/sys/kernel/iommu_groups/24/devices/0000:00:14.0
/sys/kernel/iommu_groups/14/devices/0000:00:01.0
/sys/kernel/iommu_groups/32/devices/0000:00:1d.0
/sys/kernel/iommu_groups/4/devices/0000:ff:10.0
/sys/kernel/iommu_groups/4/devices/0000:ff:10.7
/sys/kernel/iommu_groups/4/devices/0000:ff:10.5
/sys/kernel/iommu_groups/4/devices/0000:ff:10.1
/sys/kernel/iommu_groups/4/devices/0000:ff:10.6
/sys/kernel/iommu_groups/22/devices/0000:00:05.4
/sys/kernel/iommu_groups/12/devices/0000:ff:1f.0
/sys/kernel/iommu_groups/12/devices/0000:ff:1f.2
/sys/kernel/iommu_groups/30/devices/0000:00:1c.4
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.4
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.2
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.0
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.5
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.3
/sys/kernel/iommu_groups/2/devices/0000:ff:0c.1
/sys/kernel/iommu_groups/20/devices/0000:00:05.1
/sys/kernel/iommu_groups/10/devices/0000:ff:17.7
/sys/kernel/iommu_groups/10/devices/0000:ff:17.5
/sys/kernel/iommu_groups/10/devices/0000:ff:17.6
/sys/kernel/iommu_groups/10/devices/0000:ff:17.4
/sys/kernel/iommu_groups/10/devices/0000:ff:17.0
/sys/kernel/iommu_groups/39/devices/0000:0a:00.0
/sys/kernel/iommu_groups/29/devices/0000:00:1c.3
/sys/kernel/iommu_groups/0/devices/0000:00:1b.0
/sys/kernel/iommu_groups/19/devices/0000:00:05.0
/sys/kernel/iommu_groups/37/devices/0000:08:00.0
/sys/kernel/iommu_groups/9/devices/0000:ff:16.0
/sys/kernel/iommu_groups/9/devices/0000:ff:16.7
/sys/kernel/iommu_groups/9/devices/0000:ff:16.6
/sys/kernel/iommu_groups/27/devices/0000:00:1c.0
root@pve01:#
For å bruke og overvåke GPU-en i Proxmox, spesielt i et virtuelt miljø, kan du følge disse trinnene:
GPU passthrough gjør det mulig å tildele hele GPU-en til en virtuell maskin, slik at VM-en kan dra nytte av maskinvareakselerasjon. Dette er nyttig for applikasjoner som krever GPU-ressurser, som maskinlæring, videoredigering, eller gaming.
-
Aktiver IOMMU i BIOS:
- For Intel, aktiver "VT-d".
- For AMD, aktiver "AMD-Vi".
- Dette finnes ofte under "Advanced" eller "CPU Configuration" i BIOS-innstillingene.
-
Aktiver IOMMU i Proxmox:
Rediger
/etc/default/grub
og legg tilintel_iommu=on
(for Intel) elleramd_iommu=on
(for AMD) på linjen som begynner medGRUB_CMDLINE_LINUX_DEFAULT
:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Oppdater deretter GRUB og start serveren på nytt:
update-grub reboot
-
Bekreft IOMMU-støtte:
Etter omstart, kjør følgende kommando for å bekrefte at IOMMU er aktivert:
dmesg | grep -e DMAR -e IOMMU
-
Identifiser GPU-en og dens IOMMU-gruppe:
Bruk
lspci
for å finne GPU-en:lspci -nnk | grep -i nvidia
Finn IOMMU-gruppen GPU-en tilhører:
find /sys/kernel/iommu_groups/ -type l
-
Konfigurer GPU-passthrough i Proxmox:
- Gå til Proxmox GUI:
Datacenter
>Node
>VM
>Hardware
. - Klikk på "Add" > "PCI Device".
- Velg GPU-en (og eventuelt lydkortet hvis det er en del av GPU-en).
- Pass på at "All Functions" er avkrysset og "Primary GPU" ikke er avkrysset (med mindre dette er den primære GPU-en du vil bruke).
- Gå til Proxmox GUI:
-
Start VM-en:
- Start VM-en og installer de nødvendige GPU-driverne (f.eks. NVIDIA) i gjesten.
For å bruke GPU med LXC-konteinere, kan du bruke nvidia-docker
eller andre lignende teknologier som gjør det mulig å aksessere GPU-en fra en container:
-
Installer Nvidia GPU-drivere på Proxmox-host: Dette har du allerede gjort.
-
Installer
nvidia-container-toolkit
: Følg NVIDIA Container Toolkit installasjonsveiledning for å installere nødvendige verktøy for Docker-integrasjon. -
Konfigurer GPU-støtte i LXC-konteinere:
- Rediger containerens konfigurasjonsfil i
/etc/pve/lxc/<CTID>.conf
og legg til GPU-tilgang ved å bruke følgende parameter:
lxc.hook.mount: /usr/share/lxc/config/nvidia-hook lxc.cgroup2.devices.allow: c 195:* rwm lxc.cgroup2.devices.allow: c 243:* rwm lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
- Rediger containerens konfigurasjonsfil i
Du kan overvåke GPU-ytelse og bruksstatistikk ved hjelp av følgende verktøy:
Kommandoen nvidia-smi
viser sanntidsinformasjon om GPU-bruk, inkludert minnebruk, temperatur, og gjeldende prosesser:
watch -n 2 nvidia-smi
Dette vil oppdatere GPU-statistikk hvert 2. sekund.
-
Installer Prometheus og Node Exporter:
- Installer Prometheus på Proxmox-serveren for å samle inn metrikker.
- Bruk
node_exporter
for å få GPU-statistikk vianvidia-smi
.
-
Installer Grafana:
- Grafana kan brukes til å visualisere GPU-bruk over tid. Sett opp en ny datakilde for Prometheus i Grafana og lag tilpassede dashboards for GPU-overvåking.
For en enklere overvåkning, kan du også konfigurere Proxmox` RRD-grafikk (Round Robin Database) for å inkludere GPU-bruk. Dette krever tilpasning av Proxmox koden, noe som kan være mer avansert.
- GPU passthrough til VM-er og GPU-bruk i LXC-konteinere krever aktivering av IOMMU og riktig konfigurasjon av maskinvare og programvare.
-
Overvåking kan utføres med
nvidia-smi
, eller mer avanserte løsninger som Prometheus og Grafana for detaljerte visuelle dashboards.
Nvidia-driveren er allerede installert og oppdatert til den nyeste versjonen (535.183.01-1~deb12u1
). Det betyr at du nå bør sjekke at driveren fungerer som forventet.
-
Bekreft at driveren er lastet:
Kjør følgende kommando for å se om Nvidia-driveren er aktiv:
nvidia-smi
Dette verktøyet skal vise informasjon om GPU-en og den installerte driveren. Hvis informasjonen vises korrekt, betyr det at driveren fungerer som den skal.
-
Kontroller om Nvidia-modulene er lastet inn i kjernen:
Bruk denne kommandoen for å bekrefte at de nødvendige Nvidia-modulene er lastet:
lsmod | grep nvidia
Dette skal vise flere linjer med Nvidia-relaterte moduler, som
nvidia
,nvidia_uvm
,nvidia_modeset
, osv.
- Hvis
nvidia-smi
viser korrekt informasjon, oglsmod
viser Nvidia-moduler, er systemet ditt nå konfigurert med Nvidia-driveren på Proxmox. - Hvis du opplever problemer eller ikke ser forventet utdata, gi beskjed, så kan vi undersøke videre.
Hvis alt ser bra ut, kan du fortsette med dine planer for å bruke GPU-en i Proxmox-miljøet ditt.
Ja, det er mulig å legge til GPU-overvåking i Proxmox Web GUI slik at du kan se GPU-statistikk som en del av Summary
-fanen på samme måte som du ser CPU- og minnebruk. Dette krever noen ekstra trinn for å integrere NVIDIA GPU-informasjonen i Proxmox GUI.
gpustat
er et Python-verktøy som gir GPU-statistikk på en brukervennlig måte ved å bruke nvidia-smi
-kommandoen.
Installer gpustat
og nødvendig programvare:
apt update
apt install python3-pip
pip3 install gpustat
Opprett et skript som kjører nvidia-smi
eller gpustat
for å hente GPU-bruk og lagre det i et format som Proxmox kan lese.
Lag et skriptfil, for eksempel /usr/local/bin/proxmox-gpu-stats.sh
:
nano /usr/local/bin/proxmox-gpu-stats.sh
Lim inn følgende skript:
#!/bin/bash
# Output GPU stats in a format Proxmox can use
gpustat --json
Gjør skriptet kjørbart:
chmod +x /usr/local/bin/proxmox-gpu-stats.sh
Du må nå modifisere eller opprette et tilpasset plugin-script som lar Proxmox GUI lese GPU-statistikken.
-
Lag et nytt plugin-skript for å samle GPU-data regelmessig:
nano /etc/pve/gpu-stats-plugin.pl
-
Lim inn følgende Perl-kode:
#!/usr/bin/perl use strict; use warnings; my $output = `/usr/local/bin/proxmox-gpu-stats.sh`; # For RRD integration print "nvidia:0:gpu_util=$output\n";
-
Sett opp riktig tilgang og autorisasjon:
Gi scriptet nødvendige rettigheter:
chmod +x /etc/pve/gpu-stats-plugin.pl
-
Modifiser cronjob eller tilsvarende til å kalle skriptet:
Rediger Proxmox-konsollens
/etc/cron.d/pvestatd
-fil eller tilsvarende for å inkluderegpu-stats-plugin
-kjøringen.
Endelig må du konfigurere Proxmox til å inkludere GPU-data i GUI.
-
Rediger
pvestatd
-konfigurasjon:Oppdater
/etc/pve/status.cfg
til å inkludere GPU-data. -
Restart nødvendige tjenester:
Restart
pvestatd
ogpveproxy
:systemctl restart pvestatd.service systemctl restart pveproxy.service
Etter at disse trinnene er utført, kan du navigere til Proxmox Web GUI og gå til Summary
-fanen for en VM som bruker GPU. Du bør nå se GPU-grafer og statistikk på samme måte som du ser CPU og minne.
Denne tilnærmingen krever litt manuell konfigurasjon og koding, og det er viktig å sikkerhetskopiere alle systemfiler før du gjør endringer. Dette vil også sikre at Proxmox-integreringen er tilpasset etter dine spesifikke krav.