3.8B LLM을 $998로 학습해 CORE 0.384 달성하기
Training a 3.8B LLM to 0.384 CORE for $998
TL;DR Highlight
B200 8장으로 43시간, $998를 들여 3.8B 모델이 CORE 0.384를 기록했다
Who Should Read
직접 소형 LLM을 학습해 보려는데 옵티마이저·정밀도·컨텍스트 설정에 비용을 얼마나 쓸지 고민하는 개발자
Core Mechanics
- $998로 3.8B를 학습했다
- 8× B200에서 65.3B 토큰을 43시간 학습해 CORE 0.384를 기록했다.
- 비교표에서 nanochat d32는 약 $1000, 약 33시간에 CORE 0.310이다.
- 초기 858M 실험은 실패했다
- A100 한 장에서 약 5.8일 학습했지만 PIQA 60.45%로, GPT-2 124M의 약 63%보다 낮았다.
- 원인으로 cosine decay가 너무 공격적이고 학습률이 보수적이며 AdamW만 쓴 점을 꼽았다.
- 다섯 가지 변경으로 크게 좋아졌다
- 사다리꼴 LR 스케줄, 행렬 파라미터에 Muon, ClimbMix 데이터, FP8, 1024 컨텍스트를 적용했다.
- Muon은 스텝당 약 25% 느리지만 gradient accumulation 7스텝에서는 약 4%로 희석된다.
- 처리량 튜닝이 비용을 줄였다
- FP8과 vocab padding으로 처리량이 +33% 올랐다.
- bf16 옵티마이저 마스터 가중치는 VRAM을 27% 줄이고 1.5B 설정에서 640K에서 1.4M tok/s로 올렸다. CORE는 4,000스텝에서 0.22 대 0.23으로 약간 낮았다.
- Value embeddings는 가성비가 좋았다
- 파라미터는 19% 늘었고 12.5K 스텝 기준 loss는 0.46%, CORE는 3.2% 좋아졌다.
Community Reactions
- CORE 점수를 믿을 수 있냐는 맥락의 반응
- 같은 구조로 약 1B 파라미터에 gated delta net, n-gram 임베딩, gated residual 같은 최신 소형 모델 기법을 넣어 다시 해 보고 싶다는 의견이 있었다.
- 재현성에 대한 지적
- 모델 코드나 학습 데이터 링크를 찾지 못했다는 댓글이 있었다.
- 소형 모델을 제품에 넣는 활용 아이디어
- Claude로 엣지 케이스를 처리하고 샘플 데이터를 만들어 작은 LLM을 필요할 때 학습시키면 Claude 호출이 줄 것이라는 의견이 있었다.
- 후속 실험 요청
- Qwen 약 30B 모델에서 distill하면 비용이 얼마인지 궁금하다는 댓글이 있었다.
How to Apply
- 평가 프롬프트가 컨텍스트에 잘리는지 점검하기
- 오늘 few-shot 평가 세트의 토큰 길이 분포를 재서 max_seq_len 초과 비율을 확인하라.
- 잘리는 비율이 높은 태스크는 점수 비교에서 따로 빼서 보라.
- 소형 모델 학습 전 사다리꼴 LR로 바꿔 보기
- 학습 설정에서 cosine을 warmup 5% 후 평탄 유지, 마지막 50% 구간에서 피크의 5%까지 선형 감소로 바꿔라.
- eval loss가 마지막 스텝까지 내려가는지 확인하라.
- 스트리밍 대신 샤드를 로컬에 받아 학습하기
- 수 시간 넘는 유료 GPU 학습 전에 데이터 샤드를 먼저 내려받아라.
- 원문에서는 로컬 샤드가 2~3% 더 빨랐고, 네트워크 중단 위험도 없앴다.
- 옵션은 YAML diff 한 줄 단위로 ablation하기
- 옵티마이저·데이터셋·value embeddings 같은 옵션을 설정 파일 값으로 분리하라.
- 이미 돈 낸 기준 런과 같은 스텝에서 loss와 CORE를 비교하라.
Try It
# Claude 또는 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: 학습 설정 점검)
나는 소형 decoder-only LLM을 직접 학습하려 한다. 아래 학습 설정을 검토해라.
{{학습 설정 YAML}}
다음 항목을 각각 확인하고 바꿀 값을 표로 제안해라.
1. LR 스케줄: cosine이면 warmup 5%, 평탄 유지, 마지막 50%에서 피크의 5%까지 선형 감소로 바꿀 때의 설정
2. 옵티마이저: 행렬 파라미터는 Muon, 나머지는 AdamW로 나눌 수 있는지
3. 정밀도: FP8 사용 가능 여부와 vocab을 64의 배수로 패딩할 필요
4. 평가: few-shot 프롬프트가 max_seq_len보다 긴 태스크가 있는지
5. 데이터: 스트리밍이면 로컬 샤드로 바꿀 때의 이점
이어서 해 볼 것: 바꾼 설정으로 같은 스텝에서 eval loss를 비교하는 ablation 계획을 YAML diff 3줄 이내로 작성해 달라고 요청해 보라.Terminology
관련 논문
AI 글쓰기 버릇을 학습으로 뺀 Qwen3-4B (qwen3-4b-deslop)
Qwen3-4B를 LoRA로 증류했더니 AI 문체 점수가 121에서 12.5로 떨어졌다
Dust: 역전파 없이 Transformer를 사전학습하는 방법
활성값에 토큰별 노이즈를 줬더니 역전파 없이 Transformer 사전학습이 됐다
TurboGPT: 22KiB 트랜스포머를 13초 만에 학습시키는 CUDA 프로젝트
CUDA C++로 바이트 단위 tiny GPT를 1분 안에 학습하는 오픈소스
Gemini가 만든 라벨 $9로 자기 대체 모델 GLiNER 학습시키기
Gemini 라벨 $9로 GLiNER를 튜닝해 로컬에서 F1 0.83 달성
절대 포기하지 않기(Never Give Up): LLM RL에서 어려운 문제를 풀게 만드는 방법
쉬운 문제에 쓰는 연산을 줄이고 어려운 문제를 재시도했더니 어려운 문제 성능이 올랐다
Paul Graham: "17살이면 LLM을 밑바닥부터 만들어 보겠다"
PG는 17살이면 창업 말고 LLM 밑바닥 구현부터 배우겠다고 했다
DeepSeek을 GPT-OSS에 증류해도 검열은 따라오지 않았다
DeepSeek V4 Flash로 금융 추론을 증류했더니 성능은 올랐고 검열은 안 따라왔다