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:

1. Forberedelse for GPU Passthrough

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

2. Konfigurer Proxmox for GPU Passthrough

For å konfigurere GPU passthrough, følg disse trinnene:

A. Rediger Grub-konfigurasjon for IOMMU-støtte

  1. Åpne Grub-konfigurasjonen:

    nano /etc/default/grub
  2. Endre Grub-konfigurasjonen for å aktivere IOMMU-støtte:

    Legg til intel_iommu=on eller amd_iommu=on i linjen som begynner med GRUB_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.

  3. Oppdater Grub og start systemet på nytt:

    update-grub
    reboot

B. Svar på Eventuelle BIOS-problemer

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.

C. Sorter GPU og Lydkontroller

Du må "blackliste" Nouveau-driveren og angi NVIDIA GPU-en og dens lydkontroller for passthrough:

  1. 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
  2. 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.
  3. Bekreft Passthrough:

    Start VM-en og installer NVIDIA-driverne inne i VM-en. Sørg for at VM-en kan gjenkjenne GPU-en korrekt.

3. Overvåking av GPU-bruk

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.

Tilleggsoppfølging:

  • 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:

1. Bruk GPU i Proxmox

A. GPU Passthrough til Virtuelle Maskiner (VM-er)

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.

  1. 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.
  2. Aktiver IOMMU i Proxmox:

    Rediger /etc/default/grub og legg til intel_iommu=on (for Intel) eller amd_iommu=on (for AMD) på linjen som begynner med GRUB_CMDLINE_LINUX_DEFAULT:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

    Oppdater deretter GRUB og start serveren på nytt:

    update-grub
    reboot
  3. Bekreft IOMMU-støtte:

    Etter omstart, kjør følgende kommando for å bekrefte at IOMMU er aktivert:

    dmesg | grep -e DMAR -e IOMMU
  4. 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
  5. 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).
  6. Start VM-en:

    • Start VM-en og installer de nødvendige GPU-driverne (f.eks. NVIDIA) i gjesten.

B. GPU for LXC Containers

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:

  1. Installer Nvidia GPU-drivere på Proxmox-host: Dette har du allerede gjort.

  2. Installer nvidia-container-toolkit: Følg NVIDIA Container Toolkit installasjonsveiledning for å installere nødvendige verktøy for Docker-integrasjon.

  3. 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

2. Overvåking av GPU i Proxmox

Du kan overvåke GPU-ytelse og bruksstatistikk ved hjelp av følgende verktøy:

A. Bruk av nvidia-smi på Proxmox

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.

B. Bruke Grafana og Prometheus

  1. Installer Prometheus og Node Exporter:

    • Installer Prometheus på Proxmox-serveren for å samle inn metrikker.
    • Bruk node_exporter for å få GPU-statistikk via nvidia-smi.
  2. 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.

C. Integrer med Proxmox Dashboard

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.

Oppsummering

  • 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.

Sjekk om Nvidia-driveren fungerer

  1. 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.

  2. 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.

Neste steg

  • Hvis nvidia-smi viser korrekt informasjon, og lsmod 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.

Slik kan du legge til GPU-statistikk i Proxmox GUI:

1. Installer gpustat og nvidia-smi

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

2. Lag et skript for å samle GPU-data

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

3. Integrer skriptet i Proxmox RRD (Round-Robin Database)

Du må nå modifisere eller opprette et tilpasset plugin-script som lar Proxmox GUI lese GPU-statistikken.

  1. Lag et nytt plugin-skript for å samle GPU-data regelmessig:

    nano /etc/pve/gpu-stats-plugin.pl
  2. 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";
  3. Sett opp riktig tilgang og autorisasjon:

    Gi scriptet nødvendige rettigheter:

    chmod +x /etc/pve/gpu-stats-plugin.pl
  4. Modifiser cronjob eller tilsvarende til å kalle skriptet:

    Rediger Proxmox-konsollens /etc/cron.d/pvestatd-fil eller tilsvarende for å inkludere gpu-stats-plugin-kjøringen.

4. Oppdater Proxmox GUI for å vise GPU-grafer

Endelig må du konfigurere Proxmox til å inkludere GPU-data i GUI.

  1. Rediger pvestatd-konfigurasjon:

    Oppdater /etc/pve/status.cfg til å inkludere GPU-data.

  2. Restart nødvendige tjenester:

    Restart pvestatd og pveproxy:

    systemctl restart pvestatd.service
    systemctl restart pveproxy.service

5. Bekreft GPU-grafer i GUI

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.

Vær oppmerksom på

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.

⚠️ **GitHub.com Fallback** ⚠️