Allgemeine Einführung
DeepEP ist eine Open-Source-Kommunikationsbibliothek, die vom deepseek-ai-Team entwickelt wurde und sich auf die Verbesserung der Trainings- und Argumentationseffizienz von Mixture-of-Experts-Modellen (MoE) und Expert Parallelism (EP) konzentriert. DeepEP unterstützt NVLink- und RDMA-Technologien, ist kompatibel mit Low-Precision-Operationen wie FP8 und wurde mit hocheffizienten Kernels für Trainings- bzw. Inferenzszenarien entwickelt. Die Bibliothek hat sich in der Produktionsumgebung des DeepSeek-Teams bewährt, insbesondere für MoE-Modelle, die eine knotenübergreifende Zusammenarbeit erfordern, wodurch die Gesamtleistung des Systems erheblich verbessert werden kann, und ist ein leistungsstarker Assistent für KI-Forscher und Entwickler bei der Erstellung effizienter Deep-Learning-Modelle. Derzeit ist DeepEP als Open Source auf GitHub verfügbar, und die Community ist eingeladen, an seiner Verbesserung mitzuwirken.
Funktionsliste
- Effiziente All-zu-All-KommunikationOptimierte All-to-All-Kommunikation zwischen GPUs und Unterstützung von Intra-Node-NVLink und Inter-Node-RDMA für einen schnellen und stabilen Datenaustausch.
- Unterstützung von Schulungen mit hohem DurchsatzBietet Kernel für Training und Inferenz-Präpopulation, die große Datenübertragungen bewältigen und die Effizienz des Modelltrainings verbessern können.
- Inferenz-Kernel mit niedriger LatenzzeitFür die Inferenz- und Dekodierungsphase wird eine reine RDMA-Technologie verwendet, um die Latenzzeit zu reduzieren, die für Echtzeit-Anwendungsszenarien geeignet ist.
- FP8 Arithmetik mit niedriger GenauigkeitNative Unterstützung für FP8-Distribution senkt die Rechenkosten bei gleichbleibender Leistung in ressourcenintensiven Umgebungen.
- Flexible RessourcensteuerungUnterstützt die Anpassung der Anzahl der Streaming-Multiprozessoren (SM), so dass Entwickler die Konfiguration entsprechend den Hardwarebedingungen optimieren können.
- Überschneidungen zwischen Kommunikation und DatenverarbeitungSeamless communication and computation through the hook mechanism to improve GPU utilisation.
- Domänenübergreifende BandbreitenoptimierungBietet effiziente Unterstützung für die Datenweiterleitung von NVLink zu RDMA für den Packet Limit Domain-Algorithmus von DeepSeek-V3.
Hilfe verwenden
Einbauverfahren
DeepEP ist ein GitHub-basiertes Open-Source-Projekt, das einen manuellen Download und eine manuelle Konfiguration der zu verwendenden Umgebung erfordert. Hier sind die detaillierten Installationsschritte:
1. voraussetzungen
- BetriebssystemLinux (z. B. Ubuntu 20.04 oder höher) wird für die Kompatibilität mit GPU- und Netzwerkhardware empfohlen.
- Hardware-VoraussetzungAusgestattet mit NVLink oder RDMA-fähigen Grafikprozessoren (z. B. NVIDIA H800) und angeschlossen an Hochgeschwindigkeitsnetzwerke (z. B. InfiniBand 400Gb/s).
- Software-Abhängigkeit::
- CUDA Toolkit (empfohlene Version, die mit der Hardware kompatibel ist, z. B. CUDA 11.x oder 12.x).
- NCCL (NVIDIA Collective Communication Library).
- Modifizierte Version von NVSHMEM (DeepEP basiert auf dessen Kommunikationsfähigkeiten und muss separat installiert werden).
- Python 3.8+ (zum Testen und Ausführen von Skripten).
2. den DeepEP-Quellcode herunterladen
Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um das Repository zu klonen:
git clone https://github.com/deepseek-ai/DeepEP.git
cd DeepEP
3. die Installation von NVSHMEM
DeepEP basiert auf einer modifizierten Version von NVSHMEM, bitte lesen Sie die offiziell bereitgestellteNVSHMEM Installationsanleitung. Im Folgenden werden die Schritte kurz beschrieben:
- Laden Sie den NVSHMEM-Quellcode herunter und wenden Sie den von DeepEP zur Verfügung gestellten Patch an (zu finden in der Datei
third-party/nvshmem.patch
). - Kompilieren und installieren:
cd nvshmem patch -p1 < ../third-party/nvshmem.patch make -j && sudo make install
4. kompilieren von DeepEP
Wechseln Sie in das DeepEP-Verzeichnis und kompilieren Sie die Kommunikationsbibliothek:
make
Nach der Kompilierung werden Kernel-Dateien erzeugt, die im Projekt aufgerufen werden können.
5. die Umgebungsvariablen konfigurieren
Um sicherzustellen, dass DeepEP korrekt funktioniert, müssen NVSHMEM-bezogene Parameter, wie z. B. die Zuweisung virtueller Kanäle, eingestellt werden:
export NVSHMEM_IB_SL=0 # 设置虚拟通道,避免流量冲突
Eine zusätzliche Konfiguration ist möglich, wenn Sie das adaptive Routing aktivieren möchten (nur Kernel mit niedriger Latenz):
export NVSHMEM_ENABLE_ADAPTIVE_ROUTING=1
6. testweise Installation
Führen Sie das mitgelieferte Testskript aus, um die DeepEP-Funktionalität zu überprüfen:
python tests/test_low_latency.py
Wenn die Ausgabe eine erfolgreiche Kommunikation anzeigt, ist die Installation abgeschlossen.
Verwendung
DeepEP wird in erster Linie durch in das MoE-Modell integrierte Arbeitsabläufe verwendet. Im Folgenden finden Sie eine detaillierte Anleitung zu den wichtigsten Funktionen:
Funktion 1: Training mit hohem Durchsatz durchführen
Der DeepEP-Kernel mit hohem Durchsatz ist für das verteilte Training von MoE-Modellen geeignet. Wenn Sie ein DeepSeek-V3-basiertes Modell haben, können Sie die folgenden Schritte ausführen:
- Aufbereitung von Modellen und DatenMoE: Stellen Sie sicher, dass Ihr MoE-Modell mit paralleler Expertenlogik konfiguriert und für Trainingsdatensätze bereit ist.
- Aufrufen des DeepEP-KernelsEinführung der All-to-All-Kommunikationsschnittstelle von DeepEP in das Trainingsskript. Beispiel:
#include "deep_ep.h" void moe_train(float* input, float* output, int size) { deep_ep_all_to_all(input, output, size, FP8); }
- Konfiguration der HardwareGPU: Geben Sie das zu verwendende GPU-Gerät an, zum Beispiel:
CUDA_VISIBLE_DEVICES=0,1,2,3 ./train_script
- LauftrainingDeepEP optimiert nach dem Start des Trainings automatisch die Kommunikation zwischen NVLink und RDMA.
Merkmal 2: Reasoning mit geringer Latenzzeit
Kernel mit geringer Latenz eignen sich für Echtzeit-Schlussfolgern, wie z. B. Online-Dialogsysteme:
- Modelle ladenLaden Sie das vorab trainierte MoE-Modell in den Speicher.
- Aufrufen des InferenzkernsRDMA: Verwenden Sie eine reine RDMA-Kommunikationsschnittstelle. Beispiel:
#include "deep_ep.h" void moe_infer(float* query, float* result, int batch_size) { deep_ep_low_latency_all_to_all(query, result, batch_size); }
- Prüfung der Geschwindigkeit des Denkens: Führen Sie den folgenden Befehl aus, um die Verzögerung zu messen:
python tests/test_inference.py --batch_size 128 --hidden_size 7168
Die Ausgabe zeigt die Inferenzzeit für jede Charge an und gewährleistet, dass die Echtzeitanforderungen erfüllt werden.
Funktion 3: Optimierung des FP8-Rechners
DeepEP unterstützt die FP8-Verteilung, um die Rechenkosten zu senken:
- FP8-Modus einschaltenFP8: Geben Sie beim Aufruf der Kommunikationsschnittstelle den Datentyp als FP8 an.
- Genauigkeit der VerifizierungTestskript: Führen Sie das Testskript aus, um die Leistungs- und Genauigkeitsunterschiede zwischen FP8 und BF16 zu vergleichen:
python tests/test_fp8.py
- Anwendung auf die ProduktionIntegration von FP8-Konfigurationen in bestehende Trainings- oder Inferenzprozesse.
Funktion 4: Ressourcenkontrolle und -optimierung
Passen Sie die Anzahl der SMs an die Hardware an:
- Anzeige der Anzahl der Hardware-SMs: Verwendung
nvidia-smi
Überprüfen Sie die Anzahl der Stream-Prozessoren in der GPU. - Festlegung von SM-Grenzwerten: Wird im Skript angegeben:
deep_ep_set_sm_limit(32); // 限制为32个SM
- TestleistungFühren Sie Benchmarks durch, nachdem Sie die Anzahl der SMs angepasst haben, um die beste Konfiguration zu finden.
caveat
- Netzwerk-KonfigurationDeepEP ist optimal auf InfiniBand-Netzen getestet, während RoCE eine zusätzliche Überprüfung der Kompatibilität erfordert.
- Adaptive LeitweglenkungNur Kernel mit niedriger Latenz unterstützen diese Funktion; die Aktivierung für normale Kernel kann zu Deadlocks führen.
- Cluster-AbstimmungEs wird empfohlen, alle Testskripte (z. B.
tests/
Verzeichnis), um die Konfiguration automatisch an Ihren Cluster anzupassen.
Mit diesen Schritten können Sie schnell mit DeepEP beginnen und die Möglichkeiten der Kommunikationsoptimierung im MoE-Modell voll ausschöpfen.