SmolLM3 發布:多語言、長上下文 3B 推理模型

Hugging Face 推出了 SmolLM3,一款 3B 參數的開源語言模型,旨在兼具效率與高效能。SmolLM3 的表現優於 Llama-3.2-3B 與 Qwen2.5-3B,且在較大的 4B 模型中仍具競爭力,提供雙模式推理功能,使用者可在明確思考與直接回答之間切換。

架構與預訓練

SmolLM3 採用具有共享嵌入的 transformer 解碼器架構,並加入多項修改以優化效率與長上下文效能:

  • 分組查詢注意力 (GQA):將多頭注意力替換為 4 個組,以在推理時減少 KV 快取大小,且不犧牲效能。
  • NoPE:選擇性地從每第 4 層移除旋轉位置嵌入,以提升長上下文效能,同時保留短上下文能力。
  • 文件內遮蔽:防止單一訓練序列中不同文件的標記相互注意,確保更穩定的長上下文訓練。
  • 訓練穩定性:從嵌入層移除權重衰減,以穩定訓練動態。

三階段預訓練

該模型使用三階段策略在 11.2T 令牌上進行訓練,以逐步提升領域表現:

  1. 穩定階段(0T 至 8T 令牌):聚焦於一般能力,混合比例為 85% 網路(含 12% 多語言)、12% 程式碼與 3% 數學。
  2. 穩定階段(8T 至 10T 令牌):提升高品質的數學與程式碼資料,比例調整為 75% 網路、15% 程式碼與 10% 數學。
  3. 衰減階段(10T 至 11.1T 令牌):進一步上抽樣數學與程式碼,最終比例為 63% 網路、24% 程式碼與 13% 數學,同時引入指令與推理資料集,如 OpenMathReasoning。

中期訓練:上下文與推理

在主要預訓練之後,SmolLM3 進行了「中期訓練」,以在最終監督式微調前增強特定能力。

長上下文擴展

為了擴展上下文視窗,模型在兩個階段額外訓練了 100B 令牌:從 4k 轉至 32k(RoPE theta 1.5M),再從 32k 轉至 64k(RoPE theta 5M)。透過在推理時使用 YARN 進行外推,SmolLM3 可處理最高 128k 的上下文。

推理適應

SmolLM3 使用來自 OpenThoughts3-1.2M 的 35B 令牌一般推理資料以及 NVIDIA 的 Llama-Nemotron-Post-Training-Dataset-v1.1 子集進行訓練。此階段旨在教導模型在各領域進行一般推理,而非針對特定科目(如數學或程式碼)。

後訓練與雙模式推理

SmolLM3 是一個雙指令模型,支援推理(/think)與非推理(/no_think)兩種模式。

監督式微調(SFT)

SFT 資料集包含 1.8B 令牌(1B 非推理,0.8B 推理)。為填補特定領域推理痕跡的缺口,Hugging Face 透過以非推理提示在推理模式下詢問 Qwen3-32B 產生合成資料。此舉提升了多輪對話與多語言的表現。

使用錨定偏好優化(APO)進行對齊

對齊使用了錨定偏好優化(APO),這是直接偏好優化(DPO)更穩定的變體。此過程在非推理模式下使用 Tulu3 偏好資料集,在推理模式下使用合成配對(從 Qwen3-32B 中選擇,從 Qwen3-0.6B 中拒絕)。

模型合併以恢復

由於推理中期訓練與 APO 階段導致長上下文基準(RULER)表現下降,Hugging Face 使用 MergeKit 進行線性合併。他們將 APO 模型「湯」與中期訓練檢查點(權重分別為 0.9 與 0.1)結合,恢復了基礎模型在最高 128k 令牌的 RULER 分數。

效能評估

基礎模型

SmolLM3 在涵蓋知識、推理、數學與程式碼的 12 項基準(包括 HellaSwag、ARC 與 GSM8K)中持續優於其他 3B 模型。它在 4B 模型如 Qwen3-4B 與 Gemma3-4B 中亦具競爭力,且在五大歐洲主要語言上展現強勁的多語言表現。

指令與推理模型

  • 非推理模式:SmolLM3 優於 Llama-3.2-3B Instruct 與 Qwen2.5-3B Instruct,將其定位為大型推理模型的高效替代方案。
  • 推理模式:啟用延伸思考後,模型在複雜任務上顯著提升。例如,AIME 2025 分數從 9.3%(非推理)提升至 36.7%(推理),LiveCodeBench 分數則從 15.2% 提升至 30.0%。

本地實作與使用

SmolLM3 需要 transformers v4.53.0 或更新版本。使用者可透過系統提示控制推理模式:

  • 延伸思考:在系統提示中加入 /think 標誌。
  • 直接回答:在系統提示中加入 /no_think 標誌。

模型亦支援透過聊天模板中的 xml_tools(標準)與 python_tools(Python 函式片段)參數呼叫工具。

Sources