Gehackter Nvidia-4090-GPU-Treiber aktiviert P2P
(github.com/tinygrad)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_GH100wird der gesamte VRAM auf BAR1 gemappt - In der Funktion
MapAperturemusste die Nutzung dieses Bereichs deaktiviert werden
- Mit Methoden wie
Schwierigkeiten bei der Aktivierung von P2P
- Auch nach dem VRAM-Mapping trat beim Ausführen von
./simpleP2Pauscuda-samplesein MMU-Fehler auf- Dabei wird
GMMU_APERTURE_PEERals Mapping-Typ verwendet, was auf der 4090 nicht unterstützt wird - Auf der 4090 werden nur
GMMU_APERTURE_VIDEO,GMMU_APERTURE_SYS_NONCOHundGMMU_APERTURE_SYS_COHunterstützt
- Dabei wird
GMMU_APERTURE_PEERwurde aufGMMU_APERTURE_SYS_NONCOHgeändert- CPU-L2-Cache-Kohärenz ist nicht erforderlich, aber die Daten müssen über den PCIe-Bus gehen
- Das Peer-Adressfeld
fldAddrPeerwurde infldAddrSysmemgeändert - Im Feld
fabricBaseAddresswurde eine aufBAR1basierende Adresse gesetzt
Verifizierung der Funktion
- Korrekte Funktion von
./simpleP2Pbestätigt- P2P zwischen GPU0 und GPU1 funktioniert mit 24 GB/s
- Mit
p2pBandwidthLatencyTestwurde 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.