logo
|
Blog
    deeplearning

    The Smol Training Playbook:The Secrets to Building World-Class LLMs

    Hugginface의 실용적인 아티클
    May 30, 2026
    The Smol Training Playbook:The Secrets to Building World-Class LLMs
    huggingface.co
    https://huggingface.co/spaces/HuggingFaceTB/smol-training-playbook#why-the-question-nobody-wants-to-answer
     
     
    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 얼마나 있는데? 라고 함)
      • notion image
    • 가능하면 우선 FT/post-training을 해보고, 그래도 불만족스럽다면 새롭게 학습해라.
    • 아주 현실적으로 이야기 해주는데, 아래 경우에는 모델 학습.. 해볼만할지도?라고 말한다
        1. 완전히 새로운 Research를 시도하고 싶을 때
          1. 데이터를 1/00로 줄여서 학습할 수 있을 것 같다.
          2. SFT없이 RL만으로 학습이 될 것 같다
        1. 제품에 당장 필요한 경우
          1. 특정 도메인에 대한 강한 지식
          2. 원하는 모델이 있는데, 이걸 최대한 줄이고자할때(distillation에 가까움)
        1. 전략적 오픈소스 : 너무 명확히 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에는 두가지 방법이 있다.
        1. 모델은 그대로 두고 더 적은 데이터로 학습
        1. 작은 모델로 실험한 뒤 큰 모델에 적용
    • 작은 scale에서 좋다고 큰 scale에서도 좋은건 아니지만, 작은 곳에서 안좋으면 큰 곳에서도 안좋다.
    • Evaluation이 매우 중요하다.
      • Loss도 중요하지만, Loss는 spike, divergence, converge 속도 등을 파악하는데 중요하지 절대적인 수치로써 크게 작용하진 않는다. (특히 특정 능력을 파악하고 싶을 때)
         
      • Monotonicity: 학습이 진행될수록 점수가 대체로 올라야 함
      • Low noise: seed나 sampling에 따라 너무 출렁이면 안 됨
      • Above-random signal: early stage에서도 어느 정도 신호가 있어야 함
      • Ranking consistency: 초반에 A가 B보다 좋으면, 뒤에서도 대체로 그 순서가 유지되어야 함
     
     

    모델 아키텍처

    https://huggingface.co/spaces/HuggingFaceTB/smol-training-playbook#designing-the-model-architecture
     
    • dense, MoE, Hybrid 선택기준 : 생략
     
    Attention : GQA써라
    업계 표준이 MHA에서 GQA로 변함
    notion image
    • 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)
    이렇게되면 학습 중간에 임의로 더 오래 학습해도 된다.(감소하기 시작하기 전이기만하면)
    notion image
    감소는 마지막 10-20% 정도에 한다고 하고 multi-step은 last 33%부터 시작하기도함.
     
    줄이기시작한 순간부터 내려가더니 따라잡는 모습
    notion image
     
    모든 lr을 직접 테스트하는건 불가능하다. 테스트 하더라도 스케일이 바뀌면 또 다시 해야한다.
    그래서 적당한 범위의 4가지 정도만 테스트해본 뒤, 한가지 값을 고르고 다른 요소들이 바뀌면(batch size, training tokens, etc) 스케일링 법칙을 적용해서 수정해야한다.
     
     
    Batch size
    • 배치 크기는 어느 정도까지는 throughput을 증가시키지만 정도를 넘어서면 같은 loss에 도달하기까지 필요한 sample 수를 증가시킨다. = critical batch size.
      • 그래도 만약 정말 효율적이라면 걸리는 시간 자체는 줄어들 수 있다. 하지만 가능한 넘기지 않는게 좋다.
    • 배치 크기가 커지면, 각 미니배치에서 계산되는 그라디언트가
      • “진짜 그라디언트”에 더 가까운 추정치가 된다.
        즉, 더 정확한 추정이므로 더 큰 스텝(러닝레이트)을 써도 안전 하고,
        같은 목표 손실에 더 적은 업데이트(step)로 도달할 수 있다.
    • AdamW를 쓸 때는 배치가 k배 커지면 lr도 sqrt(k)배 키우는게 좋다.
     
     
    Monitoring
    loss만 모니터링하는게 아니라 다른 것들도 봐야한다. 학습이 비효율적으로 되고 있을 수도 있고
    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.
     
     
     
    이외에 많은 실용적인 내용들…
     
     
     
    1. On-policy + distillation은 앞으로 매우 중요할 수 있다.
      1. 물론 PPO와 GRPO도 온폴리시긴함
      2. 네가 작은 모델을 만들고 싶다면 teacher 잡고 on-policy training해라
      3. 단점은 teacher가 필요하다 + student가 teacher와 같은 vocab을 공유해야 한다. → 우리들이 그것도 해결했다 라면서 아티클 새로 하나 나옴
        1. notion image
          GKD = off + on
    1. Pretraining → mid-training(domain knowledge) → SFT(format) → Post-training RL
      1. for SFT : LR 더 작게 하기, 패딩으로 낭비되지 않도록 짧은 샘플들을 하나의 샘플 시퀀스가 몰아넣기, User message에는 loss masking하기
    1. 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

    Kim Hojin

    RSS·Powered by Inblog