SmolLM3: 小型、多語言、長上下文推理器

釋出於 2025 年 7 月 8 日
在 GitHub 上更新

隨著使用者尋求能夠高效部署的強大模型,小型語言模型變得越來越重要。社群已經開發出了一系列功能強大、令人著迷的小型模型,每個都在這個規模上突破了可能的界限。透過 SmolLM3,我們很高興能貢獻一個全新的、具有競爭力的完全開放的 3B 模型。

SmolLM3 位於效率的最佳點。我們的 3B 模型效能優於 Llama-3.2-3B 和 Qwen2.5-3B,同時與更大的 4B 替代品(Qwen3 和 Gemma3)保持競爭力。除了效能資料,我們還將分享如何使用公共資料集和訓練框架構建它。


模型摘要

  • 3B 模型,在 11T token 上訓練,在 3B 規模上達到最新技術水平,並與 4B 模型具有競爭力。
  • 具有雙模式推理指令模型,支援 think/no_think 模式。
  • 支援 6 種語言:英語、法語、西班牙語、德語、義大利語和葡萄牙語的多語言支援
  • 使用 NoPE 和 YaRN,長上下文可達 128k。

完整配方:我們正在釋出 SmolLM3,並附帶我們的工程藍圖。它包括架構細節、精確的資料混合,展示了我們如何透過三階段預訓練方法逐步提升跨領域的效能,以及構建混合推理模型的方法。通常,實現這些結果需要數月的時間進行逆向工程。相反,我們提供了完整的方法。


無論您是構建自己的模型還是想了解在這個規模上是什麼驅動效能,這份藍圖都展示了實現具有競爭力 3B 效能背後的工程故事。

讓我們來看看預訓練階段。

預訓練

SmolLM3 改變了其前身的架構和資料混合。我們先來看看架構和訓練配置!

架構和訓練細節


SmolLM3 沿用 SmolLM2 類似的Transformer解碼器架構,並採用共享嵌入,以 Llama 架構為基礎,並進行了一些關鍵修改,以最佳化效率和長上下文效能。

分組查詢注意力 (GQA): 我們用 4 個組的分組查詢注意力取代了多頭注意力。我們對在 FineWeb-Edu 的 100B token 上訓練的 3B 模型進行消融實驗表明,GQA 在顯著減少推理過程中 KV 快取大小的同時,與多頭注意力的效能相匹配。

NoPE: 我們實現了“RoPE 到 NoRoPE 再回來:一種新的混合注意力策略”(Yang 等人,2025 年)中的 NoPE,選擇性地從每第 4 層移除旋轉位置嵌入。這種方法在不影響短上下文能力的情況下提高了長上下文效能,這已透過我們的消融實驗證實。

文件內掩碼: 在訓練過程中,我們使用注意力掩碼來確保同一訓練序列中不同文件的 token 之間不會相互關注。與 Llama 3 類似,這有助於更快、更穩定的長上下文訓練,同時保持短上下文效能。

訓練穩定性: 按照 OLMo 2 的做法,我們從嵌入層中移除權重衰減以提高訓練穩定性。這項修改有助於更穩定的訓練動態,嵌入範數在訓練期間自然地穩定在更健康的數值,而不會影響我們消融實驗中的整體效能。

所有這些更改都透過使用在 FineWeb-Edu 的 100B token 上訓練的相同 3B 架構進行的消融實驗進行了驗證,確保每次修改都能夠提高效能或保持效能,同時提供其他好處。

訓練配置:我們使用 2.36M token 的全域性批大小,序列長度為 4096,學習率為 2e-4,並使用 AdamW 最佳化器(beta1:0.9,beta2:0.95),權重衰減為 0.1,梯度裁剪為 1。我們使用 WSD(Warmup-Stable-Decay)排程器,具有 2000 個預熱步,並在最後 10% 的訓練步中線性衰減到 0。我們使用 nanotron 框架進行訓練,datatrove 進行資料處理,lighteval 進行評估。該模型在 384 個 H100 GPU 上訓練了 24 天。您可以在下圖看到分散式訓練設定。


除了架構更改,我們還對訓練配方進行了消融和改進。讓我們仔細看看。

資料混合和訓練階段

沿襲 SmolLM2 的多階段方法,我們使用三階段訓練策略在 11.2T token 上訓練 SmolLM3,該策略混合了網路、數學和程式碼資料,並不斷調整比例。我們對在 50B 到 100B token 上訓練的 3B 模型進行了廣泛的消融實驗,以確定資料混合和比例。


預訓練包括這些階段,也如上圖所示:

  • 第一階段:穩定階段(0T → 8T token)這個基礎階段透過我們的核心資料集混合建立了強大的通用能力。
    • 網路:85% (12% 多語言) - FineWeb-Edu, DCLM, FineWeb2 和 FineWeb2-HQ
    • 程式碼:12% - The Stack v2(16 種程式語言)、StarCoder2 拉取請求、Jupyter 和 Kaggle 筆記本、GitHub 問題以及 StackExchange。
    • 數學:3% - FineMath3+ 和 InfiWebMath3+
  • 第二階段:穩定階段(8T → 10T token)我們引入了更高質量的數學和程式碼資料集,同時保持了良好的網路覆蓋率。
    • 網路:75%(12% 多語言)
    • 程式碼:15% - 增加了 Stack-Edu
    • 數學:10% - 引入了 FineMath4+、InfiWebMath4+ 和 MegaMath(包括 Qwen 問答、Pro 合成重寫和文字-程式碼交錯塊)
  • 第三階段:衰減階段(10T → 11.1T token)最後階段進一步增加了數學和程式碼資料取樣。
    • 網路:63%(12% 多語言)
    • 程式碼:24% - 高質量程式碼資料取樣增加
    • 數學:13% - 數學資料取樣增加,並引入了指令和推理資料集,例如 OpenMathReasoning

透過這些階段和混合,我們為基礎模型實現了非常有競爭力的效能。更多內容請參見評估部分。帶有確切資料權重的 nanotron 訓練配置可以在這裡找到。我們還將分享我們的訓練日誌以及中間檢查點。

在主要預訓練之後,我們在中期訓練階段改進了模型的長上下文和推理能力。

中期訓練

我們將長上下文適應和推理適應稱為“中期訓練”。它們比主要的預訓練短得多,但仍然具有一定的通用性,旨在改進模型在這兩個領域的能力。我們首先來看看長上下文訓練。

長上下文擴充套件


在主要預訓練之後,我們對 SmolLM3 進行了額外的 100B token 訓練,以擴充套件其上下文長度。我們分兩個階段順序擴充套件了上下文視窗,每個階段 50B token:首先從 4k 轉換到 32k 上下文,RoPE theta 增加到 1.5M;然後從 32k 轉換到 64k 上下文,RoPE theta 增加到 5M。這兩個階段都上取樣了數學、程式碼和推理資料。在消融實驗中,我們發現上取樣特定的長上下文資料(如程式碼倉庫、書籍和長網頁,超出我們混合中自然較長的樣本)並未進一步提升 RULER 和 HELMET 基準測試的效能。使用 NoPE 並以更長序列和增加的 RoPE theta 值訓練衰減混合就足以達到 64k 的競爭性長上下文效能。

根據 Qwen2.5,我們使用 YARN 超出訓練上下文長度進行推斷。在推理過程中,模型可以處理多達 128k 的上下文(比 64k 訓練長度擴充套件 2 倍)。

中期訓練推理

在擴充套件模型上下文長度後,我們在中期訓練階段對其進行訓練,以整合推理能力。中期訓練階段與預訓練和後訓練階段的主要區別在於,我們針對的是一種通用能力,而不是專注於特定領域。在我們的案例中,我們希望訓練模型進行推理,而不針對特定領域,例如數學或計算機程式碼。

我們的中期訓練資料集包含來自 Open Thought 的 OpenThoughts3-1.2M 和 NVIDIA 的 Llama-Nemotron-Post-Training-Dataset-v1.1 中帶有 R1 推理軌跡的子集,共計 35B token。我們使用了 ChatML 聊天模板和 packed 封裝,以避免為模型提供過多結構。我們對模型進行了 4 個週期(約 140B token)的訓練,並將檢查點用於後續的 SFT 階段。

後訓練

DeepSeek R1Qwen3 等推理模型的釋出,證明了當模型能夠進行顯式推理時所展現的強大能力。然而,社群仍然缺乏完全開放的配方,利用公共資料集來構建同時支援推理和非推理模式的雙指令模型。大多數現有方法涉及複雜的強化學習過程和專有資料集,這使得研究人員難以復現和在此基礎上進行研究。

在本節中,我們解釋瞭如何應對這些挑戰,並分享了構建雙指令模型的完整配方。我們詳細介紹瞭如何透過精心設計的訓練流程平衡推理和非推理模式之間的效能,該流程包括通用推理能力的中期訓練、合成數據生成的監督微調以及使用錨定偏好最佳化 (APO)(DPO 的最新變體)進行對齊。


構建聊天模板

在深入研究訓練方法之前,瞭解使用者如何與我們的雙模式模型互動至關重要。聊天模板充當了在推理和非推理模式之間無縫切換的介面,其設計直接影響我們的訓練資料格式和模型行為。SmolLM3 的聊天模板允許使用者在對話期間控制推理模式。使用者可以透過在系統提示中分別包含 /think/no_think 標誌來啟用推理或非推理模式。在非推理模式下,我們用空的思考塊預填充模型的響應,類似於 Qwen3,以確保直接回答而無需明確的推理。

SmolLM3 支援工具呼叫,其聊天模板包含兩個獨立的工具描述部分:XML 工具和 Python 工具。這種特定的分類在我們的實驗中被證明對模型準確解釋每種格式的工具定義有益。

聊天模板為兩種推理模式提供預設系統訊息,以及一個包含日期、知識截止日期和當前推理模式的元資料部分。使用者可以透過提供帶有 system 角色的系統訊息來替換預設系統訊息。元資料部分可以透過在系統提示中使用 /system_override 標誌來排除,從而為特定用例提供靈活性。

監督微調

在推理中期訓練階段之後,我們對模型進行了監督微調 (SFT),以在數學、程式碼、通用推理、指令遵循、多語言和工具呼叫等推理和非推理模式下整合能力。訓練雙模式模型需要仔細平衡資料混合,以在所有目標域的兩種模式下保持強大的效能。為了評估 SmolLM3 在整個訓練過程中的效能,我們跟蹤了以下領域:數學、程式碼、通用推理、指令遵循和多語言。

在構建推理模式資料集時,我們遇到的主要挑戰是某些領域缺乏包含推理痕跡的資料集。為了解決這個問題,我們透過使用現有非推理資料集中的提示來提示 Qwen3-32B 在推理模式下生成合成資料。這使我們能夠提高模型在推理模式下最初表現不佳的領域(例如多輪對話、多語言和日常對話)的效能。


我們的最終資料混合是經過大量消融實驗的結果,這些實驗旨在探索推理和非推理 token 的最佳比例以及每種模式中的組成。最終的 SFT 資料集包含 1.8B token:非推理模式下 1B,推理模式下 0.8B,包括 12 個非推理資料集和 10 個包含推理痕跡的資料集。我們使用 BFD(最佳擬合遞減)打包訓練了 4 個 epoch(約 8B token),其中損失對使用者輪次和工具呼叫結果進行了掩碼。

我們將釋出此資料混合以及我們的完整訓練指令碼,以使社群能夠復現並在此基礎上進行工作。

使用錨定偏好最佳化 (APO) 進行離策略模型對齊

在 SFT 步驟之後,我們使用 Tulu3 偏好資料集(用於非推理模式)和新的合成偏好對(用於推理模式,我們從 Qwen3-32B 和 Qwen3-0.6B 生成)的組合進行了一輪模型對齊。為了確保非思考資料集覆蓋所有領域,我們生成了互補的思考模式偏好對。我們選擇了 Qwen3-32B 生成的結果作為“選定”,並將 Qwen3-0.6B 的響應作為“拒絕”,以與錨定偏好最佳化進行對齊。


錨定偏好最佳化 (APO)直接偏好最佳化 (DPO) 的一個變體,它提供了更穩定的最佳化目標。在 DPO 中,獎勵函式 r_θ(x,y) 衡量訓練期間序列機率與訓練開始時模型(參考模型)機率的對數比


這裡的 β 控制著被最佳化的模型相對於參考模型能夠改變的程度。DPO 損失優化了提示 x、選定的 y_w 和拒絕的 y_l 響應的三元組


APO 目標已被證明更加穩定,我們還在內部消融實驗中觀察到更高的下游效能。


雖然下游評估顯示數學、科學、指令遵循、編碼、聊天和多語言任務都有所改進,但我們觀察到 RULER 等長上下文基準測試的效能下降。我們將這種下降追溯到推理中期訓練階段,該階段對推理能力的關注影響了長上下文效能。此外,APO 訓練資料限制在 24k token,因為我們絕大多數推理資料集的長度都低於此值。

為了緩解這種效能下降,我們探索了模型合併作為一種解決方案。

模型合併

模型合併是一種流行且強大的技術,它允許結合不同模型的優點,而無需整合計算開銷或額外的訓練。我們使用 MergeKit 庫執行模型合併,因為它包含了多種合併方法,包括線性合併和非線性合併。

我們的合併方法包含兩個步驟:

  1. 獲取每個 APO 檢查點並建立模型“湯”。
  2. 將模型湯與具有強大長內容效能的中期訓練檢查點結合。對 APO 模型湯和中期訓練檢查點分別採用 0.9 和 0.1 的權重進行線性合併,取得了最佳效能。我們能夠恢復基礎模型在高達 128k token 上下文的 RULER 分數。

由此產生的模型是我們今天釋出的檢查點。它在各種任務中保持了效能。現在讓我們來看看該模型以及基礎模型的評估結果。

評估

我們評估了基礎模型和指令模型在推理和非推理模式下的效能。我們首先介紹基礎模型的效能!

基礎模型

下圖顯示了 SmolLM3 在評估知識、推理、數學和編碼能力的 12 個流行基準測試中的勝率。SmolLM3 始終優於其他 3B 模型,並與包括 Qwen3-4B 和 Gemma3-4B 在內的更大 4B 模型達到競爭效能。

勝率評估基準:HellaSwag、ARC、Winogrande、CommonsenseQA、MMLU-CF、MMLU Pro CF、PIQA、OpenBookQA、GSM8K、MATH、HumanEval+、MBPP+


SmolLM3 在知識和推理基準測試(HellaSwag、ARC、BoolQ)中名列第一或第二,展示了在這些核心能力方面的強大效能。數學和編碼效能在 3B 級別中具有競爭力。Ruler 64k 上的長上下文效能表明模型可以有效處理擴充套件序列。


該模型在 Global MMLU、MLMM HellaSwag、Flores-200、Belebele 等多語言基準測試中表現出強大的多語言效能,這些測試評估了知識、常識推理、文字理解和翻譯。這表明 SmolLM3 在英語之外的語言中也能保持一致的效能。


總而言之,基礎模型在許多領域表現非常出色。讓我們看看這如何轉化為指令模型的效能。

雙指令/推理模型

由於 SmolLM3 具有指令模式和推理模式,因此我們需要在兩種模式下評估模型,並與具有相同功能的模型進行比較。

無擴充套件思考評估

我們評估了 SmolLM3 與其他 3B 非推理模型在多個基準測試中的表現,並將其與 Qwen3 推理模型在無思考模式下的表現進行比較。如圖所示,SmolLM3 優於其他 3B 非推理模型,包括 Llama3.2 3B Instruct 和 Qwen2.5 3B Instruct,並在推理模型之間處於效率最佳點,顯著優於 Qwen3 1.7B,同時以更低的計算成本接近 4B 模型的效能。


因此,該指令模型正好位於效能和成本的帕累託前沿。讓我們看看推理模型的表現如何!

擴充套件思考評估

在啟用擴充套件思考模式評估 SmolLM3 的推理能力時,模型在大多數基準測試中都比其非推理版本有顯著改進。我們觀察到在 AIME 2025(36.7% vs 9.3%)、LiveCodeBench 上的競爭性程式設計(30.0% vs 15.2%)和 GPQA Diamond 上的研究生級推理(41.7% vs 35.7%)等具有挑戰性的任務中取得了顯著的進步。

雖然 Qwen3 4B 通常在思考和非思考模式下都取得了最高分,但 SmolLM3 在 3B 引數類別中表現出具有競爭力的效能,尤其擅長數學推理和複雜問題解決任務。模型的雙模式能力允許使用者在無需推理的更快推理或需要擴充套件思考的更徹底分析之間進行選擇。


那麼最後一個問題是:你如何使用這個模型?

如何本地執行

SmolLM3 的建模程式碼在 transformers v4.53.0 中可用,因此請確保升級您的 transformers 版本。您也可以使用最新的 vllm 載入模型,它使用 transformers 作為後端。

pip install -U transformers

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=True,
)
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))

我們建議在取樣引數中設定 temperature=0.6top_p=0.95

啟用和停用擴充套件思考模式

我們預設啟用擴充套件思考功能,因此上述示例將生成帶有推理軌跡的輸出。為了選擇是否啟用,您可以透過系統提示提供 /think/no_think 標誌,如下面的程式碼片段所示,以停用擴充套件思考。生成帶有擴充套件思考的響應的程式碼將相同,只是系統提示應包含 /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,
)

Agentic 用法

SmolLM3 支援工具呼叫!只需在引數 xml_tools(用於標準工具呼叫)或 python_tools(用於在 片段中呼叫 Python 函式等工具)下傳遞您的工具列表。

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]))

結論

我們釋出了 SmolLM3,一個小型、長上下文、多語言的推理器,支援高達 128k 的上下文。除了模型檢查點,我們還發布了完整的訓練配方,包括預訓練、中期訓練、後訓練和合成資料生成以及資料集(即將釋出)。我們希望這個模型能對社群有所幫助,並且這個配方能讓其他團隊在其基礎上進行改進。

資源

社群

漂亮!

太棒了,太棒了,太棒了!

難以置信!謝謝。

寫得真好。
絕對要新增到週末閱讀清單中!

感謝分享。

做得好!我有一個問題/好奇。在訓練過程中,將模型拆分到兩個 GPU 上有什麼好處?(您提到在每個 8-GPU 節點上使用張量並行(TP)為 2,資料並行(DP)為 4)。我猜模型足夠小,可以放在單個 GPU 上?我本以為在這種情況下,最有效的實現方式是使用 DP=8?

·
文章作者

模型無法適應每個 GPU 進行訓練(不進行零/啟用重新計算),並且 TP=2 對吞吐量影響不大,因此我們選擇了這個解決方案。
您可以在這裡找到更多關於分散式預訓練的資訊:https://huggingface.co/spaces/nanotron/ultrascale-playbook

太棒了!!!

幹得好

哇,太棒了,文章也寫得非常精彩!

感謝分享!!!
我可能發現了一個小錯誤,“為了確保非思考資料集中的所有域都得到充分覆蓋”是否應該改為“為了確保思考資料集中的所有域都得到充分覆蓋”?

我真的很喜歡閱讀如此詳細的模型報告,它討論了架構、資料和精確引數等對機器學習工程師非常有用的技術細節。我甚至比模型(也很好哈哈)更喜歡這份報告。

感謝分享!!

可能無關的問題,圖表顯示 Qwen3 1.7B 有 2B 引數。這正確嗎?

·

模型頁面顯示了這就是我們犯這個錯誤的原因
Capture d’écran 2025-07-09 à 22.23.11.png
但這是因為嵌入引數計數兩次,謝謝您的注意(模型具有繫結嵌入,如果我沒記錯的話)

這張圖表顯示 GQA 擁有比鍵值頭更多的查詢頭,這與最初的設計相矛盾。這是故意的嗎?

·
文章作者

不,我們使用的是經典的 GQA,這是一個筆誤,抱歉!

世界需要像你這樣的英雄!!

太棒了 🚀

祝賀團隊釋出 SmolLM3!這是一項非常令人印象深刻的工作,關於 GQA、NoPE 和其他架構調整的詳細消融對社群非常有價值。

您對突破長上下文效能界限的關注令人著迷。它讓我想起了一篇最近的論文,該論文從完全不同的架構角度解決了同樣的挑戰。

我剛剛讀到谷歌研究的 ATLAS (arXiv:2505.23735),它提出用現代迴圈“長期記憶模組”取代標準注意力機制。

其核心思想是透過建立一個明確“學習記憶上下文”而不是僅僅記憶單個 token 的記憶來克服 Transformer 和舊 RNN 的侷限性。他們引入了一個名為 Omega 規則的概念,該規則根據過去的滑動視窗更新記憶,而不是可能導致“中間丟失”問題等問題的“線上”逐 token 更新。

他們展示的結果令人信服,尤其是在 BABILong 基準上有效擴充套件到 10M 上下文長度的能力。

看到兩種強大且截然不同的擴充套件上下文長度的方法真是令人興奮。一種是完善 Transformer 架構(如 SmolLM3),另一種是設計新的以記憶為中心的迴圈模型(如 ATLAS)。

我很想聽聽您對這些替代架構未來的看法,以及您是否設想未來混合模型可能結合兩者的優點!

這裡是感興趣的朋友的論文

·

好想法

Qwen3-32B 建立的合成數據集是否已釋出或釋出到任何地方?我在集合中看到了其他資料集和一些推理資料集,但沒有 Qwen3-32B 建立的任何合成數據集。團隊會計劃釋出它們嗎?

·
文章作者

我們已在 SmolTalk2 中釋出了我們用於訓練的所有資料集。資料集卡詳細說明了哪些資料集是使用 Qwen3-32B 生成的。

我一直在研究 SmolLM3 的雙模式訓練方法,並有一個關於選擇錨定偏好最佳化 (APO) 而非組相對策略最佳化 (GRPO) 來處理推理能力的技術問題。

根據我對這兩種方法的理解

  1. APO(如 DPO)在一般指令遵循方面表現良好,並且在提供適當的偏好資料(您使用 Qwen 模型生成)的情況下可以處理推理任務
  2. GRPO 專門為帶過程監督的數學推理而設計,無需值函式模型,可能提供計算效率優勢

我推測選擇 APO 是因為

  • 它為推理和非推理模式提供了統一的對齊方法
  • 它與您的合成偏好資料生成流程配合良好
  • 您將推理視為指令遵循的一種特殊模式,而不是一個根本不同的任務
  • GRPO 的計算優勢可能沒有超過您特定訓練設定的實現複雜性

您能否澄清一下我的理解是否正確?我特別想知道您是否考慮過 GRPO 進行推理最佳化,以及最終選擇 APO 用於兩種模式的因素是什麼。

感謝您分享 SmolLM3 訓練配方的這些細節——雙模式方法和訓練流程令人著迷!

·

我對我自己的問題有了更多的思考,我想主要原因是您想訓練一個離策略模型,這樣您就可以利用更大模型的輸出來作為訓練資料(蒸餾)。所以這就是為什麼 GRPO 這樣的線上策略演算法不適合這種情況。

在預訓練階段 3(推理資料集)中,輸入是什麼?是使用者提示 + 模型響應拼接在一起作為輸入嗎?是否添加了聊天模板以與 ChatML 模板對齊?

中期訓練和 SFT 也是如此嗎?

·
文章作者

對於推理中期訓練,我們使用了 ChatML 模板(所以沒有系統提示),對於 SFT,我們使用了 SmolLM3 的最終聊天模板。

共享嵌入只是因為 llama 使用它還是經過了消融?

大家好,Hugging Face 團隊,這篇 SmolLM3 的帖子讓我好奇你們為什麼選擇 APO 而非 GRPO,所以我深入比較了 SmolLM3、Tulu3 和 DeepSeek-R1 的方法。最終在 🤗 space 上建立了一個視覺化指南,幫助大家瞭解後訓練領域的概況。

看到不同團隊如何用不同的技術組合解決類似的問題,真是太有趣了!

Hugging Face 團隊你好,
再次感謝您分享您的偉大研究成果。

我正在嘗試復現 SmolLM3,我想知道——如果在您的共享政策允許範圍內,您能否分享訓練執行的 wandb 連結?

再次感謝。

·
文章作者

是的,wandb 日誌在這裡:https://wandb.ai/huggingface/SmolLM3-training-logs。它們與中間檢查點一起釋出:https://x.com/eliebakouch/status/1947314495103160458

Hugging Face 團隊你好!我注意到關於多語言支援的 tokenizer 實現沒有任何具體細節。您能分享一些關於處理多種語言的 tokenization 方法的見解嗎?我很好奇您是使用了統一的 tokenizer 還是特定語言的 tokenizer,您使用了哪種演算法來訓練 tokenizer,以及是否涉及任何特殊技術。謝謝!

·
文章作者

我們直接使用了 LLama 3.2 分詞器(除了移除了 bos_token),以下是 Meta 如何構建分詞器的一些細節(來自 llama3 論文):

我們使用了一個包含 128K token 的詞彙表。我們的 token 詞彙表結合了來自 tiktoken3 分詞器的 100K token 和額外的 28K token,以更好地支援非英語語言。與 Llama
2 分詞器相比,我們的新分詞器將英語資料樣本的壓縮率從 3.17 提高到
每 token 3.94 個字元。這使得模型可以在相同的訓練計算量下“讀取”更多的文字。我們還發現,新增來自選定非英語語言的 28K token 提高了壓縮率和下游效能,對英語分詞沒有影響。
2 tokenizers,我們的新 tokenizer 提高了英語資料樣本的壓縮率,從 3.17 到
每 token 3.94 個字元。這使得模型能夠以相同的訓練計算量“閱讀”更多文字。

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.