MegaTrain: 단일 GPU로 100B+ 파라미터 LLM을 Full Precision으로 학습하기
MegaTrain: Full Precision Training of 100B+ Parameter LLMs on a Single GPU
TL;DR Highlight
MegaTrain은 CPU 메모리를 주 저장소로, GPU를 연산 엔진으로만 활용함으로써 H200 GPU 단 한 장으로 120B 파라미터 모델을 풀 정밀도로 학습할 수 있다.
Who Should Read
GPU VRAM 부족으로 대형 모델 학습에 어려움을 겪고 있는 ML 엔지니어나 연구자, 특히 단일 GPU 환경에서 파인튜닝이나 실험을 돌려야 하는 개발자.
Core Mechanics
- MegaTrain은 '메모리 중심(memory-centric)' 설계를 채택해서, 모델 파라미터와 옵티마이저 상태를 GPU VRAM이 아닌 CPU 호스트 메모리에 저장한다. GPU는 연산이 필요한 순간에만 데이터를 받아서 처리하는 '일시적 연산 엔진' 역할을 한다.
- 각 레이어를 처리할 때마다 파라미터를 CPU에서 GPU로 스트리밍해서 넣고, 계산된 그래디언트는 다시 CPU로 내보내는 방식을 쓴다. 이렇게 하면 GPU에 상주하는 데이터가 최소화되어 VRAM 사용량을 극적으로 줄일 수 있다.
- CPU-GPU 간 대역폭 병목을 해결하기 위해 '파이프라인 더블 버퍼링(pipelined double-buffered) 실행 엔진'을 도입했다. 여러 CUDA 스트림을 사용해서 파라미터 프리페칭, 실제 연산, 그래디언트 오프로딩을 동시에 겹쳐서 실행하므로 GPU가 쉬지 않고 계속 돌아갈 수 있다.
- 기존의 autograd 그래프를 유지하는 대신 '무상태 레이어 템플릿(stateless layer templates)'을 도입해서, 파라미터가 스트리밍되어 들어올 때 동적으로 바인딩하는 방식을 쓴다. 이렇게 하면 그래프 메타데이터를 GPU에 계속 올려둘 필요가 없어지고 스케줄링 유연성도 높아진다.
- H200 GPU 1장과 1.5TB CPU 메모리 조합으로 최대 120B 파라미터 모델 학습을 안정적으로 검증했다. 또한 14B 모델 기준으로 DeepSpeed ZeRO-3 + CPU 오프로딩 대비 1.84배 높은 학습 처리량(throughput)을 달성했다.
- GH200(GPU-CPU 통합 아키텍처) 단일 기기에서 7B 모델을 512k 토큰 컨텍스트로 학습시킬 수 있다는 것도 확인했다. 이는 초장문 컨텍스트 학습을 단일 노드에서 가능하게 한다는 점에서 의미가 있다.
Evidence
- RTX 3080(VRAM 10GB)을 가진 한 사용자는 40M~50M 파라미터 이상 모델 학습 시 OOM이 나서 고생하고 있었는데, 이 방식을 쓰면 CPU RAM이 많은 자신의 PC에서 훨씬 큰 모델을 로컬로 학습할 수 있겠다며 긍정적으로 반응했다.
- 한 댓글러는 이 아이디어 자체는 새롭지 않다고 지적하면서, 실제 속도 측면에서 한계가 있다고 비판했다. 논문에서 14B 모델을 단일 3090으로 341 tok/s 달성했다고 했는데, 자신은 비슷한 방식으로 4090에서 약 1,000 tok/s를 냈다고 주장하면서, 그래도 실용적 pretraining에 쓰기엔 너무 느리다는 점을 강조했다.
- 같은 댓글러는 논문에서 쓰지 않은 추가 최적화 기법들도 있다고 언급했다. 예를 들어 그래디언트를 별도로 오프로딩하지 않고 옵티마이저 상태에 바로 누적하는 방법, Adam 대신 VRAM을 절반만 쓰는 Muon 옵티마이저 사용, 파라미터와 옵티마이저 상태 모두 4-bit 양자화 적용 등이다.
- H200 + 1.5TB 호스트 메모리라는 조건에 대해 '단일 GPU라고는 하지만 결코 가벼운 세팅이 아니다'라는 냉소적인 반응도 있었다. 일반 개발자가 쉽게 접근할 수 있는 환경이 아니라는 점을 지적한 것이다.
- PyTorch의 FSDP(Fully Sharded Data Parallel) 기능과 유사해 보인다는 의견도 있었다. 구체적으로 `torch.distributed.fsdp` 프리미티브만으로 이 방식을 어느 정도 재현할 수 있을지 궁금하다는 질문이 제기됐고, Apple M 시리즈처럼 GPU-CPU 메모리가 통합된 아키텍처에서는 이 기법이 얼마나 효과적일지에 대한 의문도 나왔다.
- 이 기법은 실용적으로는 소규모 파인튜닝 작업에나 쓸 법하고, 대규모 pretraining에 쓰기엔 속도가 너무 느리다는 의견이 있었다. DeepSpeed와 유사하다는 반응도 있었다.
How to Apply
- VRAM이 부족한 단일 GPU(예: RTX 3090, RTX 4090) 환경에서 14B~30B 규모 모델을 파인튜닝해야 하는 경우, DeepSpeed ZeRO-3 + CPU 오프로딩보다 MegaTrain 방식을 적용하면 동일 하드웨어에서 최대 1.84배 빠른 학습 처리량을 기대할 수 있다.
- H200 같은 고사양 단일 GPU와 1TB 이상의 CPU 메모리가 있는 서버 환경에서 100B 이상 모델을 멀티 GPU 없이 실험해보고 싶다면, MegaTrain의 레이어 단위 스트리밍 방식이 다중 노드 세팅 없이도 120B 모델 학습을 가능하게 해준다.
- 초장문 컨텍스트(512k 토큰 이상)가 필요한 7B 모델 학습을 단일 장비에서 돌려야 하는 경우, GH200처럼 GPU-CPU 메모리가 고속으로 연결된 아키텍처와 MegaTrain을 조합하면 멀티 GPU 없이도 이를 처리할 수 있다.
- 직접 구현하기 어렵다면, PyTorch의 `torch.distributed.fsdp` (Fully Sharded Data Parallel) 기능이 유사한 CPU 오프로딩을 지원하므로 이를 먼저 검토한 뒤 성능이 부족할 때 MegaTrain 논문의 더블 버퍼링 기법을 추가로 적용하는 단계적 접근을 고려할 수 있다.
Terminology
관련 논문
레이어 하나면 충분한가? 단일 Transformer 레이어 학습이 전체 파라미터 RL 학습과 동등한 성능
LLM의 RL 후처리 학습(post-training)에서 성능 향상의 대부분이 중간 레이어 소수에 집중되며, 단 하나의 레이어만 학습해도 전체 파라미터 학습과 비슷하거나 더 나은 결과를 낼 수 있다는 연구 결과. 이는 RL 학습 비용을 대폭 줄일 수 있는 가능성을 시사한다.
Black-Box LLM에서 지식 증류하기: Proxy-KD 기법 (2024)
GPT-4 같은 내부 구조에 접근할 수 없는 독점 LLM에서 작은 모델로 지식을 효과적으로 전달하는 Proxy-KD 기법을 소개하는 논문으로, 전통적인 White-Box 방식보다 성능이 높다는 점에서 주목할 만하다.
NanoEuler – 순수 C/CUDA로 처음부터 만든 GPT-2 규모 언어 모델
PyTorch나 autograd 없이 C와 CUDA만으로 GPT-2 수준의 LLM을 처음부터 구현한 교육용 프로젝트로, 역전파·BPE 토크나이저·FlashAttention까지 직접 손으로 작성했다.
Neural Particle Automata: 자기조직화 파티클 시스템을 학습하는 신경망 모델
고정된 격자 대신 움직이는 파티클 위에서 동작하는 Neural Cellular Automata의 확장 버전으로, 형태 생성·포인트 클라우드 분류·텍스처 합성 등 다양한 작업에서 자기조직화 동작을 학습할 수 있다.
PyTorch Training Loop 완전 해부: 각 줄이 하는 일과 순서를 바꾸면 생기는 문제
PyTorch 학습 루프의 각 코드 줄이 왜 그 위치에 있어야 하는지, 순서를 바꾸거나 빠뜨렸을 때 어떤 문제가 생기는지를 단계별로 설명한 심층 가이드다.
좋은 Verifier도 망가질 수 있다: Self-Improving VLM이 새로운 태스크에서 오히려 퇴보하는 현상
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.