DeepSeek veröffentlicht die Open-Source-Bibliothek DeepEP für MoE-Training und Inferenz
(github.com/deepseek-ai)DeepEP
DeepEP ist eine Kommunikationsbibliothek für Mixture-of-Experts (MoE) und Expert Parallelism (EP). Sie bietet schnelle All-to-All-GPU-Kernel mit niedriger Latenz, bekannt als MoE-Dispatch und -Combine. Außerdem unterstützt sie Berechnungen mit niedriger Präzision einschließlich FP8. Passend zum im DeepSeek-V3-Paper vorgeschlagenen gruppenbegrenzten Gating-Algorithmus stellt sie Kernel bereit, die die asynchrone Domänenbandbreitenübertragung optimieren und Daten von der NVLink-Domäne zur RDMA-Domäne übertragen. Diese Kernel bieten hohen Durchsatz und eignen sich für Training sowie Prefill-Workloads bei der Inferenz. Außerdem wird die Steuerung der Anzahl der SMs (Streaming Multiprocessors) unterstützt. Für latenzsensitive Inferenz-Decodierung enthält DeepEP Low-Latency-Kernel, die reines RDMA nutzen, um die Latenz zu minimieren. Die Bibliothek führt zudem eine hook-basierte Methode zur Überlappung von Kommunikation und Berechnung ein, die keine SM-Ressourcen belegt.
Leistung
Allgemeine Kernel mit NVLink- und RDMA-Übertragung
- Auf H800 wurde der allgemeine Kernel mit maximal etwa 160 GB/s NVLink-Bandbreite sowie einer CX7-InfiniBand-400-Gb/s-RDMA-Netzwerkkarte (~50 GB/s maximale Bandbreite) getestet.
- Folgt dem DeepSeek-V3/R1-Pretraining-Setup (4096 Tokens pro Batch, 7168 Hidden, Top-4-Gruppen, Top-8-Experten, FP8-Dispatch und BF16-Combine).
Low-Latency-Kernel mit reinem RDMA
- Auf H800 wurde der Low-Latency-Kernel mit einer CX7-InfiniBand-400-Gb/s-RDMA-Netzwerkkarte (~50 GB/s maximale Bandbreite) getestet.
- Folgt dem typischen produktiven DeepSeek-V3/R1-Setup (128 Tokens pro Batch, 7168 Hidden, Top-8-Experten, FP8-Dispatch und BF16-Combine).
Schnellstart
Anforderungen
- Hopper-GPU (in Zukunft könnten weitere Architekturen oder Geräte unterstützt werden)
- Python 3.8 oder höher
- CUDA 12.3 oder höher
- PyTorch 2.1 oder höher
- NVLink für die Kommunikation innerhalb eines Knotens
- RDMA-Netzwerk für die Kommunikation zwischen Knoten
NVSHMEM-Abhängigkeit herunterladen und installieren
DeepEP hängt von einer modifizierten Version von NVSHMEM ab. Für die Installation sollte die Installationsanleitung konsultiert werden.
Netzwerkkonfiguration
DeepEP wurde vollständig in InfiniBand-Netzwerken getestet und ist theoretisch auch mit RDMA over Converged Ethernet (RoCE) kompatibel.
Traffic-Isolation
InfiniBand unterstützt Traffic-Isolation über Virtual Lanes (VL). Um Interferenzen zwischen unterschiedlichen Traffic-Typen zu vermeiden, wird empfohlen, Workloads wie folgt auf virtuelle Lanes aufzuteilen:
- Workloads mit allgemeinen Kerneln
- Workloads mit Low-Latency-Kerneln
- Sonstige Workloads
In DeepEP kann die Zuweisung virtueller Lanes durch Setzen der Umgebungsvariable NVSHMEM_IB_SL gesteuert werden.
Adaptives Routing
Adaptives Routing ist eine fortgeschrittene Routing-Funktion von InfiniBand-Switches, die Traffic gleichmäßig auf mehrere Pfade verteilen kann. Derzeit unterstützen die Low-Latency-Kernel adaptives Routing, die allgemeinen Kernel jedoch nicht (eine Unterstützung könnte bald folgen). Wird adaptives Routing für normale Inter-Node-Kernel aktiviert, kann es zu Deadlocks oder Problemen mit Datenkorruption kommen. Bei den Low-Latency-Kerneln kann die Aktivierung von adaptivem Routing Netzwerkstaus durch Routing-Konflikte vollständig beseitigen, verursacht jedoch zusätzliche Latenz. Für optimale Leistung wird folgende Konfiguration empfohlen:
- Adaptives Routing in Umgebungen mit hoher Netzwerkauslastung aktivieren
- Statisches Routing in Umgebungen mit geringer Netzwerkauslastung verwenden
Congestion Control
Da in Produktionsumgebungen keine signifikante Congestion beobachtet wurde, ist Congestion Control deaktiviert.
Schnittstellen und Beispiele
Beispielnutzung für Modelltraining oder Inferenz-Prefill
Die allgemeinen Kernel können für Modelltraining oder die Inferenz-Prefill-Phase (ohne Backward-Teil) verwendet werden.
Beispielnutzung für Inferenz-Decodierung
Die Low-Latency-Kernel können in der Inferenz-Decodierungsphase verwendet werden.
Hinweise
- Für extreme Performance wurde die undokumentierte PTX-Instruktion
ld.global.nc.L1::no_allocate.L2::256Bentdeckt und eingesetzt. Diese Instruktion führt undefiniertes Verhalten aus, da sie mit einem inkonsistenten schreibgeschützten PTX-Modifikator auf volatile GPU-Speicherbereiche zugreift. Tests mit.L1::no_allocateauf der Hopper-Architektur zeigten jedoch deutlich bessere Leistung. Falls die Kernel auf anderen Plattformen nicht funktionieren, kann dies deaktiviert werden, indemDISABLE_AGGRESSIVE_PTX_INSTRS=1zusetup.pyhinzugefügt wird, oder es kann ein Issue gemeldet werden. - Für bessere Leistung im Cluster wird empfohlen, alle Tests auszuführen und die optimale Auto-Tuning-Konfiguration zu verwenden. Die Standardkonfiguration wurde für DeepSeeks internen Cluster optimiert.
Lizenz
Dieses Code-Repository wird unter der MIT-Lizenz veröffentlicht. Code, der auf NVSHMEM verweist (einschließlich csrc/kernels/ibgda_device.cuh und third-party/nvshmem.patch), unterliegt der NVSHMEM SLA.
1 Kommentare
Hacker-News-Kommentare
.L1::no_allocatejedoch getestet und gewährleistet, und die Performance dürfte deutlich besser sein