模型概述
模型特點
模型能力
使用案例
🚀 SmolLM3
SmolLM3是一款參數為30億的語言模型,旨在突破小模型的性能邊界。它支持6種語言,具備高級推理能力和長上下文處理能力,是一個完全開源的模型,在30 - 40億參數規模下表現出色。
🚀 快速開始
SmolLM3的建模代碼在transformers v4.53.0
版本中可用,因此請確保升級你的transformers版本。你也可以使用最新的 vllm
加載模型,它以transformers為後端。
pip install -U transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # 用於GPU使用,或 "cpu" 用於CPU使用
# 加載分詞器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
).to(device)
# 準備模型輸入
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=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 生成輸出
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)
# 獲取並解碼輸出
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :]
print(tokenizer.decode(output_ids, skip_special_tokens=True))
💡 使用建議
建議在採樣參數中設置
temperature=0.6
和top_p=0.95
。
✨ 主要特性
- 專為混合推理優化的指令模型
- 完全開源模型:開放權重 + 完整的訓練細節,包括公開的數據混合和訓練配置
- 長上下文處理:在64k上下文上進行訓練,並使用YARN外推支持高達128k的標記
- 多語言支持:原生支持6種語言(英語、法語、西班牙語、德語、意大利語和葡萄牙語)
更多詳細信息請參考我們的博客文章:https://hf.co/blog/smollm3
📦 安裝指南
若要使用SmolLM3,需確保transformers版本為 v4.53.0
,可通過以下命令進行升級:
pip install -U transformers
💻 使用示例
基礎用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "HuggingFaceTB/SmolLM3-3B"
device = "cuda" # 用於GPU使用,或 "cpu" 用於CPU使用
# 加載分詞器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
).to(device)
# 準備模型輸入
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=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 生成輸出
generated_ids = model.generate(**model_inputs, max_new_tokens=32768)
# 獲取並解碼輸出
output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :]
print(tokenizer.decode(output_ids, skip_special_tokens=True))
長上下文處理
當前的 config.json
配置為支持最長65,536個標記的上下文長度。若要處理更長的輸入(128k或256k),可使用YaRN並將 max_position_embeddings
和 rope_scaling
修改為:
{
...,
"rope_scaling": {
"factor": 2.0, #2x65536=131 072
"original_max_position_embeddings": 65536,
"type": "yarn"
}
}
啟用和禁用擴展思考模式
默認情況下啟用擴展思考模式,因此上述示例會生成帶有推理軌跡的輸出。若要選擇是否啟用擴展思考模式,可通過系統提示提供 /think
和 /no_think
標誌,如下例所示為禁用擴展思考模式的代碼:
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,
)
也可以通過 enable_thinking
關鍵字參數指定是否使用擴展思考模式,如下例所示:
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)
代理式使用
SmolLM3支持工具調用!只需傳遞工具列表:
- 在
xml_tools
參數下用於標準工具調用:這些工具將作為XML標籤內的JSON塊調用,例如<tool_call>{"name": "get_weather", "arguments": {"city": "Copenhagen"}}</tool_call>
- 或在
python_tools
參數下:模型將在<code>
代碼片段中像調用Python函數一樣調用工具,例如<code>get_weather(city="Copenhagen")</code>
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 也可以,由你選擇!
xml_tools=tools,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt"
)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
使用自定義系統指令
你可以通過系統提示指定自定義指令,同時控制是否使用擴展思考模式。例如,以下代碼展示瞭如何在啟用擴展思考模式的同時讓模型像海盜一樣說話:
prompt = "Give me a brief explanation of gravity in simple terms."
messages = [
{"role": "system", "content": "Speak like a pirate./think"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
對於本地推理,你可以使用 llama.cpp
、ONNX
、MLX
和 MLC
。可以在這個集合(https://huggingface.co/collections/HuggingFaceTB/smollm3-686d33c1fdffe8e635317e23)中找到量化的檢查點。
vLLM和SGLang
你可以使用vLLM和SGLang將模型部署為與OpenAI格式兼容的API。
SGLang
python -m sglang.launch_server --model-path HuggingFaceTB/SmolLM3-3B
vLLM
vllm serve HuggingFaceTB/SmolLM3-3B
設置 chat_template_kwargs
你可以在API請求中通過傳遞 chat_template_kwargs
參數為已部署的模型指定 chat_template_kwargs
,例如 enable_thinking
和 xml_tools
。
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "HuggingFaceTB/SmolLM3-3B",
"messages": [
{"role": "user", "content": "Give me a brief explanation of gravity in simple terms."}
],
"temperature": 0.6,
"top_p": 0.95,
"max_tokens": 16384,
"chat_template_kwargs": {"enable_thinking": false}
}'
📚 詳細文檔
評估
本節報告了SmolLM3模型的評估結果。除非另有說明,所有評估均為零樣本評估,我們使用 lighteval 進行評估。
我們用粗體突出顯示最佳分數,用下劃線標記第二佳分數。
指令模型
無擴展思考模式
非推理模型和推理模型在無思考模式下的評估結果。我們用粗體突出顯示最佳和第二佳分數。
類別 | 指標 | SmoLLM3 - 3B | Qwen2.5 - 3B | Llama3.1 - 3B | Qwen3 - 1.7B | Qwen3 - 4B |
---|---|---|---|---|---|---|
高中數學競賽 | AIME 2025 | 9.3 | 2.9 | 0.3 | 8.0 | 17.1 |
數學問題解決 | GSM - Plus | 72.8 | 74.1 | 59.2 | 68.3 | 82.1 |
競賽編程 | LiveCodeBench v4 | 15.2 | 10.5 | 3.4 | 15.0 | 24.9 |
研究生水平推理 | GPQA Diamond | 35.7 | 32.2 | 29.4 | 31.8 | 44.4 |
指令遵循 | IFEval | 76.7 | 65.6 | 71.6 | 74.0 | 68.9 |
對齊 | MixEval Hard | 26.9 | 27.6 | 24.9 | 24.3 | 31.6 |
工具調用 | BFCL | 92.3 | - | 92.3 * | 89.5 | 95.0 |
多語言問答 | Global MMLU | 53.5 | 50.54 | 46.8 | 49.5 | 65.1 |
(*): 這是一個工具調用微調模型
擴展思考模式
SmolLM3和Qwen3模型在推理模式下的評估結果:
類別 | 指標 | SmoLLM3 - 3B | Qwen3 - 1.7B | Qwen3 - 4B |
---|---|---|---|---|
高中數學競賽 | AIME 2025 | 36.7 | 30.7 | 58.8 |
數學問題解決 | GSM - Plus | 83.4 | 79.4 | 88.2 |
競賽編程 | LiveCodeBench v4 | 30.0 | 34.4 | 52.9 |
研究生水平推理 | GPQA Diamond | 41.7 | 39.9 | 55.3 |
指令遵循 | IFEval | 71.2 | 74.2 | 85.4 |
對齊 | MixEval Hard | 30.8 | 33.9 | 38.0 |
工具調用 | BFCL | 88.8 | 88.8 | 95.5 |
多語言問答 | Global MMLU | 64.1 | 62.3 | 73.3 |
基礎預訓練模型
英語基準測試
注意:除非另有說明,所有評估均為零樣本評估。對於Ruler 64k評估,我們對具有32k上下文的Qwen模型應用YaRN以外推上下文長度。
類別 | 指標 | SmolLM3 - 3B | Qwen2.5 - 3B | Llama3 - 3.2B | Qwen3 - 1.7B - Base | Qwen3 - 4B - Base |
---|---|---|---|---|---|---|
推理與常識 | HellaSwag | 76.15 | 74.19 | 75.52 | 60.52 | 74.37 |
ARC - CF (平均) | 65.61 | 59.81 | 58.58 | 55.88 | 62.11 | |
Winogrande | 58.88 | 61.41 | 58.72 | 57.06 | 59.59 | |
CommonsenseQA | 55.28 | 49.14 | 60.60 | 48.98 | 52.99 | |
知識與理解 | MMLU - CF (平均) | 44.13 | 42.93 | 41.32 | 39.11 | 47.65 |
MMLU Pro CF | 19.61 | 16.66 | 16.42 | 18.04 | 24.92 | |
MMLU Pro MCF | 32.70 | 31.32 | 25.07 | 30.39 | 41.07 | |
PIQA | 78.89 | 78.35 | 78.51 | 75.35 | 77.58 | |
OpenBookQA | 40.60 | 40.20 | 42.00 | 36.40 | 42.40 | |
BoolQ | 78.99 | 73.61 | 75.33 | 74.46 | 74.28 | |
數學與代碼 | ||||||
編碼與數學 | HumanEval+ | 30.48 | 34.14 | 25.00 | 43.29 | 54.87 |
MBPP+ | 52.91 | 52.11 | 38.88 | 59.25 | 63.75 | |
MATH (4 - 樣本) | 46.10 | 40.10 | 7.44 | 41.64 | 51.20 | |
GSM8k (5 - 樣本) | 67.63 | 70.13 | 25.92 | 65.88 | 74.14 | |
長上下文 | ||||||
Ruler 32k | 76.35 | 75.93 | 77.58 | 70.63 | 83.98 | |
Ruler 64k | 67.85 | 64.90 | 72.93 | 57.18 | 60.29 | |
Ruler 128k | 61.03 | 62.23 | 71.30 | 43.03 | 47.23 |
多語言基準測試
類別 | 指標 | SmolLM3 3B Base | Qwen2.5 - 3B | Llama3.2 3B | Qwen3 1.7B Base | Qwen3 4B Base |
---|---|---|---|---|---|---|
主要支持語言 | ||||||
法語 | MLMM Hellaswag | 63.94 | 57.47 | 57.66 | 51.26 | 61.00 |
Belebele | 51.00 | 51.55 | 49.22 | 49.44 | 55.00 | |
Global MMLU (CF) | 38.37 | 34.22 | 33.71 | 34.94 | 41.80 | |
Flores - 200 (5 - 樣本) | 62.85 | 61.38 | 62.89 | 58.68 | 65.76 | |
西班牙語 | MLMM Hellaswag | 65.85 | 58.25 | 59.39 | 52.40 | 61.85 |
Belebele | 47.00 | 48.88 | 47.00 | 47.56 | 50.33 | |
Global MMLU (CF) | 38.51 | 35.84 | 35.60 | 34.79 | 41.22 | |
Flores - 200 (5 - 樣本) | 48.25 | 50.00 | 44.45 | 46.93 | 50.16 | |
德語 | MLMM Hellaswag | 59.56 | 49.99 | 53.19 | 46.10 | 56.43 |
Belebele | 48.44 | 47.88 | 46.22 | 48.00 | 53.44 | |
Global MMLU (CF) | 35.10 | 33.19 | 32.60 | 32.73 | 38.70 | |
Flores - 200 (5 - 樣本) | 56.60 | 50.63 | 54.95 | 52.58 | 50.48 | |
意大利語 | MLMM Hellaswag | 62.49 | 53.21 | 54.96 | 48.72 | 58.76 |
Belebele | 46.44 | 44.77 | 43.88 | 44.00 | 48.78 | |
Global MMLU (CF) | 36.99 | 33.91 | 32.79 | 35.37 | 39.26 | |
Flores - 200 (5 - 樣本) | 52.65 | 54.87 | 48.83 | 48.37 | 49.11 | |
葡萄牙語 | MLMM Hellaswag | 63.22 | 57.38 | 56.84 | 50.73 | 59.89 |
Belebele | 47.67 | 49.22 | 45.00 | 44.00 | 50.00 | |
Global MMLU (CF) | 36.88 | 34.72 | 33.05 | 35.26 | 40.66 | |
Flores - 200 (5 - 樣本) | 60.93 | 57.68 | 54.28 | 56.58 | 63.43 |
該模型還在阿拉伯語(標準)、中文和俄語數據上進行了訓練,但與上述6種語言相比,這些語言的標記數量較少。我們報告這些語言的性能僅供參考。
類別 | 指標 | SmolLM3 3B Base | Qwen2.5 - 3B | Llama3.2 3B | Qwen3 1.7B Base | Qwen3 4B Base |
---|---|---|---|---|---|---|
其他支持語言 | ||||||
阿拉伯語 | Belebele | 40.22 | 44.22 | 45.33 | 42.33 | 51.78 |
Global MMLU (CF) | 28.57 | 28.81 | 27.67 | 29.37 | 31.85 | |
Flores - 200 (5 - 樣本) | 40.22 | 39.44 | 44.43 | 35.82 | 39.76 | |
中文 | Belebele | 43.78 | 44.56 | 49.56 | 48.78 | 53.22 |
Global MMLU (CF) | 36.16 | 33.79 | 39.57 | 38.56 | 44.55 | |
Flores - 200 (5 - 樣本) | 29.17 | 33.21 | 31.89 | 25.70 | 32.50 | |
俄語 | Belebele | 47.44 | 45.89 | 47.44 | 45.22 | 51.44 |
Global MMLU (CF) | 36.51 | 32.47 | 34.52 | 34.83 | 38.80 | |
Flores - 200 (5 - 樣本) | 47.13 | 48.74 | 50.74 | 54.70 | 60.53 |
訓練
模型
- 架構:Transformer解碼器
- 預訓練標記:11T
- 精度:bfloat16
軟件與硬件
開放資源
以下是包含所有訓練細節的信息圖:
- 預訓練使用的數據集可以在這個 集合 中找到,訓練中和訓練後使用的數據集將在稍後上傳。
- 訓練和評估配置及代碼可以在 huggingface/smollm 倉庫中找到。
🔧 技術細節
SmolLM3是一個僅解碼器的Transformer模型,使用了GQA和NoPE(比例為3:1)。它在11.2T標記上進行了預訓練,採用了包括網絡、代碼、數學和推理數據的分階段課程。訓練後包括在140B推理標記上進行中期訓練,隨後進行監督微調,並通過錨定偏好優化(APO)進行對齊。
📄 許可證
⚠️ 侷限性
SmolLM3可以生成各種主題的文本,但生成的內容可能並不總是事實準確、邏輯一致,或者不受訓練數據中存在的偏差影響。這些模型應作為輔助工具使用,而不是信息的最終來源。用戶應始終驗證重要信息,並批判性地評估生成的任何內容。



