단일 GH200 칩을 사용하여 21B MoE를 사전 학습하는 과정에서 MFU를 21%에서 50%로 높인 기록 (코드 및 로그 포함)
요약
본 글은 예산 제약으로 인해 H100 대신 단일 GH200 칩을 사용하여 21B MoE 모델을 사전 학습한 경험과 그 과정에서 측정된 성능 지표를 공유합니다. 특히 MFU(Model Flops Utilization)가 21%에서 최대 50%까지 향상된 구체적인 수치와 기술적 문제 해결 과정을 상세히 다루고 있습니다.
핵심 포인트
- 단일 GH200으로 대규모 MoE 모델 사전 학습 가능성을 입증함.
- MFU를 높이기 위해 다양한 최적화 기법과 지표 측정을 수행함.
- GPU-CPU 간 데이터 오프로드 및 병렬 처리 과정에서 발생한 문제점들을 분석함.
저는 독립 연구원입니다. 예산 제약으로 인해 원래 64개의 H100으로 실행할 계획이었던 21B MoE 사전 학습을 단일 NVIDIA GH200($2.29/시간)으로 전환했으며, 이 과정에서 측정했던 지표들을 논문으로 정리했습니다. https://preview.redd.it/77womlml91vh1.png?width=655&format=png&auto=webp&s=5478597dcc07a74c07877ab792e996e13a6d49c5 LLM을 제한된 예산으로 시작하는 분들에게 도움이 되기를 바랍니다. 기존 기술들을 결합하면서 각 단계에서 기록한 지표들은 다음과 같습니다.
설정 모델: 총 파라미터 20.99B, 활성 파라미터 3.36B (30개 레이어, 64개 중 4개 전문가 선택)
훈련 데이터: 238.5 GiB의 FP32 훈련 데이터는 전적으로 CPU 메모리에 저장되었으며, GPU의 옵티마이저 커널이 NVLink-C2C를 통해 직접 업데이트했습니다.
GPU 전력 제한: 클라우드 제공업체에 의해 700W로 제한되었습니다.
결과 지표:
- 벤치마크 MFU: 21.1% → 50.7% (측정 지점 13개, 그 중 하나는 모델 변경 포함)
- 실제 데이터 훈련 MFU: 36.5% → 48.9–49.1% (10.9B 토큰; 4B 토큰부터 DiLoCo를 통해 연결된 두 개의 GH200 사용 시)
- 동기화 시간을 포함하여 추정하면 47.6–47.8%입니다.
있었던 문제점:
- Transformer Engine FP8, row-wise FP8: GEMM은 빨라졌으나 양자화 커널이 더 느려지는 현상이 발생했습니다.
- 모든 활성화 값을 CPU로 오프로드하는 방법; GPU와 CPU 간의 누적 분할(cumulative partitioning)을 사용했습니다.
- CPU 추가 문제: 동일한 설정에도 불구하고 실행마다 속도가 22%에서 32% 사이로 변동되는 문제가 있었습니다 (C++ OpenMP 커널을 사용하여 해결).
제한 사항:
- 단 하나의 모델과 한 종류의 하드웨어만 테스트되었습니다.
- 단계별 지표는 코드 버전과 측정 방법이 혼합되어 있어 깨끗한 제거(ablation) 테스트가 아닙니다.
- FP8이 품질에 미치는 영향을 검증할 수 없었습니다.
- Stage 1의 처음 약 11B 토큰만 다루었습니다.
코드, 벤치마크 기록 및 훈련 로그: https://github.com/DW-dev-UE/LLM-from-scratch/tree/main/apex3
논문: https://zenodo.org/records/23316135
측정 방법에 오류가 있다고 생각되는 부분이 있다면 알려주세요.
수치 분석입니다. 현재 21B로 사전 학습하는 동안 추가적인 창발적 능력(emergent capabilities)을 관찰하고 있습니다. 또한, 기회가 된다면 ArXiv에도 제출하고 싶습니다 🫠 submitted by /u/Prestigious-Taste-63 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기