998달러로 3.8B LLM 학습시켜 CORE 0.384 달성
한 개발자가 야간 작업으로 little-lm이라는 3.8B 파라미터 모델을 처음부터 직접 학습시켜, 렌털 B200 GPU 8대로 43시간, 998달러 비용만으로 CORE 벤치마크 0.384를 달성했다. 이는 비슷한 비용의 nanochat d32(0.310)를 크게 앞서는 결과로, 거액의 컴퓨팅 예산 없이도 개인이 유의미한 모델을 학습할 수 있음을 보여준다. 좋은 인프라와 YAML 기반 실험 관리, Muon 옵티마이저 등의 선택이 핵심이었다.
"nanoGPT 장난감"과 "연구소가 필요하다" 사이에는, 몇천 달러만 있으면 한 사람이 유의미한 모델을 학습시킬 수 있는 넓지만 잘 문서화되지 않은 영역이 존재합니다. 저는 무작위 가중치에서 언어와 이해가 발생하는 것을 직접 확인하고, 처음부터 만들어야만 배울 수 있는 부분들을 배우고 싶었습니다. 이 프로젝트는 저녁 시간에 작성되었고, 5090에서 디버깅한 뒤 렌털 B200에서 마무리되었습니다. Andrej Karpathy의 nanochat에서 큰 영감을 받았습니다. 그 결과는 3.8B 파라미터 모델이 65B 토큰으로 43시간 동안 998달러를 들여 학습되어 CORE 0.384를 기록한 것입니다. 이하에서는 무엇이 통했고, 무엇이 실패했으며, 무엇을 아직 모르는지를 다룹니다.
모델 | 파라미터 | 토큰 | 하드웨어 | 시간 | 비용 | CORE GPT-2 (OpenAI) | 1.5B | — | — | — | — | 0.2565 nanochat d26 | ~561M | 11.2B | 8× H100 | ~3h | — | ~0.258 nanochat d32 | ~1B | — | 8× H100 | ~33h | ~$1000 | 0.310 little-lm 3.8B (1024 ctx) | 3.848B | 57.3B | 8× B200 | 35.9h | $820 | 0.338 little-lm 3.8B (2048 ctx) | 3.848B | 65.3B | 8× B200 | 43h | $998 | 0.384
제 모델은 nanochat d32보다 크면서도 실제 소요 시간은 비슷했습니다. B200은 작업량당 H100보다 가성비가 좋았습니다. 그리고 nanochat의 1,000달러 구성과 거의 같은 비용으로 의미 있게 앞서는 성능을 달성했습니다. 수백만 달러 컴퓨팅 예산을 가진 연구소나 대기업 밖에서 도달 가능한 수준이 어디까지인지에 대해 고무적인 데이터 포인트입니다. 프론티어가 발전할수록 1,000달러로 갈 수 있는 거리는 점점 멀어지고 있습니다.
설정
저는 little-lm을 작은 디코더 전용(decoder-only) LLM을 학습시키기 위한 설정 기반(config-driven) 프레임워크로 만들었습니다. 모든 실행은 YAML 파일 하나로 완전히 정의됩니다: 모델, 데이터셋, 옵티마이저, 스케줄, 콜백. 컴포넌트들은 전역 레지스트리에 자동 등록되고 이름으로 해석되므로, 옵티마이저나 데이터셋 교체는 한 줄의 설정 변경으로 가능합니다.
좋은 인프라는 거의 즉시 투자 가치를 되갚아줍니다. 관심사 분리, 깔끔한 인터페이스, 교체 가능한 컴포넌트 같은 평범한 소프트웨어 엔지니어링 원칙이 AI 작업에서 매우 중요합니다. 처음에 약간의 비용이 들었고, 잘못된 계약이나 비최적 설계를 고치느라 몇 번 더 들었습니다. 하지만 이런 투자는 첫 번째 수렴 문제를 만났을 때 본전을 뽑게 됩니다. 훌륭한 인프라란 코드를 수동으로 수정할 일이 거의 없는 인프라라고 생각합니다. 설정만 읽으면 정확히 무슨 일이 벌어지는지 이해할 수 있고 숨겨진 메커니즘이 없다면, 좋은 작업을 한 것입니다. 이 보고서는 실험을 브랜치가 아니라 3줄짜리 YAML diff로 표현할 수 있었던 결과물입니다.
최종 모델은 Llama 스타일입니다: RMSNorm, RoPE, GQA(쿼리 헤드 24개, KV 헤드 8개), relu² MLP, QK-norm, logit softcap, 레이어별 학습 가능한 잔차 스칼라, 그리고 ResFormer 스타일의 값 임베딩(value embeddings)을 사용합니다.
컴포넌트 | 파라미터 토큰 임베딩 | 154.5M LM 헤드 (untied) | 154.5M 디코더 28 레이어 | 2,818.7M 값 임베딩 (14개 테이블) | 721.2M 합계 | 3.848B
값 임베딩이 전체 파라미터의 19%를 차지한다는 점이 주목할 만합니다. vocab × kv_dim 크기의 테이블 14개가 한 레이어 걸러 하나씩 배치되어 있습니다.
결과
초기 실험
좋은 실행 이전에 수많은 나쁜 실행이 있었습니다. 858M 규모의 Llama를 FineWeb-Edu로 16.4B 토큰 학습시켰고, A100 한 대에서 5.8일이 걸렸습니다. AdamW 학습률 2.5e-4, 0까지 코사인 감쇠, 5% 워밍업, 그래디언트 누적으로 배치 256, 컨텍스트 2048. 결과는 PIQA 60.45%. GPT-2 124M은 약 63%를 기록합니다. 저는 6일치 컴퓨팅을 들여 2019년의, 7배 작은 모델보다 못한 것을 만든 셈입니다. 생성 결과는 반복적이고 거의 말이 되지 않는 수준이었습니다.
손실 곡선이 문제를 말해주고 있었습니다.
- 0까지의 코사인 감쇠. 곡선이 스텝의 약 70% 이후 완전히 평평해졌습니다. 학습률이 너무 낮아서 컴퓨팅 예산의 마지막 30%가 사실상 아무것도 생산하지 못했습니다. 선형 쿨다운(linear cooldown)은 훨씬 후까지 유용한 학습률을 유지합니다.
- 피크 학습률이 너무 보수적. 2.5e-4는 858M 파라미터에는 낮은 값입니다. 이런 소규모 모델에서는 꽤 공격적으로 잡을 수 있습니다.
- 모든 파라미터에 AdamW. 이 규모에서는 행렬 파라미터에 Muon이 토큰당 의미 있게 더 나을 것입니다. 실제로 어블레이션 실행에서 빠르게 입증되었습니다.
- 데이터. FineWeb-Edu는 괜찮지만, 사용 가능한 최고는 아닙니다.
이 경험에서 다섯 가지 개선점이 나왔습니다.