说明文档
SmolLM3

目录
模型概述
SmolLM3 是一个拥有 30 亿参数的语言模型,旨在突破小模型的边界。它支持 6 种语言、高级推理和长上下文。SmolLM3 是一个完全开放的模型,在 3B-4B 规模上提供强大的性能。

该模型是一个仅解码器的 Transformer,采用 GQA 和 NoPE(比例为 3:1),在 11.2T token 上进行了预训练,使用了包含网页、代码、数学和推理数据的阶段性课程。后训练包括在 140B 推理 token 上进行的中期训练,随后是监督微调和通过锚定偏好优化(APO)进行的对齐。
主要特性
- 针对混合推理优化的指令模型
- 完全开放的模型:开放权重 + 完整的训练细节,包括公开的数据混合方案和训练配置
- 长上下文:在 64k 上下文上训练,使用 YARN 外推支持多达 128k token
- 多语言:原生支持 6 种语言(英语、法语、西班牙语、德语、意大利语和葡萄牙语)
更多详情请参阅我们的博客文章:https://hf.co/blog/smollm3
使用方法
Transformers.js
import { pipeline, TextStreamer } from \"@huggingface/transformers\";
// Create a text generation pipeline
const generator = await pipeline(
\"text-generation\",
\"HuggingFaceTB/SmolLM3-3B-ONNX\",
{ dtype: \"q4f16\", device: \"webgpu\" },
);
// Define the model inputs
const thinking = true; // Whether the model should think before answering
const messages = [
{
role: \"system\",
content: \"You are SmolLM, a language model created by Hugging Face.\"
+ (thinking ? \"/think\" : \"/no_think\")
},
{ role: \"user\", content: \"Solve the equation x^2 - 3x + 2 = 0\" },
];
// Generate a response
const output = await generator(messages, {
max_new_tokens: 1024,
streamer: new TextStreamer(generator.tokenizer, { skip_prompt: true, skip_special_tokens: true }),
});
console.log(output[0].generated_text.at(-1).content);
ONNXRuntime
from transformers import AutoConfig, AutoTokenizer
import onnxruntime
import numpy as np
from huggingface_hub import hf_hub_download
# 1. Load config, processor, and model
model_id = \"HuggingFaceTB/SmolLM3-3B-ONNX\"
config = AutoConfig.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model_path = hf_hub_download(repo_id=model_id, filename=\"onnx/model_q4.onnx\") # Download the graph
hf_hub_download(repo_id=model_id, filename=\"onnx/model_q4.onnx_data\") # Download the model weights
decoder_session = onnxruntime.InferenceSession(model_path)
## Set config values
num_key_value_heads = config.num_key_value_heads
head_dim = config.hidden_size // config.num_attention_heads
num_hidden_layers = config.num_hidden_layers
eos_token_id = config.eos_token_id
# 2. Prepare inputs
messages = [
{ \"role\": \"system\", \"content\": \"/no_think\" },
{ \"role\": \"user\", \"content\": \"What is the capital of France?\" },
]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors=\"np\")
input_ids = inputs['input_ids']
attention_mask = inputs['attention_mask']
batch_size = input_ids.shape[0]
past_key_values = {
f'past_key_values.{layer}.{kv}': np.zeros([batch_size, num_key_value_heads, 0, head_dim], dtype=np.float32)
for layer in range(num_hidden_layers)
for kv in ('key', 'value')
}
position_ids = np.tile(np.arange(0, input_ids.shape[-1]), (batch_size, 1))
# 3. Generation loop
max_new_tokens = 1024
generated_tokens = np.array([[]], dtype=np.int64)
for i in range(max_new_tokens):
logits, *present_key_values = decoder_session.run(None, dict(
input_ids=input_ids,
attention_mask=attention_mask,
position_ids=position_ids,
**past_key_values,
))
## Update values for next generation loop
input_ids = logits[:, -1].argmax(-1, keepdims=True)
attention_mask = np.concatenate([attention_mask, np.ones_like(input_ids, dtype=np.int64)], axis=-1)
position_ids = position_ids[:, -1:] + 1
for j, key in enumerate(present_key_values):
past_key_values[key] = present_key_values[j]
generated_tokens = np.concatenate([generated_tokens, input_ids], axis=-1)
if (input_ids == eos_token_id).all():
break
## (Optional) Streaming
print(tokenizer.decode(input_ids[0]), end='', flush=True)
print()
# 4. Output result
print(tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0])
评估结果
在本节中,我们报告 SmolLM3 模型的评估结果。除非另有说明,所有评估均为零样本,我们使用 lighteval 运行它们。
我们以粗体突出显示最佳分数,以<u>下划线</u>突出显示第二佳分数。
指令模型
无扩展思考
非推理模型和推理模型在非思考模式下的评估结果。我们以粗体突出显示最佳和第二佳分数。
| 类别 | 指标 | SmoLLM3-3B | Qwen2.5-3B | Llama3.1-3B | Qwen3-1.7B | Qwen3-4B |
|---|---|---|---|---|---|---|
| 高中数学竞赛 | AIME 2025 | <u>9.3</u> | 2.9 | 0.3 | 8.0 | 17.1 |
| 数学问题求解 | GSM-Plus | 72.8 | <u>74.1</u> | 59.2 | 68.3 | 82.1 |
| 竞赛编程 | LiveCodeBench v4 | <u>15.2</u> | 10.5 | 3.4 | 15.0 | 24.9 |
| 研究生级别推理 | GPQA Diamond | <u>35.7</u> | 32.2 | 29.4 | 31.8 | 44.4 |
| 指令遵循 | IFEval | 76.7 | 65.6 | 71.6 | <u>74.0</u> | 68.9 |
| 对齐 | MixEval Hard | 26.9 | <u>27.6</u> | 24.9 | 24.3 | 31.6 |
| 工具调用 | BFCL | <u>92.3</u> | - | <u>92.3</u> * | 89.5 | 95.0 |
| 多语言问答 | Global MMLU | <u>53.5</u> | 50.54 | 46.8 | 49.5 | 65.1 |
(*): 这是一个工具调用微调版本
扩展思考
SmolLM3 和 Qwen3 模型在推理模式下的评估结果:
| 类别 | 指标 | SmoLLM3-3B | Qwen3-1.7B | Qwen3-4B |
|---|---|---|---|---|
| 高中数学竞赛 | AIME 2025 | <u>36.7</u> | 30.7 | 58.8 |
| 数学问题求解 | GSM-Plus | <u>83.4</u> | 79.4 | 88.2 |
| 竞赛编程 | LiveCodeBench v4 | 30.0 | <u>34.4</u> | 52.9 |
| 研究生级别推理 | GPQA Diamond | <u>41.7</u> | 39.9 | 55.3 |
| 指令遵循 | IFEval | 71.2 | <u>74.2</u> | 85.4 |
| 对齐 | MixEval Hard | 30.8 | <u>33.9</u> | 38.0 |
| 工具调用 | BFCL | <u>88.8</u> | <u>88.8</u> | 95.5 |
| 多语言问答 | Global MMLU | <u>64.1</u> | 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 | <u>75.52</u> | 60.52 | 74.37 |
| ARC-CF (平均) | 65.61 | 59.81 | 58.58 | 55.88 | <u>62.11</u> | |
| Winogrande | 58.88 | 61.41 | 58.72 | 57.06 | <u>59.59</u> | |
| CommonsenseQA | <u>55.28</u> | 49.14 | 60.60 | 48.98 | 52.99 | |
| 知识与理解 | MMLU-CF (平均) | <u>44.13</u> | 42.93 | 41.32 | 39.11 | 47.65 |
| MMLU Pro CF | <u>19.61</u> | 16.66 | 16.42 | 18.04 | 24.92 | |
| MMLU Pro MCF | <u>32.70</u> | 31.32 | 25.07 | 30.39 | 41.07 | |
| PIQA | 78.89 | 78.35 | <u>78.51</u> | 75.35 | 77.58 | |
| OpenBookQA | 40.60 | 40.20 | <u>42.00</u> | 36.40 | 42.40 | |
| BoolQ | 78.99 | 73.61 | <u>75.33</u> | 74.46 | 74.28 | |
| 数学与代码 | ||||||
| 编码与数学 | HumanEval+ | 30.48 | 34.14 | 25.00 | <u>43.29</u> | 54.87 |
| MBPP+ | 52.91 | 52.11 | 38.88 | <u>59.25</u> | 63.75 | |
| MATH (4-shot) | <u>46.10</u> | 40.10 | 7.44 | 41.64 | 51.20 | |
| GSM8k (5-shot) | 67.63 | <u>70.13</u> | 25.92 | 65.88 | 74.14 | |
| 长上下文 | ||||||
| Ruler 32k | 76.35 | 75.93 | <u>77.58</u> | 70.63 | 83.98 | |
| Ruler 64k | <u>67.85</u> | 64.90 | 72.93 | 57.18 | 60.29 | |
| Ruler 128k | 61.03 | <u>62.23</u> | 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 | <u>61.00</u> |
| Belebele | 51.00 | <u>51.55</u> | 49.22 | 49.44 | 55.00 | |
| Global MMLU (CF) | <u>38.37</u> | 34.22 | 33.71 | 34.94 | 41.80 | |
| Flores-200 (5-shot) | 62.85 | 61.38 | <u>62.89<u/u> | 58.68 | 65.76 | |
| 西班牙语 | MLMM Hellaswag | 65.85 | 58.25 | 59.39 | 52.40 | <u>61.85</u> |
| Belebele | 47.00 | <u>48.88</u> | 47.00 | 47.56 | 50.33 | |
| Global MMLU (CF) | <u>38.51</u> | 35.84 | 35.60 | 34.79 | 41.22 | |
| Flores-200 (5-shot) | <u>48.25</u> | 50.00 | 44.45 | 46.93 | 50.16 | |
| 德语 | MLMM Hellaswag | 59.56 | 49.99 | 53.19 | 46.10 | <u>56.43</u> |
| Belebele | <u>48.44</u> | 47.88 | 46.22 | 48.00 | 53.44 | |
| Global MMLU (CF) | <u>35.10</u> | 33.19 | 32.60 | 32.73 | 38.70 | |
| Flores-200 (5-shot) | 56.60 | 50.63 | <u>54.95</u> | 52.58 | 50.48 | |
| 意大利语 | MLMM Hellaswag | 62.49 | 53.21 | 54.96 | 48.72 | <u>58.76</u> |
| Belebele | <u>46.44</u> | 44.77 | 43.88 | 44.00 | 48.78 | |
| Global MMLU (CF) | <u>36.99</u> | 33.91 | 32.79 | 35.37 | 39.26 | |
| Flores-200 (5-shot) | <u>52.65<u/> | 54.87 | 48.83 | 48.37 | 49.11 | |
| 葡萄牙语 | MLMM Hellaswag | 63.22 | 57.38 | 56.84 | 50.73 | <u>59.89</u> |
| Belebele | 47.67 | 49.22 | 45.00 | 44.00 | 50.00 | |
| Global MMLU (CF) | <u>36.88</u> | 34.72 | 33.05 | 35.26 | 40.66 | |
| Flores-200 (5-shot) | <u>60.93</u> | 57.68 | 54.28 | 56.58 | 63.43 |
该模型还接受过阿拉伯语(标准)、中文和俄语数据的训练,但与上述 6 种语言相比,这些语言的 token 数量较少。我们报告这些语言的性能仅供参考。
| 类别 | 指标 | SmolLM3 3B Base | Qwen2.5-3B | Llama3.2 3B | Qwen3 1.7B Base | Qwen3 4B Base |
|---|---|---|---|---|---|---|
| 其他支持语言 | ||||||
| 阿拉伯语 | Belebele | 40.22 | 44.22 | <u>45.33</u> | 42.33 | 51.78 |
| Global MMLU (CF) | 28.57 | 28.81 | 27.67 | <u>29.37</u> | 31.85 | |
| Flores-200 (5-shot) | <u>40.22</u> | 39.44 | 44.43 | 35.82 | 39.76 | |
| 中文 | Belebele | 43.78 | 44.56 | <u>49.56</u> | 48.78 | 53.22 |
| Global MMLU (CF) | 36.16 | 33.79 | <u>39.57</u> | 38.56 | 44.55 | |
| Flores-200 (5-shot) | 29.17 | 33.21 | 31.89 | 25.70 | <u>32.50</u> | |
| 俄语 | Belebele | <u>47.44</u> | 45.89 | <u>47.44</u> | 45.22 | 51.44 |
| Global MMLU (CF) | <u>36.51</u> | 32.47 | 34.52 | 34.83 | 38.80 | |
| Flores-200 (5-shot) | 47.13 | 48.74 | 50.74 | <u>54.70</u> | 60.53 |
训练
模型
- 架构: Transformer 解码器
- 预训练 token: 11T
- 精度: bfloat16
软件与硬件
开放资源
这是一张包含所有训练细节的信息图
- 用于预训练的数据集可以在这个合集中找到,用于中期训练和后训练的数据集将稍后上传
- 训练和评估配置及代码可以在 huggingface/smollm 仓库中找到。

局限性
SmolLM3 可以生成各种主题的文本,但生成的内容可能并不总是事实准确、逻辑一致,或者可能存在训练数据中的偏见。这些模型应作为辅助工具使用,而不是确定性的信息来源。用户应始终核实重要信息,并批判性地评估任何生成的内容。
许可证
Eterna2/SmolLM3-3B-ONNX
作者 Eterna2
创建时间: 2025-10-28 15:49:50+00:00
更新时间: 2025-07-14 21:57:00+00:00
在 Hugging Face 上查看