Apex-2를 만들면서 배운 점들
Lessons learned while building Apex-2
핵심 요약
Apex-2 모델 개발 과정에서 겪은 GPU 병목 현상, 데이터 중복 제거, 비용 효율적인 학습 전략에 대한 회고입니다.
- GPU 병목 현상 — H100 단일 인스턴스만으로는 대규모 토큰 학습에 한계가 있어 GH200 인스턴스 두 개를 활용함.
- DiLoCo 활용 — 두 개의 GH200 인스턴스를 사용해 모델을 병합하는 방식으로 학습 속도를 1.9배 높이고 비용을 절감함.
- 데이터 중복 제거 — FineWeb-Edu와 DCLM 데이터셋의 중복을 제거하여 제한된 컴퓨팅 자원을 효율적으로 사용함.
- MoE 아키텍처 — Mixtral 논문을 참고하여 약 2,000달러의 비용으로 모델을 성공적으로 학습함.
다들 안녕, 내 모델에 이렇게까지 관심 가져줘서 진짜 고맙다. 예상보다 훨씬 뜨겁네.
Apex-2 만들면서 겪었던 시행착오들 짧게 정리해 봤어.
1. GPU는 언제나 병목 구간
원래 1T 토큰 정도로 학습시키려고 했는데, 결국 80B 정도밖에 못 돌렸어. FineWeb-Edu만 해도 1.3T 토큰인데, 내가 규모를 너무 만만하게 봤지. H100 한 장으로는 택도 없더라. 이번 프로젝트 하면서 왜 다들 GPU랑 VRAM에 그렇게 돈을 쏟아붓는지 뼈저리게 느꼈다.
2. DiLoCo
같은 리전 내에서 인스턴스 두 개 따로 돌리는 게 나한테는 더 잘 맞았어. 2x H100 인스턴스 쓰는 대신, GH200 인스턴스 두 개를 써서 정해진 스텝마다 모델을 합치는 방식을 썼지.
GPU당 MFU는 40% 정도 나왔어. 2x H100 인스턴스가 GPU당 비용이 더 비싸거든(시간당 약 $4.19, GH200은 $2.29). GH200 인스턴스 두 개로 각각 40% MFU 뽑아내고 350스텝마다 합치니까, GPU 한 장 쓸 때보다 비용은 더 적게 들면서 학습 속도는 1.9배 정도 빨라지더라. (인스턴스 간 데이터센터 네트워크가 한몫한 듯. 합치는 데 보통 1분도 안 걸렸어.)
3. FineWeb-Edu랑 DCLM 중복 제거
전체 코퍼스를 한 번에 중복 제거(MinHash, 유사 중복 포함) 돌려보니까, FineWeb-Edu 샘플은 57%, DCLM은 34%가 중복이더라고. FineWeb-Edu는 각 Common Crawl 스냅샷 안에서만 중복 제거가 되어 있어서, 나중에 다시 크롤링된 페이지들은 그대로 남아있거든. 예산이 넉넉하면 상관없겠지만, 나는 적은 컴퓨팅 자원으로 최대한 뽑아내야 해서 싹 다 날려버렸어. (참고로 FineWeb 저자들은 스냅샷 간 중복 제거가 성능 향상에 별 도움 안 된다고 했으니까, 이건 공짜 점심이 아니라 트레이드오프라고 보면 돼.)
MoE 아키텍처는 Mixtral 논문(https://arxiv.org/abs/2401.04088)을 참고했어. 프로젝트 전체 비용은 2,000달러 정도 들었다.
LLM에 대한 내 생각들도 여기 적어놨으니까 관심 있으면 봐봐: https://github.com/DW-dev-UE/LLM-from-scratch/blob/main/ThinkingLab/ThinkingLab.en.md
레딧에 공유할 생각은 없었어서 자잘한 실수들은 기억이 잘 안 나네 😭 지금은 21B 파라미터 MoE 모델 만드는 중인데, 이번엔 하면서 배우는 거랑 실수하는 거 틈틈이 공유해 볼게.
관심 가져줘서 다시 한번 고맙다! 기회 되면 연구소 들어가서 모두를 위한 LLM 만드는 데 일조하고 싶네.


