DeepEP: Una herramienta de código abierto para optimizar la eficacia de la comunicación específicamente para modelos de ME (DeepSeek Open Source Week Day 2)

Introducción general

DeepEP es una librería de comunicación de código abierto desarrollada por el equipo deepseek-ai, centrada en mejorar la eficiencia de entrenamiento y razonamiento de los modelos de Mezcla de Expertos (MoE) y Paralelismo Experto (EP). DeepEP admite las tecnologías NVLink y RDMA, es compatible con operaciones de baja precisión como FP8 y se ha diseñado con kernels de alta eficiencia para escenarios de entrenamiento e inferencia, respectivamente. La biblioteca ha sido probada en el entorno de producción del equipo DeepSeek, especialmente para modelos MoE que requieren la colaboración entre nodos, lo que puede mejorar significativamente el rendimiento general del sistema, y es un poderoso asistente para los investigadores y desarrolladores de IA en la construcción de modelos eficientes de aprendizaje profundo. Actualmente, DeepEP es de código abierto en GitHub, y la comunidad está invitada a participar en su mejora.

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

 

Lista de funciones

  • Comunicaciones eficientes de todos a todosNVLink: optimiza la comunicación entre las GPU y admite NVLink entre nodos y RDMA entre nodos para garantizar un intercambio de datos rápido y estable.
  • Apoyo a la formación de alto rendimientoProporciona núcleos diseñados para la prepoblación de formación e inferencia que pueden gestionar transferencias de datos a gran escala y mejorar la eficacia de la formación de modelos.
  • Núcleo de inferencia de baja latenciaPara la fase de inferencia y descodificación, se utiliza tecnología RDMA pura para reducir la latencia, lo que resulta adecuado para escenarios de aplicaciones en tiempo real.
  • FP8 Aritmética de baja precisión: La compatibilidad nativa con la distribución FP8 reduce los costes de computación a la vez que mantiene el rendimiento para entornos sensibles a los recursos.
  • Control flexible de los recursos: Admite el ajuste del recuento de multiprocesadores (SM) en streaming, lo que permite a los desarrolladores optimizar la configuración en función de las condiciones del hardware.
  • Solapamiento entre comunicaciones e informática: Comunicación y cálculo sin fisuras a través del mecanismo de gancho para mejorar la utilización de la GPU.
  • Optimización del ancho de banda entre dominiosProporciona soporte eficiente de reenvío de datos de NVLink a RDMA para el algoritmo de dominio de límite de paquetes de DeepSeek-V3.

 

Utilizar la ayuda

Proceso de instalación

DeepEP es un proyecto de código abierto basado en GitHub que requiere la descarga manual y la configuración del entorno para su uso. A continuación se detallan los pasos de instalación:

1. Condiciones previas

  • sistema operativoSe recomienda un sistema Linux (por ejemplo, Ubuntu 20.04 o posterior) para garantizar la compatibilidad con la GPU y el hardware de red.
  • requisitos de hardwareEquipadas con GPU compatibles con NVLink o RDMA (por ejemplo, NVIDIA H800) y conectadas a redes de alta velocidad (por ejemplo, InfiniBand 400Gb/s).
  • dependencia del software::
    • CUDA Toolkit (versión recomendada compatible con el hardware, como CUDA 11.x o 12.x).
    • NCCL (Biblioteca de comunicación colectiva de NVIDIA).
    • Versión modificada de NVSHMEM (DeepEP depende de sus capacidades de comunicación y debe instalarse por separado).
    • Python 3.8+ (para pruebas y ejecución de scripts).

2. Descarga el código fuente de DeepEP

Abra un terminal y ejecute el siguiente comando para clonar el repositorio:

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

3. Instalación de NVSHMEM

DeepEP se basa en una versión modificada de NVSHMEM, por favor refiérase a la proporcionada oficialmenteGuía de instalación de NVSHMEM. Los pasos breves son los siguientes:

  • Descargue el código fuente de NVSHMEM y aplique el parche proporcionado por DeepEP (ubicado en la carpetathird-party/nvshmem.patch).
  • Compilar e instalar:
    cd nvshmem  
    patch -p1 < ../third-party/nvshmem.patch  
    make -j && sudo make install
    

4. Compilación de DeepEP

Ve al directorio DeepEP y compila la librería de comunicación:

make

Tras la compilación, se generan archivos del núcleo que pueden invocarse en el proyecto.

5. Configuración de las variables de entorno

Para que DeepEP funcione correctamente, es necesario configurar los parámetros relacionados con NVSHMEM, como la asignación de canales virtuales:

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

Hay disponible una configuración adicional si necesita habilitar el enrutamiento adaptativo (sólo kernels de baja latencia):

export NVSHMEM_ENABLE_ADAPTIVE_ROUTING=1

6. Prueba de instalación

Ejecute el script de prueba proporcionado para verificar la funcionalidad de DeepEP:

python tests/test_low_latency.py

Si la salida muestra una comunicación correcta, la instalación se ha completado.

Utilización

DeepEP se utiliza principalmente a través de flujos de trabajo integrados en el modelo MoE, y a continuación se ofrece una guía detallada de las principales funciones:

Función 1: Ejecutar un entrenamiento de alto rendimiento

El kernel de alto rendimiento de DeepEP es adecuado para el entrenamiento distribuido de modelos MoE. Suponiendo que tienes un modelo basado en DeepSeek-V3, puedes seguir los siguientes pasos:

  1. Preparación de modelos y datosAsegúrese de que su modelo MoE está configurado con lógica paralela experta y listo para los conjuntos de datos de entrenamiento.
  2. Llamada al núcleo DeepEPIntroduce la interfaz de comunicación todo-a-todo de DeepEP en el script de entrenamiento. Ejemplo:
    #include "deep_ep.h"  
    void moe_train(float* input, float* output, int size) {  
    deep_ep_all_to_all(input, output, size, FP8);  
    }
    
  3. Hardware de configuración: Especifica el dispositivo GPU a utilizar, por ejemplo:
    CUDA_VISIBLE_DEVICES=0,1,2,3 ./train_script
    
  4. entrenamiento de running: Tras iniciar el entrenamiento, DeepEP optimiza automáticamente la comunicación entre NVLink y RDMA.

Función 2: razonamiento de baja latencia

Los núcleos de baja latencia son adecuados para tareas de razonamiento en tiempo real, como los sistemas de diálogo en línea:

  1. Modelos de cargaCarga en memoria el modelo MoE preentrenado.
  2. Llamada al núcleo de inferencia: Utiliza una interfaz de comunicación RDMA pura. Ejemplo:
    #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. Pruebas de velocidad de razonamientoEjecuta el siguiente comando para medir el retardo:
    python tests/test_inference.py --batch_size 128 --hidden_size 7168
    

    La salida mostrará el tiempo de inferencia de cada lote, garantizando que se cumplen los requisitos de tiempo real.

Función 3: Optimización informática del 8PM

DeepEP admite la distribución FP8 para reducir los costes computacionales:

  1. Activar modo FP8: Especifique el tipo de datos como FP8 al llamar a la interfaz de comunicación.
  2. Precisión de la verificaciónEjecute el script de prueba para comparar las diferencias de rendimiento y precisión entre FP8 y BF16:
    python tests/test_fp8.py
    
  3. Aplicación a la producción: Integre las configuraciones del FP8 en los procesos de formación o inferencia existentes.

Función 4: Control y optimización de recursos

Ajusta el número de SMs para adaptarlos al hardware:

  1. Ver el número de SM de hardware: Usonvidia-smiComprueba el número de procesadores de flujo de la GPU.
  2. Establecer límites SMEspecificado en el script:
    deep_ep_set_sm_limit(32);  // 限制为32个SM
    
  3. Rendimiento de las pruebasEjecuta pruebas de rendimiento después de ajustar el número de SM para encontrar la mejor configuración.

advertencia

  • Configuración de la red: DeepEP se prueba de forma óptima en redes InfiniBand, RoCE requiere una verificación adicional de la compatibilidad.
  • Enrutamiento adaptativo: Sólo los kernels de baja latencia soportan esta función; activarla para kernels normales puede provocar bloqueos.
  • Ajuste de clústeresSe recomienda ejecutar todas las secuencias de comandos de prueba (p. ej.tests/) para ajustar automáticamente la configuración a su clúster.

Con estos pasos, podrás empezar a utilizar DeepEP rápidamente y aprovechar al máximo sus funciones de optimización de las comunicaciones en el modelo MoE.

© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...