Introduction
사용자가 효율적으로 deploy할 수 있는 capable model을 찾음에따라 SLM은 갈수록 중요해지고 있다.
Community는 capable small model을 다양하게 생산했고, 저자들은 SmolLM3로 경쟁력 있는 새로운 fully open 3B model 기여한 것에 좋다고 말하며 시작한다.
HuggingFaceTB/SmolLM3-3B-Base · Hugging Face
SmolLM3 Table of Contents Model Summary How to use Evaluation Training Limitations License Model Summary SmolLM3 is a 3B parameter language model designed to push the boundaries of small models. It supports 6 languages, advanced reasoning and long context.
huggingface.co
SmolLM3-3B : Instruct and reasoning model
HuggingFaceTB/SmolLM3-3B · Hugging Face
SmolLM3 Table of Contents Model Summary How to use Evaluation Training Limitations License Model Summary SmolLM3 is a 3B parameter language model designed to push the boundaries of small models. It supports dual mode reasoning, 6 languages and long context
huggingface.co
SmolLM3 sits in the efficiency sweet spot
해당 모델은 4B 모델에 비해 경쟁력은 유지하면서 Llama-3.2-3B 모델과 Qwen2.5-3B 모델을 능가하는 모습을 보인다.
.png)
Model Summary
- 3B Model : 11T token으로 훈련되었음, 3B Scale에서는 SoTA를 달성하고, 4B Model과 비슷한 성능
- Instruct model with dual mode reasoning : think / no_think 2가지 모드를 지원
- Multilingual support : English, French, Spanish, German, Italian, Portuguese
- Long context : 128k까지 NoPE, YaRN 사용
The Complete Recipe
SmolLM3와 이 article인 blueprint를 같이 배포한다. 이 글이 포함하는 내용은 아래와 같다.
- Architecture Details
- Exact Data Mixture (three-stage pretraining approach를 통해 domain을 넘어 performance를 향상시킨 방법)
- methodology (hybrid reasoning model)
보통 이러한 결과를 얻기 위해 reverse engineering이 여러 달 필요한데, 저자들은 full methodology를 제공
이제부터 진짜 내용 시작이다.
Pretraining
SmolLM3에서는 기존에 사용하던 architecture와 data mixture 모두 바꿨다.
아래의 사진으로 먼저 보자
Architecture and training details
.png)
SmolLM3는 Llama Architecture를 기반으로 구성된 SmolLM2와 유사한 tied embedding과 transformer decoder architecture을 따른다.
- Grouped Query Attention (GQA)
- SmolLM3는 Multi-head Attention을 4개의 그룹을 사용하는 Grouped-Query Attention으로 변경했다.
- 변경시 장점
- inference 동안 KV cache size도 상당히 줄여줌
- 동시에 GQA가 multihead attention의 성능과도 일치
- NoPE
- SmolLM3는 NoPE paper를 기반으로 NoPE를 구현
- NoPE란, 4번째 layer마다 rotary position embedding을 선택적으로 제거하는 방법론
- NoPE 적용 장점
- long context performance 향상 (short conext capabilities에 영향 없이)
- Intra-Document Masking
- training 동안 Attention Masking 사용
- same training sequence에서 different documents의 토큰이 서로 주의를 기울이지 않도록 보장함
- 장점
- long context training에서 빠르고 안정적일 수 있게 도움(동시에 short context performance도 유지)
- training 동안 Attention Masking 사용
- Training Stability
- OLMo 2에 따라, SmolLM3는 embedding layer에서 weight decay를 제거함
- 장점
- training stability 향상에 도움
- 훈련동안 healthier value에서 자연스럽게 안정화되는 norm을 embedding함으로써 more stable training dynamics에 기여
- 이때, overall performance에 영향은 없음
이러한 모든 변경 사항은 FineWeb-Edu dataset으로부터 훈련된 동일한 3B architecture를 사용하여 ablation을 통해 검증되었다.
각 수정은 performance 향상 또는 다른 benefit을 제공하며 성능을 유지하도록 보장한다.
Training Configuration
- global batch size : 2.36M tokens
- sequence length : 4096
- learning rate : 2e-4
- optimizer : AdamW
- beta1: 0.9
- beta2: 0.95
- weight decay: 0.1
- gradient clipping: 1
- scheduler : WSD
- 2,000 warmup step
- final 10% training steps부턴 0으로 linear decay
- framework : nanotron (for training)
- data processing : datatrove
- evaluation : lighteval
- Hardware : 384 H100 GPUs (24days)
.png)
Data mixture and training stages
해당 단계 또한, SmolLM2의 multi stage approach를 따라, SmolLM3도 three-stage training strategy(web, math, code를 evolving proportions에 따라 mix)를 사용하여 11.2T token으로 훈련한다.
저자들은 50B-100B에서 훈련된 3B model에 extensive ablation을 수행하여 data mixture와 ratio를 결정
.png)
위 사진에 보이는 것처럼 pretraining은 3단계로 구성된다.
- Stage 1 : Stable Phase ( 0T - 8T Tokens)
- 이 foundation stage는 core dataset mixture를 통해 strong general capabilities를 구축한다.
- Data 구성
- Web : 85% (12% Multilingual) - FineWeb-Edu, DCLM, FineWeb2, FineWeb2-HQ
- Code : 12% - The Stack v2 (16개 프로그래밍 언어), StarCoder2 pull requests, Jupyter and Kaggle notebooks, GitHub issues, and StackExchange
- Math : 3% - FineMath3+ and InfiWebMath3+
- Stage 2 : Stable Phase ( 8T - 10T Tokens)
- Good web coverage를 유지하는 동시에 higher quality math, code datasets를 도입
- Data 구성
- Web : 75% (12% Multilingual)
- Code : 15% - Stack-Edu 추가
- Math : 10% - FineMath4+, InfiWebMath4+, and MegaMath (including Qwen Q&A, Pro synthetic rewrites, and text-code interleaved blocks) 도입
- Stage 3 : Decay Phase (10T - 11.1T Tokens)
- 마지막 단계에선 math와 code data를 더욱 upsample
- Data 구성
- Web : 63% (12% Multilingual)
- Code : 24% - high-quality code data 양을 늘림
- Math : 13% - math data 양 늘림, OpenMathReasoning같은 instruction and reasoning dataset 도입
이러한 stage and mixture로 SmolLM3 base모델은 very competitive performance를 달성함. (뒤에 evaluation 참고)
정확한 nanotron training config 정보는 이 링크에서 확인할 수 있다.
이러한 main pretraining이 끝난 후, long context and reasoning를 위해 mid-training stage에서 model을 향상시킴.
Mid-training
long context adaption과 reasoning adaption을 "mid-training"이라 부른다.
mid-training은 main pretraining보다 짧지만, 여전히 다소 일반적이고, long context, reasoning 2가지 domain에서 model을 향상시키는 것에 목적이 있다.
Long Context extension
.png)
main pretraining 이후에 Model의 context length를 확장시키기 위해 추가적인 100B token으로 SmolLM3를 훈련한다.
SmolLM3는 context window를 sequentially extended했다.
- First Transitioning : RoPE theta가 1.5M까지 증가하면서 4k->32k context로 extend
- Second Transitioning : RoPE theta가 5M까지 증가하면서 32k-> 64k context로 extend
위 두 단계 모두 math,code, and reasoning data를 upsampled함.
- But, Ablation에서, specific long context data를 upsampling하는 것이 RULER, HELMET benchmark에서의 성능 향상에 도움이 되지 않음을 발견
오히려 long context performance에 효과적인 것은 아래와 같았습니다.
- NoPE 사용
- longer sequence와 increased RoPE theta value로 decay mixture에 대한 훈련하는 것
Qwen2.5에 따라, training context length를 넘어서는 extrapolate를 하기 위해 YARN을 사용함.
- 이 덕에 inference 동안, model은 최대 128k context까지 다룰 수 있음.
Reasoning Mid-training
reasoning capabilities를 model에 통합하기 위해 mid-training stage에서 훈련한다.
왜 이들은 mid-training stage에서 훈련을 진행했을까? pre-/post-training stage와의 차이는 무엇일까?
- specific domain에 focusing없이 general capability를 target한다는 것
따라서, 이 연구자들도 particular domain(mathematics, computer code 등)에 target하지 않고 reason하도록 하고 싶었기 때문에 mid-training 단계에서 훈련을 진행했다.
논문에서 사용한 데이터셋
논문에서 사용한 chat template : ChatML
데이터들을 이용해서 학습하게 될 때 과도하게 구조화될 수 있다. (특정 패턴에 과적합 되는 느낌)
이를 방지하기 위해 논문에서는 Wrapped Packing을 사용
해당 모델은 4 epoch 훈련되었고 subsequent SFT stage에 대해 checkpoint를 사용했다.
Post-training
DeepSeek R1, Qwen 3와 같은 Reasoning Model의 출시로 model이 explicit reasoning에 참여할 때 나타나는 powerful capabilities가 밝혀졌다.
하지만, 아직까지 community에 dual instrcution model을 만들기 위한 public datasets recipe가 완전히 공개된 것은 부족함.
- 대부분의 existing approach들은 complex reinforcement learning process와 proprietary dataset이 포함.
- 따라서, 이러한 결과를 재현하거나 만들어보기에 어려움이 존재했음.
그래서, SmolLM3 저자들은 어떻게 이러한 문제들을 다뤘는지 설명하고 dual instruction model을 만들기 위한 complete recipe을 공유한다.
.png)
Building the Chat Template
training methodology를 보기 전에, 어떻게 user가 dual-mode model이랑 interact하는지 확인해봐야 한다.
Chat Template의 역할은 다음과 같다.
- interface로서 reasoning / non-reasoning mode사이에서 seamless switching을 가능하게 함
이러한 Chat Template의 design은 training data format과 model behavior 모두에 직접적으로 영향을 준다.
예를 들어, 우리가 reasoning mode를 사용하고 싶다면, /think를 system prompt에 추가하면 되고, non-reasoning mode를 사용하고싶다면, /no_think를 추가하면 된다. 아마도 아래와 같은 형식일 것 같다.
#reasoning mode
[
{"role":"system","content":"/think"},
{"role":"user","content":"질문"},
]
#non-reasoning mode
[
{"role":"system","content":"/no_think"},
{"role":"user","content":"질문"},
]
또한, SmolLM3는 tool calling을 지원하고, chat template은 XML tool과 Python tool로 tool description을 위한 2가지 section을 가지고 있다.
이렇게 함으로써, 모델이 도구에 대한 설명을 잘 이해할 수 있게 되었음을 실험적으로 증명했다고 한다.
마지막으로 SmolLM3의 메타데이터에 대한 설명이다.
SmolLM3는 2가지 reasoning mode에 대해 default system message를 제공한다.
이 default system message에는 아래와 같은 정보가 담긴 metadata section이 함께 제공된다.
- date
- knowledge cut-off date
- current reasoning mode
User는 system 역할의 message를 제공하여 이러한 default system message를 대체할 수 있다.
추가적으로 metadata section을 제거하고 싶다면 아래와 같이 가능하다.
- system prompt로 /system_override flag를 사용하면 제거가 되고 이는 specific use case에 대해 유연성을 제공한다.
Supervised Finetuning
reasoning mid-training stage후에 reasoning, non-reasoning mode 모두에 걸쳐 능력을 통합하기 위해 Supervised Finetuning을 진행한다.
이때, dual-mode model을 훈련하는 것은 모든 영역에서 좋은 performance를 유지하기 위해 데이터 구성 비율을 신중하게 조정하는 것이 요구된다. 예를 들면 아래와 같은 균형일 것이다.
- reasoning mode, non-reasoning mode 균형
- domain 간의 균형
이는 하나의 모드가 편향되거나, 도메인 성능의 격차가 나는 등의 문제를 방지할 수 있다.
그렇다면, reasoning mode와 non-reasoning mode의 데이터 양이 우선 어느정도 균등해야 할 것이다.
하지만, 연구자들은 특정 domaindml reasoning traces를 포함한 데이터셋이 부족하다는 문제를 겪었다고 한다.
이를 해결하기 위해 non-reasoning dataset을 prompt로 Qwen3-32B 모델의 reasoning mode를 이용하여 synthetic data를 생성하였다고 한다.
Qwen3-32B 모델을 사용하는 방식을 통해 model이 초기에 reasoning mode에서 struggle하던 domain에서의 성능 향상을 이루었다고 한다.
.png)
그렇다면, 이 논문에서 최종적으로 data mixture를 어떻게 정하였는지가 궁금할 것이다.
이는 extensive ablation을 통해 결과를 얻을 수 있었고 아래와 같다. (이는 communinty에 공개할 예정)
- SFT dataset : 1.8B token
- non-reasoning mode : 1B token (12 dataset)
- reasoning mode : 0.8B token (10 dataset)
위와 같은 data mixture를 가지고 BFD packing을 사용하여 4epoch을 훈련하였다고 한다.
Off-policy model alignment with Anchored Preference Optimization (APO)
SFT 단계가 끝나면, model alignment 단계를 수행한다. 이때 사용하는 것은 아래와 같다.
- Tulu3 preference dataset - for non-reasoning mode
- new synthetic preference pairs - for reasoning mode (Qwen3-32B/Qwne3-0.6B으로 생성)
- Qwen3-32B 모델이 생성한 응답은 선택될 응답 (GOOD)
- Qwen3-0.6B 모델이 생성한 응답은 거부된 응답 (BAD)
.png)
이제 진짜 학습에 대해 설명이 시작된다.
APO는 more stable optimization objective를 제공하는 DPO 변형중 하나이다.
우선, DPO에서 reward function $r_θ(x,y)$는 훈련중인 모델이 특정 sequence를 생성할 확률과 훈련 시작 지점의 reference model이 같은 sequence를 생성할 확률 간의 log-ratio를 측정한다.
![]()
여기서 $\beta$는 최적화 되는 model이 reference model에 비해 얼마나 변경될 수 있는지를 control한다.
그렇다면 loss는 어떻게 될까?
DPO loss는 prompts $x$, chosen $y_w$ responses, rejected $y_l$ responses으로 구성된 triplets를 사용하여 최적화한다.
각 용어는 아래와 같다.
- chosen $y_w$ : 사람이 선호하는 응답
- rejected $y_l$ : 사람이 선호하지 않는 응답
![]()
우리가 실제 이용하게 될 APO의 loss 는 아래와 같고, 이는 더 안정적인 결과를 보여줄 뿐만 아니라 ablation에서 더 높은 downstream performance를 보였다고 한다.
![]()
DPO와 APO의 loss는 큰 차이가 없는 것처럼 보이나 아래와 같은 차이가 존재한다.
- log 변환 X
- reward의 차이에 sigmoid X -> 각 reward에 sigmoid
이러한 변화로 인해 아래와 같은 영향이 생긴다.
- Loss의 차이
- DPO -> Difference를 크게 하는 것에 초점
- APO -> $y_w$ 최대화 $y_l$ 최소화에 초점
- 안정성의 차이
- DPO -> 점수가 무한히 커지거나 작아지지 않기에 안정적
- APO -> potentially 학습이 불안할 수 있음
여기까지가 APO 설명이었다.
APO를 실제 모델에 적용했을 때 결과는 어땠을까?
mathematics, science, instruction following, coding, chat 등에서는 성능 향상이 보였으나, RULER와 같은 long context benchmark에서는 degradation을 보였다고 한다.
원인이 무엇이었을까?
이는 mid-training stage에 있었다. reasoning capabilities에 focus하는 것이 long context performance에 영향을 미친 것이다.
또한, reasoning dataset의 대부분이 long context에 미치지 못했기에 APO training data는 24k로 제한되었다.
이제 원인을 알았으니 해결해야 한다.
이러한 performance drop 문제를 해결하기 위해 model merging을 적용한다.
Model Merging
Model Merging이란 무엇일까?
- 추가적인 학습 필요와 ensembling computational overhead 없이 서로 다른 모델의 장점을 결합하는 popular and powerful technique
본 연구자들은 MergeKit library를 사용하여 model merging을 진행했다.
- MergeKit Library
- Linear, SLERP, Task Arithmetic, TIES, DARE 병합 방법론을 포함하는 모델 병합 라이브러리
논문에서 적용한 2step merging recipe는 다음과 같다.
- 각 APO checkpoint를 얻고 model soup을 만든다.
- Model soup 여러 check point의 가중치를 평균화하여 만든 ensemble model
- model soup을 mid-training checkpoint와 결합 (mid-training checkpoint는 long context performance 좋음)
- 이때, linear merge를 이용하여 가중치 비율 0.9:0.1(APO model soup : mid-training checkpoint)로 결합한다.
이 merging을 수행한 후, 최대 128k token context에서 base model의 RULER score를 회복할 수 있었다.
이 merging model이 huggingface에 공개된 checkpoint다.
Evaluation
Base model
win rate-model size plot에서 SmolLM3 3B 모델은 4B model이랑 유사한 win rate를 가지며, 동일한 3B model를 능가하는 결과를 보인다.
여기서 win rate는 아래의 벤치마크로 평가한다.
- HellaSwag, ARC, Winogrande, CommonsenseQA, MMLU-CF, MMLU Pro CF, PIQA, OpenBookQA, GSM8K, MATH, HumanEval+, MBPP+
.png)
아래와 같이 각 분야에 대한 평가를 자세히 봐도 1등 아니면 2등을 달성하는 것을 볼 수 있다.
.png)
또한, multilingual benchmark로 평가할 때도 영어 뿐만 아니라 좋은 성능을 보인다.
.png)
Dual Instruct / Reasoning Model
SmolLM3는 instruct와 reasoning mode를 모두 가지기 때문에 동일한 기능을 가진 모델과 비교해야 하고, 이러한 두가지 모드 각각에 대해 평가해야 한다.
No extending thinking evaluation
아래의 plot은 SmolLM3는 다른 3B non-reasoning model과 비교 평가하고 Qwen3 reasoning model과 non-reasoning mode에서 비교한 것이다.
보이는 것처럼 SmolLM3는 좋은 결과를 보인다.
.png)
Extending thinking evaluation
이제 reasoning mode를 평가하면 끝이다.
extended thinking으로 SmolLM3의 reasoning 능력을 평가할 때, 모델은 most benchmark에서 non-reasoning mode에 비해 substantial improvements를 보인다.
Qwen3 4B이 reasoning, non-reasoning에서 일반적으로 가장 높은 점수를 달성하지만, SmolLM3는 3B 이내의 class에서 competitive performance를 보이고, 특히 mathematical reasoning과 complex problem-solving task에서 좋은 능력을 보인다.
.png)
마무리
이렇게 길어질지 몰랐는데 쓰다보니까 길어졌다.
한 가지 아쉬운 점은 이렇게 글을 읽으면서 정리해보는게 처음이라 초반에는 직독직해식으로 정리했다는 점이다.
이렇게 직독직해로 정리하는 것은 보는 사람에게도 큰 도움이 안되고 나 또한, 나중에 봤을 때 이해하기 어려울 것 같아서 조만간 아래 정리한 것처럼 주요 내용만 풀어 설명하는 방식으로 변경하고자 한다.
SmolLM3에서는 다양한 technique을 이용하여 좋은 성능의 SLM을 만든 것 같다.
이러한 LLM 개발해보는 것이 목적인데, 아직도 공부할게 엄청 많다는 것을 다시 한 번 느꼈고, 찬찬히 공부해보고자 한다.
끝.
'Article, Paper' 카테고리의 다른 글
| [ Activation Function ] GEGLU (Unlocking the Power of GeGLU) (0) | 2025.09.03 |
|---|---|
| [ RAG ] From Local to Global: A GraphRAG Approach to Query-Focused Summarization (0) | 2025.08.26 |
| Agentic AI v.s. AI Agent (0) | 2025.08.17 |
| [ Agent ] RAG Technique 정리 (0) | 2025.08.10 |
| [ Memory ] MIRIX : Multi-Agent Memory System for LLM-Based Agents (0) | 2025.08.09 |