DeepEP : Un outil open source pour optimiser l'efficacité de la communication spécifiquement pour les modèles MoE (DeepSeek Open Source Week Day 2)

Introduction générale

DeepEP est une bibliothèque de communication open source développée par l'équipe deepseek-ai, qui se concentre sur l'amélioration de l'efficacité de la formation et du raisonnement des modèles de mélange d'experts (MoE) et du parallélisme d'experts (EP). DeepEP prend en charge les technologies NVLink et RDMA, est compatible avec les opérations de faible précision telles que le FP8, et a été conçu avec des noyaux à haute efficacité pour les scénarios d'entraînement et d'inférence respectivement. La bibliothèque a fait ses preuves dans l'environnement de production de l'équipe DeepSeek, en particulier pour les modèles MoE qui nécessitent une collaboration entre les nœuds, ce qui peut améliorer considérablement les performances globales du système, et constitue un assistant puissant pour les chercheurs et les développeurs en IA dans la construction de modèles d'apprentissage profond efficaces. DeepEP est actuellement en open-source sur GitHub, et la communauté est invitée à participer à son amélioration.

DeepEP:专为MoE模型优化通信效率的开源工具(DeepSeek 开源周第二天)

 

Liste des fonctions

  • Des communications efficaces entre tous les acteursOptimisation de la communication entre les GPU et prise en charge de NVLink intra-nœud et de RDMA inter-nœuds pour garantir un échange de données rapide et stable.
  • Soutien à la formation à haut débit: Fournit des noyaux conçus pour la formation et la prépopulation d'inférence qui peuvent gérer des transferts de données à grande échelle et améliorer l'efficacité de la formation des modèles.
  • Noyau d'inférence à faible latencePour la phase d'inférence et de décodage, la technologie RDMA pure est utilisée pour réduire la latence, ce qui convient aux scénarios d'application en temps réel.
  • Arithmétique de basse précision FP8La prise en charge native de la distribution FP8 réduit les coûts de calcul tout en maintenant les performances dans les environnements sensibles aux ressources.
  • Contrôle flexible des ressourcesLa nouvelle version du logiciel de gestion de l'information est la suivante : elle prend en charge l'ajustement du nombre de multiprocesseurs (SM) en continu, ce qui permet aux développeurs d'optimiser la configuration en fonction des conditions matérielles.
  • Chevauchement entre les communications et l'informatiqueCommunication et calcul transparents grâce au mécanisme de crochet afin d'améliorer l'utilisation du GPU.
  • Optimisation de la bande passante entre domainesLa solution de transfert de données de NVLink vers RDMA pour l'algorithme Packet Limit Domain de DeepSeek-V3 est très efficace.

 

Utiliser l'aide

Processus d'installation

DeepEP est un projet open source basé sur GitHub qui nécessite un téléchargement manuel et la configuration de l'environnement à utiliser. Voici les étapes détaillées de l'installation :

1. les conditions préalables

  • système d'exploitationLinux (par exemple Ubuntu 20.04 ou version ultérieure) est recommandé pour assurer la compatibilité avec le matériel GPU et réseau.
  • exigences en matière de matérielLes systèmes de gestion de l'information : équipés de GPU compatibles NVLink ou RDMA (par exemple, NVIDIA H800) et connectés à des réseaux à haut débit (par exemple, InfiniBand 400Gb/s).
  • dépendance logicielle: :
    • CUDA Toolkit (version recommandée compatible avec le matériel, par exemple CUDA 11.x ou 12.x).
    • NCCL (NVIDIA Collective Communication Library).
    • Version modifiée de NVSHMEM (DeepEP s'appuie sur ses capacités de communication et doit être installé séparément).
    • Python 3.8+ (pour les tests et l'exécution des scripts).

2. télécharger le code source de DeepEP

Ouvrez un terminal et exécutez la commande suivante pour cloner le dépôt :

git clone https://github.com/deepseek-ai/DeepEP.git  
cd DeepEP

3) Installation de NVSHMEM

DeepEP s'appuie sur une version modifiée de NVSHMEM.Guide d'installation de NVSHMEM. Les étapes brèves sont les suivantes :

  • Téléchargez le code source de NVSHMEM et appliquez le correctif fourni par DeepEP (situé dans le fichierthird-party/nvshmem.patch).
  • Compilation et installation :
    cd nvshmem  
    patch -p1 < ../third-party/nvshmem.patch  
    make -j && sudo make install
    

4) Compilation de DeepEP

Allez dans le répertoire DeepEP et compilez la bibliothèque de communication :

make

Après la compilation, les fichiers du noyau sont générés et peuvent être appelés dans le projet.

5. configuration des variables d'environnement

Pour que DeepEP fonctionne correctement, les paramètres liés à NVSHMEM, tels que l'affectation des canaux virtuels, doivent être définis :

export NVSHMEM_IB_SL=0  # 设置虚拟通道,避免流量冲突

Une configuration supplémentaire est disponible si vous devez activer le routage adaptatif (uniquement pour les noyaux à faible latence) :

export NVSHMEM_ENABLE_ADAPTIVE_ROUTING=1

6. test d'installation

Exécutez le script de test fourni pour vérifier la fonctionnalité du DeepEP :

python tests/test_low_latency.py

Si la sortie indique une communication réussie, l'installation est terminée.

Utilisation

DeepEP est principalement utilisé par le biais de flux de travail intégrés dans le modèle MoE, et ce qui suit est un guide détaillé sur les principales fonctionnalités :

Fonction 1 : Exécuter des formations à haut débit

Le noyau à haut débit de DeepEP est adapté à l'entraînement distribué des modèles MoE. En supposant que vous ayez un modèle basé sur DeepSeek-V3, vous pouvez suivre les étapes ci-dessous :

  1. Préparation des modèles et des donnéesLe modèle MoE : Assurez-vous que votre modèle MoE est configuré avec une logique parallèle experte et qu'il est prêt à recevoir des ensembles de données d'entraînement.
  2. Appel du noyau DeepEPIntroduction de l'interface de communication "tout-en-un" de DeepEP dans le script de formation. Exemple :
    #include "deep_ep.h"  
    void moe_train(float* input, float* output, int size) {  
    deep_ep_all_to_all(input, output, size, FP8);  
    }
    
  3. Matériel de configurationSpécifiez l'appareil GPU à utiliser, par exemple :
    CUDA_VISIBLE_DEVICES=0,1,2,3 ./train_script
    
  4. entraînement à la course à piedDeepEP optimise automatiquement la communication entre NVLink et RDMA après l'initiation de l'entraînement.

Fonctionnalité 2 : raisonnement à faible latence

Les noyaux à faible latence conviennent aux tâches de raisonnement en temps réel, telles que les systèmes de dialogue en ligne :

  1. Modèles de chargementChargement du modèle MoE pré-entraîné dans la mémoire.
  2. Appel du noyau d'inférenceUtiliser une interface de communication RDMA pure. Exemple :
    #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. Test de la vitesse de raisonnementLe délai d'attente : Exécutez la commande suivante pour mesurer le délai d'attente :
    python tests/test_inference.py --batch_size 128 --hidden_size 7168
    

    La sortie indiquera le temps d'inférence pour chaque lot, garantissant ainsi que les exigences en matière de temps réel sont respectées.

Fonction 3 : Optimisation informatique du 8e PC

DeepEP prend en charge la distribution FP8 afin de réduire les coûts de calcul :

  1. Activer le mode FP8Spécifier le type de données comme FP8 lors de l'appel de l'interface de communication.
  2. Précision de la vérificationLe test d'évaluation de la performance et de l'exactitude des données : Exécutez le script de test pour comparer les différences de performance et d'exactitude entre le FP8 et le BF16 :
    python tests/test_fp8.py
    
  3. Application à la productionLes configurations du FP8 peuvent être intégrées dans des processus d'apprentissage ou d'inférence existants.

Fonction 4 : Contrôle et optimisation des ressources

Ajuster le nombre de SM en fonction du matériel :

  1. Afficher le nombre de SM matériels: Utilisationnvidia-smiVérifiez le nombre de processeurs de flux dans le GPU.
  2. Fixer des limites au SM: spécifié dans le script :
    deep_ep_set_sm_limit(32);  // 限制为32个SM
    
  3. Performance des testsLes résultats de l'étude de faisabilité sont présentés dans le tableau ci-dessous : effectuer des tests après avoir ajusté le nombre de SM pour trouver la meilleure configuration.

mise en garde

  • Configuration du réseauDeepEP est testé de manière optimale sur les réseaux InfiniBand, tandis que RoCE nécessite une vérification supplémentaire de la compatibilité.
  • Routage adaptatifCette fonctionnalité n'est supportée que par les noyaux à faible latence ; l'activer pour les noyaux normaux peut entraîner des blocages.
  • Optimisation des grappes d'entreprisesIl est recommandé d'exécuter tous les scripts de test (par ex.tests/) pour adapter automatiquement la configuration à votre cluster.

Grâce à ces étapes, vous pouvez rapidement commencer à utiliser DeepEP et tirer pleinement parti de ses capacités d'optimisation de la communication dans le modèle MoE.

© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...