DeepEP
DeepEP: 효율적인 전문가 병렬 커뮤니케이션 라이브러리
DeepEP는 복잡한 머신 러닝 작업, 특히 전문가 혼합(MoE) 모델과 관련된 작업을 처리할 때 컴퓨터(또는 GPU)의 통신을 가속화하고 개선하는 데 도움이 되도록 설계된 라이브러리입니다. 이러한 모델은 여러 '전문가'(전문화된 하위 모델)를 사용하여 문제의 여러 부분을 처리하며, DeepEP는 이러한 전문가 간에 데이터가 빠르고 효율적으로 이동하도록 보장합니다.
DeepEP는 복잡한 머신 러닝 작업, 특히 전문가 혼합(MoE) 모델과 관련된 작업을 처리할 때 컴퓨터(또는 GPU)의 통신을 가속화하고 개선하는 데 도움이 되도록 설계된 라이브러리입니다. 이러한 모델은 여러 '전문가'(전문화된 하위 모델)를 사용하여 문제의 여러 부분을 처리하며, DeepEP는 이러한 전문가 간에 데이터가 빠르고 효율적으로 이동하도록 보장합니다.
DeepEP는 전문가 혼합(MoE) 및 전문가 병렬(EP) 시나리오에 특별히 최적화된 차세대 분산 통신 프레임워크입니다. 이 프레임워크는 처리량이 높고 지연 시간이 짧은 GPU용 올투올 통신 커널을 제공하여 MoE 스케줄링과 컴포저블 작업을 완벽하게 지원합니다.
순수 RDMA 기술을 기반으로 하는 DeepEP는 추론 디코딩 성능에 특별히 최적화된 저지연 커널 세트를 제공하며, SM 리소스를 차지하지 않고 뛰어난 병렬 효율성을 달성하는 고유한 후크 기반 통신-계산 중첩 방식을 특징으로 합니다.
DeepEP는 FP8을 포함한 저정밀 연산을 지원하며, DeepSeek-V3에서 제안한 그룹 제약 게이팅 알고리즘에 대한 최적화를 제공합니다. 특히 이 프레임워크는 NVLink에서 RDMA에 이르는 이기종 도메인 간의 효율적인 데이터 전송을 지원하여 학습 및 추론 프리페칭 작업에서 뛰어난 성능을 보장합니다.
DeepEP는 MoE 분배 및 병합 연산 전용이며, FP8을 포함한 저정밀 연산을 지원합니다. 동시에 DeepEP는 DeepSeek-V3 논문에서 제안한 그룹 제한 게이팅 알고리즘에 특별히 최적화되어 있으며 비대칭 도메인 대역폭 포워딩(예: NVLink 도메인에서 RDMA 도메인으로)을 위한 일련의 고성능 코어를 제공합니다. 이러한 코어는 훈련 및 추론 사전 채우기 작업을 위한 높은 처리량을 제공할 뿐만 아니라 스트림 멀티프로세서(SM) 수 제어도 지원합니다. 지연 시간에 민감한 추론 디코딩 시나리오의 경우, DeepEP에는 지연 시간을 최소화하기 위한 순수 RDMA 저지연 코어 세트가 포함되어 있습니다. 또한 이 라이브러리는 SM 리소스를 사용하지 않는 후크 기반 통신-계산 중첩 접근 방식을 도입하여 효율성을 더욱 향상시킵니다.
하이브리드 전문가 모델은 여러 개의 '전문가' 네트워크와 입력 데이터를 라우팅할 전문가를 결정하는 '게이트' 네트워크를 결합한 신경망 아키텍처입니다. 이 아키텍처는 모든 네트워크가 아닌 일부 전문가만 한 번에 활성화되기 때문에 계산 효율을 유지하면서 모델 크기를 크게 늘릴 수 있습니다. MoE 개념은 1991년 Jacobs, Jordan, Hinton에 의해 처음 제안되었지만 최근까지 대규모 언어 모델링에 널리 사용되지는 않았습니다. MoE 아키텍처는 전문가를 드물게 활성화하여 대규모 모델 학습 및 배포를 가능하게 하는 Google의 Switch Transformers, Microsoft의 Z-Code, DeepSeek의 DeepSeek-V3에서 사용됩니다.
일반 커널을 H800(최대 160GB/s NVLink 최대 대역폭)에서 각각 CX7 InfiniBand 400Gb/s RDMA 네트워크 카드(최대 50GB/s 대역폭)에 연결하여 테스트했습니다. 그리고 DeepSeek-V3/R1 사전 학습 설정(배치당 4096개 토큰, 7168개 숨김, 상위 4개 그룹, 상위 8개 전문가, FP8 디스패칭 및 BF16 결합)을 따릅니다.
유형 | 디스패치 #EP | 병목 구간 대역폭 | #EP 결합 | 병목 구간 대역폭 |
---|---|---|---|---|
인트라노드 | 8 | 153GB/s(NV링크) | 8 | 158GB/s(NV링크) |
인터노드 | 16 | 43GB/s(RDMA) | 16 | 43GB/s(RDMA) |
인터노드 | 32 | 44GB/s(RDMA) | 32 | 47GB/s(RDMA) |
인터노드 | 64 | 46GB/s(RDMA) | 64 | 45GB/s(RDMA) |
각 커널을 CX7 InfiniBand 400Gb/s RDMA 네트워크 카드(최대 대역폭 ~50GB/s)에 연결하여 H800에서 지연 시간이 짧은 커널을 테스트했습니다. 그리고 일반적인 DeepSeek-V3/R1 프로덕션 설정(배치당 128개 토큰, 7168개 숨김, 상위 8명의 전문가, FP8 디스패칭 및 BF16 결합)을 따릅니다.
디스패치 #EP | 지연 시간 | RDMA 대역폭 | #EP 결합 | 지연 시간 | RDMA 대역폭 |
---|---|---|---|---|---|
8 | 163 미국 | 46 GB/s | 8 | 318 미국 | 46 GB/s |
16 | 173 미국 | 43 GB/s | 16 | 329 미국 | 44 GB/s |
32 | 182 미국 | 41 GB/s | 32 | 350 미국 | 41 GB/s |
64 | 186 미국 | 40 GB/s | 64 | 353 미국 | 41 GB/s |
128 | 192 미국 | 39 GB/s | 128 | 369 미국 | 39 GB/s |
256 | 194 미국 | 39 GB/s | 256 | 360 미국 | 40 GB/s |
DeepEP를 사용하려면 호퍼 GPU, Python 3.8+, CUDA 12.3+, PyTorch 2.1+, 노드 내 통신을 위한 NVLink와 노드 간 통신을 위한 RDMA 네트워크가 필요합니다. 이 라이브러리는 설치 전에 구성해야 하는 NVSHMEM의 수정된 버전에 따라 달라집니다.
개발
# SO 파일에 대한 심볼릭 링크 구축 및 만들기
NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py 빌드
# 플랫폼에 따라 특정 SO 이름을 수정할 수 있습니다.
ln -s build/lib.linux-x86_64-cpython-38/deep_ep_cpp.cpython-38-x86_64-linux-gnu.so
# 테스트 케이스 실행
# 참고: `tests/utils.py`에서 `init_dist` 함수를 수정할 수 있습니다.
#로 설정하고 여러 노드에서 실행합니다.
파이썬 테스트/테스트_인트라노드.py
파이썬 테스트/테스트_인터노드.py
파이썬 테스트/테스트_저지연.py
설치
NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py 설치
더 많은 DeepEP: https://github.com/deepseek-ai/Deepep