SmolLM3- smol, đa ngôn ngữ, lý luận theo ngữ cảnh dài
- 6 min read
SmolLM3: smol, multilingual, long-context reasoner
SmolLM3: smol, multilingual, long-context reasoner
Bài viết này giới thiệu SmolLM3, một mô hình ngôn ngữ nhỏ, đa ngôn ngữ, có khả năng xử lý ngữ cảnh dài.
Các mô hình:
- Base model: https://hf.co/HuggingFaceTB/SmolLM3-3B-Base
- Instruct and reasoning model: https://hf.co/HuggingFaceTB/SmolLM3-3B
Tóm tắt:
- Mô hình 3B, SoTA ở quy mô 3B và cạnh tranh với các mô hình 4B.
- Mô hình Instruct hỗ trợ lý luận đa chế độ (
think/no_think). - Hỗ trợ đa ngôn ngữ (6 ngôn ngữ).
- Ngữ cảnh dài lên đến 128k (NoPE và YaRN).
Chúng tôi chia sẻ bản thiết kế kỹ thuật chi tiết, bao gồm chi tiết kiến trúc, hỗn hợp dữ liệu chính xác và phương pháp xây dựng mô hình lý luận lai.
Dưới đây là quy trình huấn luyện của mô hình:
Pretraining
SmolLM3 đã thay đổi kiến trúc và hỗn hợp dữ liệu so với các phiên bản trước.
Architecture and training details
- Grouped Query Attention (GQA): Thay thế multi-head attention bằng GQA (4 nhóm).
- NoPE: Loại bỏ có chọn lọc rotary position embeddings từ mỗi lớp thứ 4.
- Intra-Document Masking: Sử dụng attention masking để đảm bảo các token từ các tài liệu khác nhau không chú ý lẫn nhau.
- Training Stability: Loại bỏ weight decay khỏi các lớp embedding.
Cấu hình huấn luyện: batch size toàn cầu 2.36M tokens, độ dài chuỗi 4096, learning rate 2e-4, AdamW optimizer (beta1: 0.9, beta2: 0.95), weight decay 0.1, gradient clipping 1. Sử dụng WSD scheduler (Warmup-Stable-Decay). Sử dụng nanotron, datatrove và lighteval. Mô hình được huấn luyện trên 384 GPU H100 trong 24 ngày.
Data mixture and training stages
SmolLM3 được huấn luyện trên 11.2T tokens bằng cách sử dụng chiến lược huấn luyện ba giai đoạn kết hợp dữ liệu web, toán học và mã.
- Giai đoạn 1 (0T → 8T tokens):
- Web: 85% (12% đa ngôn ngữ) - FineWeb-Edu, DCLM, FineWeb2 và FineWeb2-HQ
- Code: 12% - The Stack v2, StarCoder2 pull requests, Jupyter và Kaggle notebooks, GitHub issues, và StackExchange.
- Math: 3% - FineMath3+ và InfiWebMath3+
- Giai đoạn 2 (8T → 10T tokens):
- Web: 75% (12% đa ngôn ngữ)
- Code: 15% - Stack-Edu
- Math: 10% - FineMath4+, InfiWebMath4+, và MegaMath
- Giai đoạn 3 (10T → 11.1T tokens):
- Web: 63% (12% đa ngôn ngữ)
- Code: 24%
- Math: 13%
Mid-training
Điều chỉnh cho ngữ cảnh dài và khả năng lý luận.
Long Context extension
Huấn luyện SmolLM3 trên 100B tokens bổ sung để mở rộng độ dài ngữ cảnh. Mở rộng độ dài ngữ cảnh theo hai giai đoạn (50B tokens mỗi giai đoạn): 4k → 32k (RoPE theta = 1.5M), sau đó 32k → 64k (RoPE theta = 5M). Sử dụng YARN để ngoại suy vượt quá độ dài ngữ cảnh huấn luyện. Mô hình có thể xử lý ngữ cảnh lên đến 128k trong quá trình suy luận.
Reasoning Mid-training
Huấn luyện mô hình để kết hợp khả năng lý luận. Dữ liệu huấn luyện chứa 35B tokens từ Open Thoughts và một tập hợp con từ Llama-Nemotron-Post-Training-Dataset. Sử dụng ChatML chat template và wrapped packing. Huấn luyện mô hình trong 4 epochs (~140B tokens).
Post-training
Xây dựng mô hình dual instruction hỗ trợ cả chế độ lý luận và không lý luận.
Building the Chat Template
Cho phép người dùng kiểm soát chế độ lý luận trong cuộc trò chuyện bằng cách bao gồm các flag /think và /no_think trong system prompt.
Supervised Finetuning
Sau giai đoạn lý luận mid-training, chúng tôi tiến hành Supervised Finetuning (SFT) để kết hợp các khả năng ở cả chế độ lý luận và không lý luận cho toán học, mã, lý luận chung, tuân theo hướng dẫn, đa ngôn ngữ và tool calling.
Dữ liệu SFT chứa 1.8B tokens (1B ở chế độ không lý luận và 0.8B ở chế độ lý luận). Chúng tôi đã huấn luyện trong 4 epochs (~8B tokens).
Off-policy model alignment with Anchored Preference Optimization (APO)
Thực hiện model alignment bằng cách sử dụng kết hợp Tulu3 preference dataset (chế độ không lý luận) và synthetic preference pairs mới (chế độ lý luận). Sử dụng Anchored Preference Optimization (APO).
Công thức phần thưởng trong APO:
DPO loss function:
APO objective:
Model Merging
Model merging kết hợp các điểm mạnh của các mô hình khác nhau. Sử dụng MergeKit library.
- Tạo một model soup từ mỗi APO checkpoint.
- Kết hợp model soup với mid-training checkpoint (long-context). Linear merge (APO model soup: 0.9, mid-training checkpoint: 0.1).
Evaluation
Đánh giá base model và instruct model (lý luận và không lý luận).
Base model
SmolLM3 vượt trội so với các mô hình 3B khác và đạt hiệu suất cạnh tranh với các mô hình 4B lớn hơn.
Mô hình thể hiện hiệu suất đa ngôn ngữ mạnh mẽ trên năm ngôn ngữ châu Âu chính.
Dual Instruct / Reasoning model
Đánh giá trong cả hai chế độ (instruct và reasoning).
No extending thinking evaluation
SmolLM3 vượt trội so với các mô hình không lý luận 3B khác.
Extending thinking evaluation
SmolLM3 cho thấy sự cải thiện đáng kể so với phiên bản không lý luận.
How to run locally
Mã mô hình hóa có sẵn trong transformers v4.53.0.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # for GPU usage or "cpu" for CPU usage
# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
).to(device)
# prepare the model input
prompt = "Give me a brief explanation of gravity in simple terms."
messages_think = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages_think,
tokenize=False,
add_generation_prompt=False,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# Generate the output
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)
# Get and decode the output
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):]
print(tokenizer.decode(output_ids, skip_special_tokens=True))
Khuyến nghị: temperature=0.6 và top_p=0.95.
Enabling and Disabling Extended Thinking Mode
Sử dụng flag /think và /no_think trong system prompt.
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "system", "content": "/no_think"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
Agentic Usage
SmolLM3 hỗ trợ tool calling! Truyền danh sách các tool dưới dạng xml_tools hoặc python_tools.
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "HuggingFaceTB/SmolLM3-3B"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint)
tools = [
{
"name": "get_weather",
"description": "Get the weather in a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "The city to get the weather for"}}}
}
]
messages = [
{
"role": "user",
"content": "Hello! How is the weather today in Copenhagen?"
}
]
inputs = tokenizer.apply_chat_template(
messages,
enable_thinking=False, # True works as well, your choice!
xml_tools=tools,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt"
)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
Conclusion
SmolLM3 là một mô hình nhỏ, có ngữ cảnh dài, đa ngôn ngữ, có khả năng lý luận với ngữ cảnh lên đến 128k.
Resources
- Bộ sưu tập mô hình và checkpoint lượng tử hóa: Link
- Kho lưu trữ SmolLM GitHub với cấu hình pretraining và mã đánh giá: https://github.com/huggingface/smollm
- HuggingFace org của chúng tôi: https://huggingface.co/HuggingFaceTB
Link bài viết gốc
- Tags:
- Ai
- July 8, 2025
- Huggingface.co