• DeepSeek V3/R1에서 사용했던 전략 및 코드들
    • DualPipe : 계산-통신 오버랩을 위한 양방향 파이프라인 병렬화 알고리듬
    • EPLB: Expert-Parallel 로드밸런서
    • Profile-Data: DeepSeek 인프라의 데이터 프로파일링으로 계산-통신 오버랩을 분석

DualPipe

  • DualPipe는 DeepSeek-V3 Technical Report에서 소개된 혁신적인 양방향 파이프라인 병렬 알고리듬
  • 순방향 및 역방향 계산-통신 단계를 완전히 오버랩하여 파이프라인 버블을 줄이는 역할을 함
  • 보다 자세한 계산-통신 오버랩 정보는 profile data에서 확인 가능

Expert Parallelism Load Balancer (EPLB)

  • Expert Parallelism(EP)에서는 서로 다른 전문가(experts)를 각 GPU에 할당함
  • 그러나 전문가별 작업량이 다를 수 있기 때문에, GPU 간 부하를 균형 있게 조절하는 것이 중요
  • DeepSeek-V3에서는 중복 전문가(redundant experts) 전략을 사용하여 부하가 높은 전문가를 복제한 후, 이를 GPU에 효율적으로 배치하여 부하 균형을 맞춤
  • 또한, 그룹 제한 전문가 라우팅(group-limited expert routing) 을 활용하여 같은 그룹의 전문가를 최대한 동일한 노드에 배치함으로써, 노드 간 데이터 전송을 최소화
  • 이를 재현 및 배포하기 쉽게 하기 위해, eplb.py에서 EP 부하 균형 알고리듬을 오픈소스로 제공함
    • 이 알고리듬은 예상된 전문가 부하를 기반으로 균형 잡힌 전문가 복제 및 배치 계획을 계산
    • 다만, 전문가 부하를 예측하는 구체적인 방법은 해당 저장소 범위를 벗어나며, 일반적으로 과거 통계를 이용한 이동 평균 방식이 많이 사용됨
  • 부하 균형 알고리즘은 두 가지 정책을 제공하며, 각각 다른 상황에서 사용됨.
    • 계층적 부하 균형 (Hierarchical Load Balancing)
      • 서버 노드 수가 전문가 그룹 수를 나눌 수 있는 경우, 계층적 부하 균형 정책을 사용하여 그룹 제한 전문가 라우팅을 최적화함
      • 먼저, 전문가 그룹을 균등하게 노드에 배치하여 노드 간 부하를 균형 있게 조정함
      • 이후, 각 노드 내에서 전문가를 복제함
      • 마지막으로, 복제된 전문가를 개별 GPU에 배치하여 GPU 간 부하 균형을 맞춤
      • 이 정책은 전문가 병렬 규모가 작은 프리필링(prefilling) 단계에서 사용 가능함
    • 전역 부하 균형 (Global Load Balancing)
      • 그 외의 경우에는, 전역 부하 균형 정책을 사용하여 전문가 그룹에 상관없이 전역적으로 전문가를 복제하고, 이를 개별 GPU에 배치함
      • 이 정책은 전문가 병렬 규모가 큰 디코딩(decoding) 단계에서 적합함.

DeepSeek Infra의 Profiling Data

  • DeepSeek의 학습 및 추론 프레임워크에서 프로파일링 데이터를 공개하여, 커뮤니티가 통신-계산 오버랩 전략과 저수준 구현 세부 사항을 더 잘 이해할 수 있도록 지원함
  • 이 프로파일링 데이터는 PyTorch Profiler를 사용하여 수집되었으며, 다운로드 후 Chrome에서는 chrome://tracing, Edge에서는 edge://tracing을 통해 시각화 가능
  • 또한, 실험에서는 균형 잡힌 MoE 라우팅 전략을 시뮬레이션하여 프로파일링을 진행
  • 학습 (Training)
    • 학습 프로파일 데이터는 DualPipe에서 순방향 및 역방향 청크의 오버랩 전략을 보여줌
    • 각 청크는 4개의 MoE (Mixture of Experts) 레이어를 포함하며, DeepSeek-V3의 사전 학습 설정과 일치하는 병렬 구성을 가짐:
  • 추론 (Inference)
    • 프리필링(Prefilling)
      • 이 단계에서는 두 개의 마이크로 배치를 활용하여 계산과 all-to-all 통신을 오버랩함
      • 또한, 주의(attention) 연산 부하를 두 마이크로 배치 간에 균형 있게 분배하여 동일한 프롬프트가 여러 마이크로 배치로 나뉠 수 있도록 함
    • 디코딩 (Decoding)
      • 디코딩에서도 프리필링과 마찬가지로 두 개의 마이크로 배치를 사용하여 계산과 all-to-all 통신을 오버랩
      • 그러나, 디코딩에서는 all-to-all 통신이 GPU SM을 차지하지 않음RDMA 메시지를 전송한 후 GPU SM을 해방하며, 계산이 끝난 후 통신 완료를 대기하는 방식으로 동작함
      • 더 자세한 all-to-all 구현 정보는 DeepEP에서 확인 가능

DeepSeek Open Infra 로 공개되는 5개 오픈소스 중 4번째 임