AI Personal Learning
und praktische Anleitung
讯飞绘镜

DeepEP: Ein Open-Source-Tool zur Optimierung der Kommunikationseffizienz speziell für MoE-Modelle (DeepSeek Open Source Week Day 2)

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.

DeepEP:专为MoE模型优化通信效率的开源工具-1


 

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

  1. Aufbereitung von Modellen und DatenMoE: Stellen Sie sicher, dass Ihr MoE-Modell mit paralleler Expertenlogik konfiguriert und für Trainingsdatensätze bereit ist.
  2. 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);  
    }
    
  3. Konfiguration der HardwareGPU: Geben Sie das zu verwendende GPU-Gerät an, zum Beispiel:
    CUDA_VISIBLE_DEVICES=0,1,2,3 ./train_script
    
  4. 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:

  1. Modelle ladenLaden Sie das vorab trainierte MoE-Modell in den Speicher.
  2. 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);  
    }
    
  3. 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:

  1. FP8-Modus einschaltenFP8: Geben Sie beim Aufruf der Kommunikationsschnittstelle den Datentyp als FP8 an.
  2. 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
    
  3. 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:

  1. Anzeige der Anzahl der Hardware-SMs: Verwendungnvidia-smiÜberprüfen Sie die Anzahl der Stream-Prozessoren in der GPU.
  2. Festlegung von SM-Grenzwerten: Wird im Skript angegeben:
    deep_ep_set_sm_limit(32);  // 限制为32个SM
    
  3. 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.

Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " DeepEP: Ein Open-Source-Tool zur Optimierung der Kommunikationseffizienz speziell für MoE-Modelle (DeepSeek Open Source Week Day 2)
de_DEDeutsch