模型简介
模型特点
模型能力
使用案例
🚀 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可以生成各种主题的文本,但生成的内容可能并不总是事实准确、逻辑一致,或者不受训练数据中存在的偏差影响。这些模型应作为辅助工具使用,而不是信息的最终来源。用户应始终验证重要信息,并批判性地评估生成的任何内容。



