1 Punkte von GN⁺ 2024-04-13 | Noch keine Kommentare. | Auf WhatsApp teilen

P2P-Unterstützung zum NVIDIA Linux Open GPU-Treiber hinzugefügt

Dieses Projekt ist ein Fork des NVIDIA-Treibers und fügt P2P-Unterstützung für die 4090-GPU hinzu.

  • Einfache Installation durch Ausführen von ./install.sh
  • Möglicherweise muss der bestehende Treiber zunächst aus DKMS entfernt werden
  • Das System benötigt Large-BAR-Unterstützung und IOMMU muss deaktiviert sein
  • Es ist nicht sicher, ob alle Cache-Flushing-Vorgänge korrekt sind; bitte meldet gefundene Probleme
  • Dies ist kein Hack, sondern eine Implementierung gemäß der PCIe-Spezifikation; mit genügend Aufräumarbeit könnte sie upstream übernommen werden

Funktionsweise

Probleme des bisherigen NVIDIA-P2P

  • Bisher wurden Speicherübertragungen zwischen GPUs über eine Hardware-Schnittstelle namens MAILBOXP2P abgewickelt
  • Auf der 4090 fehlt diese Hardware oder ist deaktiviert, daher funktioniert P2P nicht
  • Frühe Treiber meldeten zwar, dass es funktioniere, tatsächlich lief die Übertragung aber über den PCIe-Bus
  • Da jedoch die Mailbox-Hardware fehlte, landeten die kopierten Daten nicht am richtigen Ort und konnten Systemabstürze verursachen

Hinzugefügte Large-BAR-Unterstützung

  • NVIDIA hat Large-BAR-Unterstützung für einige 3090-Modelle und alle 4090 hinzugefügt
  • Beim H100 wurde mit BAR1P2P ein PCIe-Modus eingeführt, der BAR direkt statt der Mailbox verwendet
  • Um dies auf der 4090 zu aktivieren, muss das HAL umgangen und die GH100-Methode direkt aufgerufen werden
    • Mit Methoden wie kbusEnableStaticBar1Mapping_GH100 wird der gesamte VRAM auf BAR1 gemappt
    • In der Funktion MapAperture musste die Nutzung dieses Bereichs deaktiviert werden

Schwierigkeiten bei der Aktivierung von P2P

  • Auch nach dem VRAM-Mapping trat beim Ausführen von ./simpleP2P aus cuda-samples ein MMU-Fehler auf
    • Dabei wird GMMU_APERTURE_PEER als Mapping-Typ verwendet, was auf der 4090 nicht unterstützt wird
    • Auf der 4090 werden nur GMMU_APERTURE_VIDEO, GMMU_APERTURE_SYS_NONCOH und GMMU_APERTURE_SYS_COH unterstützt
  • GMMU_APERTURE_PEER wurde auf GMMU_APERTURE_SYS_NONCOH geändert
    • CPU-L2-Cache-Kohärenz ist nicht erforderlich, aber die Daten müssen über den PCIe-Bus gehen
  • Das Peer-Adressfeld fldAddrPeer wurde in fldAddrSysmem geändert
  • Im Feld fabricBaseAddress wurde eine auf BAR1 basierende Adresse gesetzt

Verifizierung der Funktion

  • Korrekte Funktion von ./simpleP2P bestätigt
    • P2P zwischen GPU0 und GPU1 funktioniert mit 24 GB/s
  • Mit p2pBandwidthLatencyTest wurde die bidirektionale Bandbreite geprüft
    • Gemessen wurden 920 GB/s lokale Bandbreite und 51 GB/s P2P-Bandbreite
  • Kompatibilität mit NCCL-Tests verifiziert
    • Mit 6× 4090-GPUs wurde eine durchschnittliche Bus-Bandbreite von 24,5 GB/s erreicht

Meinung von GN⁺

  • Da der Großteil des NVIDIA-Treibers als Open Source veröffentlicht ist, konnte die Entwickler-Community vermutlich solche Versuche überhaupt erst unternehmen. Hoffentlich wird künftig noch mehr davon Open Source.
  • Wenn sich die starke Leistung der 4090 durch den Verbund mehrerer Karten nutzen lässt, könnten auch einzelne Entwickler oder kleine Labs KI-Modelle in großem Maßstab trainieren.
  • Dass Entwickler solche hardwareabhängigen und heiklen Teile selbst anfassen müssen, ist aber auch ein Hinweis darauf, dass NVIDIA die Unterstützung für die 4090 noch nicht vollständig abgeschlossen hat.
  • Außerdem gilt das nur für den Linux-Treiber; eine kommerzielle Nutzung unter Windows scheint weiterhin in weiter Ferne. Hoffentlich liefert NVIDIA bald offizielle Unterstützung.
  • Da die 4090 noch sehr neue Hardware ist, dürfte vollständige Kompatibilität mit Bibliotheken und ML-Frameworks wie CUDA, PyTorch und TensorFlow schwer zu erwarten sein. Man wird wohl auf weitere Stabilisierung warten müssen.

Noch keine Kommentare.

Noch keine Kommentare.