The Smol Training Playbook:The Secrets to Building World-Class LLMs
Hugginface의 실용적인 아티클
May 30, 2026
What does it actually take to train a high-performance LLM today?
Huggingface에서 새롭게 LLM을 from scratch 학습하면서 배우고 고려했던 모든걸 적은 아티클을 배포했다.
애초에 HF에서 이 아티클을 작성한 목적이 논문에서 이야기하지않는 모든 실용적인 고민과 막막함을 공유하는 것이라고 했는데 이 규모의 Lab들도 이 고민을 하는구나.라는걸 알 수 있어서 실용적으로 매우 도움이 됨.
실험이 성공-실패했다 를 떠나서 뭐가 어려웠고, 어떤 고민을 했고 등이 자세히 적혀있음.
아주 길기 때문에 다 읽을 필요 없다.
- Training compass
- Pretraining
- Post-training
- Infrastructure
Before training
- 꼭 pre-training을 학습해야하는가?라는 질문을 계속 반복해서 던져라. 많은 경우에 prompting, engineering, fine-tuning, post-training으로 충분하다. (VC money 얼마나 있는데? 라고 함)

- 가능하면 우선 FT/post-training을 해보고, 그래도 불만족스럽다면 새롭게 학습해라.
- 아주 현실적으로 이야기 해주는데, 아래 경우에는 모델 학습.. 해볼만할지도?라고 말한다
- 완전히 새로운 Research를 시도하고 싶을 때
- 데이터를 1/00로 줄여서 학습할 수 있을 것 같다.
- SFT없이 RL만으로 학습이 될 것 같다
- 제품에 당장 필요한 경우
- 특정 도메인에 대한 강한 지식
- 원하는 모델이 있는데, 이걸 최대한 줄이고자할때(distillation에 가까움)
- 전략적 오픈소스 : 너무 명확히 Gap이 보이면, 그걸 빠르게 채우고 배포하면 스타트업에게 이득이 된다
선택 예시
On-device 모델을 만들고 싶다
그러면:
- model size가 작아야 함
- memory footprint가 작아야 함
- KV cache도 작아야 함
- MoE는 불리할 수 있음, 전체 expert를 memory에 올려야 하기 때문
- dense small model을 오래 학습하는 전략이 유리할 수 있음
→ HF도 이 방법 사용
Multilingual 모델을 만들고 싶다
그러면:
- tokenizer vocab이 커야 할 수 있음
- target languages별 fertility를 봐야 함
- data mixture에서 multilingual 비율을 정해야 함
- English 성능과 non-English 성능 사이 trade-off를 봐야 함
Long context 모델을 만들고 싶다
그러면:
- positional encoding을 고민해야 함
- RoPE theta 조정, YaRN, NoPE/RNoPE 같은 선택지가 있음
- document masking이 중요해짐
- long context data와 eval이 필요함
- 처음부터 128k로 학습하는 것은 너무 비쌈
Reasoning model을 만들고 싶다
그러면:
- pretraining data에 math/code/reasoning data가 필요함
- post-training에서 SFT만으로 부족할 수 있음
- reasoning mid-training이 강력할 수 있음
- preference optimization이나 RLVR을 고려해야 함
/think,/no_think같은 mode control을 어떻게 학습시킬지 정해야 함
즉, architecture는 요즘 유행하는 걸 고르는 것이 아니라
사용 환경과 목표 능력에서 역산해야 하는 것이다.
자신들이 본 성공 공식
- LLM 학습은 수많은 감이 필요하다.
- 작은 ablation을 빠르게 많이 돌리고, 그 결과를 바탕으로 큰 run을 derisking하는 팀이 강하다.
architecture보다 data quality가 진짜 중요하다.
데이터 퀄리티는 좋은 데이터 모으기! 보다도 Mixture가 중요 : web-text, code, math, multilingual 비율, 고품질 데이터는 언제 쯜지 등
Every big model starts with a small ablation
- 모든 큰 모델은 작은 ablation으로 시작해야한다. 우선 baseline을 선택해라.
baseline에서 변경할 수 있는 요소는 너무 많고(attention machanism, positional encoding, activation, optimizer, etc), 전부 그리드 서치할 수 없으며 비선형적으로 상호작용한다.
그러므로 baseline을 잡고, 가장 기대되는 변경사항부터 적용해라.(Qwen, Llama, Kimi K2 전부 다른 모델을 잡고 시작함)
실험을 돌리는 방법에 대해 아는 것 만으로 부족하다. 어떤 실험이 돌릴 가치가 있는지 판단할 줄 아는 능력이 중요하다.
- ablation에는 두가지 방법이 있다.
- 모델은 그대로 두고 더 적은 데이터로 학습
- 작은 모델로 실험한 뒤 큰 모델에 적용
- 작은 scale에서 좋다고 큰 scale에서도 좋은건 아니지만, 작은 곳에서 안좋으면 큰 곳에서도 안좋다.
- Evaluation이 매우 중요하다.
- Monotonicity: 학습이 진행될수록 점수가 대체로 올라야 함
- Low noise: seed나 sampling에 따라 너무 출렁이면 안 됨
- Above-random signal: early stage에서도 어느 정도 신호가 있어야 함
- Ranking consistency: 초반에 A가 B보다 좋으면, 뒤에서도 대체로 그 순서가 유지되어야 함
Loss도 중요하지만, Loss는 spike, divergence, converge 속도 등을 파악하는데 중요하지 절대적인 수치로써 크게 작용하진 않는다. (특히 특정 능력을 파악하고 싶을 때)
모델 아키텍처
- dense, MoE, Hybrid 선택기준 : 생략
Attention : GQA써라업계 표준이 MHA에서 GQA로 변함

- MHA: 가장 무겁고 성능 좋음 : heads num이 32개
- MQA: 가장 가벼움, capacity 많이 잃음 : heads num이 1개
- GQA: 중간 지점 → 현재 대부분의 모델이 채택(적당한 사이즈의 경우) : heads num이 g개
- MLA: 가장 최신, 가장 효율적 (DeepSeek v2/v3)
Positional Encoding- long context의 경우 RoPE 만 키우면 끝이 아니라 NoPE/RNoPE 등도 고려해라
- 대부분의 pretraining은 짧은 context로 학습하고, 다음에 context를 늘려도 된다.
처음부터 전체 context로 학습시 비용이 많이 들고 안정성도 떨더짐
- Pre-training에서는 FFN이 compute의 대부분을 차지하지만, inference에서는 attention이 병목이 된다.
시퀀스가 길어질수록 KV-cache가 GPU를 매우 많이 잡아먹는다.
Data mixture- 좋은 데이터는 양이 적다. → 후반부에 넣어라
Stage 1: Base training
- 8T tokens
- 4k context
- web 중심
- code/math는 적절히 포함
- multilingual도 일정 비율 포함
Stage 2: High-quality injection
- 2T tokens
- 더 좋은 code/math data 추가
- Stack-Edu, FineMath4+, MegaMath 등
Stage 3: LR decay with reasoning/Q&A
- 1.1T tokens
- instruction/reasoning style data 추가
- OpenMathReasoning, OpenCodeReasoning, OpenMathInstruct 등
- 고품질 data upsample
Optimizer- Muon, AdeMAMix 등 최신 Optimizer를 잘 튜닝하니까 loss가 AdamW보다 낮긴했다.
- 하지만 더 오래, 더 크게 돌릴 때 발산하는 경우가 잦아졌음. 물론 정확히 Optimizer의 문제는 아니었을 수 있지만, 안정적인 AdamW를 쓰지 않을 이유가 없었다.
- 결론은 아주 기본적인 세팅의 AdamW 사용(b1 0.9, b2-.95, wd 0.1, lr 2e-4 → 학습이 진행될수록 줄임)
Learning rate큰 학습의 경우 2000 step과 같이 고정된 warm-up, 아니면 1-5%의 warm-up 이후 cosine decay를 쓰는게 가장 적절하다고 인식되어 있다.
단점은 전체 학습 step 수를 사전에 알아야한다.
그래서 최근, DeepSeek 계열 모델은 학습동안 거의 일정하게 lr을 유지하다가 마지막에만 줄이는 방식을 썼다.(WSD, Multi-step)
이렇게되면 학습 중간에 임의로 더 오래 학습해도 된다.(감소하기 시작하기 전이기만하면)

감소는 마지막 10-20% 정도에 한다고 하고 multi-step은 last 33%부터 시작하기도함.
줄이기시작한 순간부터 내려가더니 따라잡는 모습

모든 lr을 직접 테스트하는건 불가능하다. 테스트 하더라도 스케일이 바뀌면 또 다시 해야한다.
그래서 적당한 범위의 4가지 정도만 테스트해본 뒤, 한가지 값을 고르고 다른 요소들이 바뀌면(batch size, training tokens, etc) 스케일링 법칙을 적용해서 수정해야한다.
Batch size - 배치 크기는 어느 정도까지는 throughput을 증가시키지만 정도를 넘어서면 같은 loss에 도달하기까지 필요한 sample 수를 증가시킨다. = critical batch size.
그래도 만약 정말 효율적이라면 걸리는 시간 자체는 줄어들 수 있다. 하지만 가능한 넘기지 않는게 좋다.
- 배치 크기가 커지면, 각 미니배치에서 계산되는 그라디언트가
“진짜 그라디언트”에 더 가까운 추정치가 된다.
즉, 더 정확한 추정이므로 더 큰 스텝(러닝레이트)을 써도 안전 하고,
같은 목표 손실에 더 적은 업데이트(step)로 도달할 수 있다.
- AdamW를 쓸 때는 배치가 k배 커지면 lr도 sqrt(k)배 키우는게 좋다.
Monitoringloss만 모니터링하는게 아니라 다른 것들도 봐야한다. 학습이 비효율적으로 되고 있을 수도 있고
Training metrics
- loss
- grad norm
- learning rate
- loss spike
- NaN/Inf
- token throughput
Evaluation metrics
- downstream benchmark
- target capability별 score
- previous model checkpoint와 비교
- intermediate checkpoint trajectory
Infrastructure metrics
- GPU utilization
- GPU memory usage
- temperature
- throttling
- network bandwidth
- disk read latency
- dataloader time
- checkpoint save time
About Post-training- Reinforcement learning from human feedback (RLHF): This approach, popularized by
OpenAI’s InstructGPT paper (Ouyang et al., 2022), was the basis for GPT-3.5 and many modern LLMs. Here, human annotators compare model outputs (e.g., “A is better than B”) and a reward model is trained to predict those preferences. The policy is then fine-tuned with RL to maximize the learned reward.
Because the reward model only approximates human preferences, it can sometimes encourage reward hacking, where the policy emits an out-of-distribution sequence like “the the the the” that is given a spurious high reward and is then baked into the model via the RL loop.
- Reinforcement learning with verifiable rewards (RLVR): This approach, popularized by
DeepSeek-R1, involves the use of verifiers that check whether a model’s output meets some clearly defined correctness criteria (e.g., does the code compile and pass all tests, or is the mathematical answer correct). The policy is then fine-tuned with RL to produce more verifiably correct outputs.
이외에 많은 실용적인 내용들…
- On-policy + distillation은 앞으로 매우 중요할 수 있다.
- 물론 PPO와 GRPO도 온폴리시긴함
- 네가 작은 모델을 만들고 싶다면 teacher 잡고 on-policy training해라
- 단점은 teacher가 필요하다 + student가 teacher와 같은 vocab을 공유해야 한다. → 우리들이 그것도 해결했다 라면서 아티클 새로 하나 나옴

GKD = off + on
- Pretraining → mid-training(domain knowledge) → SFT(format) → Post-training RL
- for SFT : LR 더 작게 하기, 패딩으로 낭비되지 않도록 짧은 샘플들을 하나의 샘플 시퀀스가 몰아넣기, User message에는 loss masking하기
- RLVR은 좋지만 리워드 해킹을 조심해야한다. 뭐 당연한 소리임
매우 긴 Infrastructure 섹션이 있지만 이번에는 못 읽음
- Infra의 목표는 GPU를 많이 쓰는 게 아니라, training pipeline 전체에서 병목을 찾아 제거하는 것이다.
- GPU theoretical FLOPs는 이상적인 숫자라서, 실제 planning은 measured throughput과 MFU 기준으로 해야 한다.
- 현대 LLM 학습은 compute보다 memory movement가 병목인 경우가 많아서, memory hierarchy 이해가 중요하다.
- Roofline model은 현재 kernel이 compute-bound인지 memory-bound인지 구분해 최적화 방향을 정하게 해준다.
- CPU-GPU communication은 kernel launch와 data transfer의 숨은 병목이 될 수 있으며, 작은 kernel이 많으면 특히 중요하다.
- NUMA affinity가 틀리면 GPU는 멀쩡해도 CPU-GPU coordination과 NCCL 성능이 크게 떨어질 수 있다.
- 같은 node 안 GPU 통신은 NVLink/NVSwitch를 제대로 쓰는지가 핵심이며, NCCL transport 확인이 필수다.
- All-reduce는 비교적 잘 scale되지만, MoE에 중요한 all-to-all은 훨씬 더 민감하고 어려운 통신 패턴이다.
- Node를 넘어가는 순간 NVLink보다 훨씬 느린 network를 타기 때문에, internode communication을 고려해 parallelism을 짜야 한다.
- SmolLM3의 첫 큰 병목은 GPU가 아니라 storage였고, dataset placement와 cache eviction이 throughput을 무너뜨렸다.
- Dataloader는 small ablation에서는 멀쩡해도 full-scale step count와 dataset size에서 병목이 될 수 있다.
- Shuffling은 단순 document 순서가 아니라 batch composition과 loss stability까지 좌우한다.
- 긴 training은 failure를 전제로 checkpoint, remote backup, auto-resume을 설계해야 한다.
안 터질 수는 없다. 대신 터지더라도 다시 학습이 잘 이어지게 세팅하는게 중요하다.
- Evaluation automation은 부가 기능이 아니라 조용한 training bug를 잡는 health monitoring 시스템이다.
- Monitoring은 loss뿐 아니라 throughput, hardware health, storage latency, eval trajectory를 함께 봐야 한다.
- 대규모 run 전에는 GPU stress test와 node health check로 느리거나 불안정한 장비를 미리 제거해야 한다.
- Parallelism strategy는 model size만이 아니라 NVLink, network, memory, communication pattern에 맞춰 정해야 한다.
- Compute와 communication을 얼마나 잘 overlap하느냐가 distributed training efficiency를 크게 좌우한다.
- 개별 benchmark보다 중요한 최종 지표는 end-to-end tokens/sec와 안정적인 MFU다.
- 실제 training infra 준비는 GPU, NCCL, storage, dataloader, checkpoint, eval, recovery까지 모두 체크해야 한다.
- 실무적으로는 GPU spec보다 end-to-end throughput, dataloader 안정성, silent distributed bug, failure recovery가 더 중요하다.
Share article