最強3B「小鋼炮」,代碼數(shù)據(jù)全公開!推理隨意開關(guān),128k超長上下文

0 評論 665 瀏覽 0 收藏 22 分鐘

重磅開源!新一代最強小模型SmolLM3橫空出世:30億參數(shù),支持128k長上下文!而且訓(xùn)練、對齊、架構(gòu)、數(shù)據(jù)等全鏈路,Hugging Face這次100%開放——堪稱真「Open AI」。

重磅開源!

剛剛,Hugging Face推出了目前最強的30億參數(shù)模型SmolLM3:

  • 雙推理模式:think,no_think
  • 超長上下文:最長可達(dá)128k
  • 多語言支持:英語、法語、西班牙語、德語、意大利語、葡萄牙語
  • 完全開源:數(shù)據(jù)、代碼、構(gòu)建方法

基礎(chǔ)模型: https://hf.co/HuggingFaceTB/SmolLM3-3B-Base

指令和推理模型: https://hf.co/HuggingFaceTB/SmolLM3-3B

小模型負(fù)責(zé)人Loubna Ben Allal如此評價SmolLM3:「強大、小巧的推理模型」。

SmolLM3性能很強:

  • 超越Llama3.2-3B和Qwen2.5-3B
  • 逼近40億參數(shù)模型(如Qwen3和Gemma3)

重要的是,它公開了完整的構(gòu)建方法!100%開源,極大減少了反向工程的時間,為小模型開發(fā)提供了難得的參考范本。

SmolLM3不僅展示了完整的「訓(xùn)練-微調(diào)-對齊」開源范式,也在提醒:模型規(guī)模不是唯一答案,工程細(xì)節(jié)才是制勝關(guān)鍵!

01 預(yù)訓(xùn)練

在模型架構(gòu)和數(shù)據(jù)混合策略方面,SmolLM3做出了顯著優(yōu)化。

先從架構(gòu)設(shè)計與訓(xùn)練配置說起。

模型架構(gòu)與預(yù)訓(xùn)練階段

在Llama架構(gòu)的基礎(chǔ)上,SmolLM3引入多項關(guān)鍵改進(jìn),以提升效率和長上下文處理能力。

關(guān)鍵架構(gòu)優(yōu)化一覽:

  • GQA機制:將傳統(tǒng)多頭注意力替換為4組GroupedQueryAttention,性能相當(dāng)?shù)蠓档蚄V緩存開銷,推理更高效。
  • NoPE編碼:每隔4層移除旋轉(zhuǎn)位置編碼(RoPE),顯著提升長文本處理能力,而短文本任務(wù)不受影響。
  • 文檔內(nèi)注意力屏蔽:同一訓(xùn)練序列中不同文檔的token彼此隔離,提升訓(xùn)練穩(wěn)定性和長文本學(xué)習(xí)能力。
  • 穩(wěn)定性優(yōu)化:借鑒OLMo2,去除嵌入層權(quán)重衰減,使參數(shù)收斂更穩(wěn),對模型性能無負(fù)面影響。

??相關(guān)論文:

論文鏈接:https://arxiv.org/abs/2501.18795

論文鏈接:https://arxiv.org/abs/2501.00656

基于相同架構(gòu)進(jìn)行的消融實驗,驗證了上述所有改動,確保各項優(yōu)化措施在提升或保持性能的同時,帶來了額外優(yōu)勢。

訓(xùn)練配置如下:

分布式訓(xùn)練設(shè)置,見下圖。

除了架構(gòu)層面的改進(jìn),團隊也系統(tǒng)性的實驗與優(yōu)化了訓(xùn)練系統(tǒng)。

數(shù)據(jù)混合策略與訓(xùn)練階段

延續(xù)SmolLM2所采用的多階段訓(xùn)練方法,SmolLM3使用的訓(xùn)練數(shù)據(jù)總量達(dá)11.2萬億個token,訓(xùn)練采用三階段策略。

團隊混合了網(wǎng)頁文本、數(shù)學(xué)內(nèi)容與代碼數(shù)據(jù),還根據(jù)訓(xùn)練進(jìn)度,調(diào)整各類數(shù)據(jù)的比例。

為了確定最優(yōu)的數(shù)據(jù)構(gòu)成與配比,在多個3B模型上,他們進(jìn)行了大量消融實驗,訓(xùn)練數(shù)據(jù)量涵蓋從500億到1000億token。

預(yù)訓(xùn)練包括以下三個階段:

  • 階段1:為模型打下通用基礎(chǔ)
  • 階段2:引入更多高質(zhì)量專業(yè)數(shù)據(jù)
  • 階段3:重點提升數(shù)學(xué)與編程能力

各階段混合數(shù)據(jù)配比和來源,如下:

通過上述數(shù)據(jù)混合策略,在多個任務(wù)上,訓(xùn)練出的基礎(chǔ)模型表現(xiàn)優(yōu)異。

此外,在主預(yù)訓(xùn)練完成后,研究團隊還進(jìn)行了專門的中間訓(xùn)練階段,以進(jìn)一步增強模型在長文本處理和復(fù)雜推理任務(wù)中的表現(xiàn)。

02 中期訓(xùn)練(Mid-training)

長上下文適應(yīng)和推理適應(yīng)被稱為「中期訓(xùn)練」。

與主預(yù)訓(xùn)練相比,這些訓(xùn)練階段要短得多,但仍然具有通用性。

長上下文擴展

在主預(yù)訓(xùn)練完成后,額外訓(xùn)練了SmolLM3,進(jìn)一步擴展模型的上下文處理能力。

該階段共使用了1000億個token,分為兩個階段,各使用500億token,改進(jìn)如下表所示:

這兩個階段均過采樣了數(shù)學(xué)、代碼和推理相關(guān)數(shù)據(jù),增強了模型的長文本理解與推理能力。

在RULER和HELMET等長上下文基準(zhǔn)測試中,研究人員發(fā)現(xiàn):

進(jìn)一步增加特定類型的長文本數(shù)據(jù),并不能帶來額外性能提升。

這表明:在64k長度的上下文任務(wù)中,僅使用NoPE編碼、更長的訓(xùn)練序列以及更高的RoPE的theta值,已足以讓模型取得優(yōu)異表現(xiàn)。

此外,借鑒Qwen2.5,在推理階段,這次采用YARN技術(shù),將上下文窗口從訓(xùn)練時的64k外推至128k,上下文擴展了2倍。

推理中間訓(xùn)練階段

為了進(jìn)一步注入通用推理能力,還有一項訓(xùn)練:推理中間訓(xùn)練。

與預(yù)訓(xùn)練和后續(xù)微調(diào)不同,這一階段不面向任何特定領(lǐng)域,而是著重培養(yǎng)模型的通用推理能力。

此階段使用了總計350億個token數(shù)據(jù),主要來自兩個來源:

OpenThoughts3-1.2M,以及Llama-Nemotron-Post-Training-Dataset-v1.1數(shù)據(jù)集中的一個子集,其中包含R1標(biāo)注的推理軌跡。

為了減少對模型結(jié)構(gòu)的顯式引導(dǎo),這次采用ChatML格式的對話模板,并通過packing技術(shù)壓縮了數(shù)據(jù)。

總訓(xùn)練量約為1400億token。

最終模型的checkpoint將用于后續(xù)的指令微調(diào)(SFT)階段。

03 后訓(xùn)練

隨著DeepSeek R1等推理模型的推出,推理為模型帶來的強大表現(xiàn)已獲業(yè)界公認(rèn)。

但至今缺乏構(gòu)建雙指令模型(同時支持推理與非推理模式)的完整開源方案?,F(xiàn)有方法多依賴復(fù)雜強化學(xué)習(xí)流程與私有數(shù)據(jù),嚴(yán)重阻礙研究人員復(fù)現(xiàn)與再開發(fā)。

此次,HuggingFace公開了雙模式指令模型的完整構(gòu)建方案。

訓(xùn)練流程從注入通用推理能力的中間訓(xùn)練起步,融合合成數(shù)據(jù)監(jiān)督微調(diào)(SFT),再通過基于DPO改進(jìn)的Anchored Preference Optimization(APO)實現(xiàn)偏好對齊。

這套精心設(shè)計的多階段流程,在推理與非推理模式間,成功達(dá)成了性能平衡。

聊天模板設(shè)計

SmolLM3雙模式模型通過聊天模板與用戶交互,允許用戶精確控制推理模式。(和Qwen3一樣)

用戶可以用/think或/no_think切換推理與非推理模式。

此外,SmolLM3支持工具調(diào)用。

聊天模板還包括默認(rèn)系統(tǒng)消息和元數(shù)據(jù)(如日期、知識截止時間、推理模式),并允許用戶自定義或禁用元數(shù)據(jù)顯示,靈活適配不同場景。

監(jiān)督微調(diào)

在完成中間訓(xùn)練后,團隊繼續(xù)對SmolLM3進(jìn)行監(jiān)督微調(diào),以增強其在推理與非推理兩種模式下的綜合能力。

目標(biāo)覆蓋數(shù)學(xué)、編程、通用推理、指令跟隨、多語言處理以及工具調(diào)用等任務(wù)。

核心挑戰(zhàn)在于:部分任務(wù)領(lǐng)域缺乏帶有推理軌跡(reasoning traces)的標(biāo)注數(shù)據(jù)。

為彌補這一空缺,他們使用Qwen3-32B以推理模式重新生成了非推理數(shù)據(jù)集的提示,從而構(gòu)建出合成推理數(shù)據(jù)。

在整個監(jiān)督微調(diào)過程中,還對各類數(shù)據(jù)進(jìn)行細(xì)致調(diào)配,以確保模型保持穩(wěn)健的性能。

在大量消融實驗的基礎(chǔ)上,最終構(gòu)建的SFT數(shù)據(jù)集中共有18億token,比例來源如下

為促進(jìn)社區(qū)的研究與實踐,他們將開源這套數(shù)據(jù)配比方案與完整訓(xùn)練腳本。

離線策略模型對齊

在完成監(jiān)督微調(diào)后,模型進(jìn)一步通過偏好學(xué)習(xí)進(jìn)行了對齊訓(xùn)練。

非推理模式和推理模式部分,分別采用了Tulu3的公開偏好數(shù)據(jù)集、Qwen3-32B和Qwen3-0.6B合成的一批偏好對。

在構(gòu)建偏好數(shù)據(jù)時,他們選取Qwen3-32B的回答作為偏好對中的「選中答案」(chosen),而Qwen3-0.6B的回答作為「被拒絕答案」(rejected),并采用APO方法進(jìn)行對齊訓(xùn)練。

對齊流程進(jìn)一步統(tǒng)一了不同模式下的風(fēng)格與偏好選擇,為后續(xù)任務(wù)奠定了良好基礎(chǔ)。

Anchored Preference Optimization(APO)是Direct Preference Optimization(DPO)的變體,但提供了更為穩(wěn)定的優(yōu)化目標(biāo)。

在DPO中,在訓(xùn)練過程中,獎勵函數(shù)rθ(x,y)衡量了模型生成序列的概率與訓(xùn)練初期參考模型之間的對數(shù)比值:

其中,β參數(shù)控制優(yōu)化模型相對于參考模型的變化幅度。

DPO損失函數(shù)主要通過優(yōu)化由提示x、選中回答y_w和被拒絕回答y_l組成的三元組來實現(xiàn)模型的改進(jìn)。

與DPO相比,APO目標(biāo)在訓(xùn)練過程中更加穩(wěn)定。

雖然在下游評估中,數(shù)學(xué)、科學(xué)、指令跟隨、編程、對話和多語言任務(wù)均有顯著提升,但在長上下文基準(zhǔn)(如 RULER)上的表現(xiàn)卻有所下降。

為此,團隊追溯到推理中間訓(xùn)練階段,發(fā)現(xiàn)模型長上下文處理能力有所損失。

此外,APO訓(xùn)練數(shù)據(jù)的上下文限制24k token。

為了解決這一問題并緩解性能下降,團隊開始探索模型合并。

模型合并

在不增加集成計算開銷或無需額外訓(xùn)練的情況下,使用MergeKit合并APO檢查點與長上下文訓(xùn)練checkpoint(權(quán)重0.9:0.1),兼顧推理對齊與長文本能力。

通過這種合并方法,在多個任務(wù)中,得到的模型保持了優(yōu)異的表現(xiàn)。

接下來,請查看該模型與基礎(chǔ)模型的評估結(jié)果。

04 評估

在推理模式和非推理模式下,團隊分別評估了基礎(chǔ)模型和指令模型的表現(xiàn)。

基礎(chǔ)模型

在各項任務(wù)中,SmolLM3始終優(yōu)于其他3B模型,并且在與4B模型對比時也展現(xiàn)了強勁的競爭力。

在知識和推理類基準(zhǔn)測試中,SmolLM3取得了第一或第二名,數(shù)學(xué)和編程能力也表現(xiàn)不俗。

對于長上下文任務(wù),在Ruler 64k基準(zhǔn)測試中,SmolLM3表現(xiàn)突出。

在五種主要歐洲語言的基準(zhǔn)測試中,它也展現(xiàn)了強大的能力,涵蓋Global MMLU、MLMM HellaSwag、Flores-200和Belebele,內(nèi)容包括知識、常識推理、文本理解和翻譯能力。

這表明在英語之外的語言中,SmolLM3同樣保持了一致的優(yōu)異表現(xiàn)。

總體而言,基礎(chǔ)模型在多個領(lǐng)域展示了卓越的表現(xiàn)。接下來,讓我們看看這些優(yōu)勢如何轉(zhuǎn)化到指令模型的表現(xiàn)上。

雙模式指令/推理模型

SmolLM3同時支持指令模式和推理模式,需要分別評估其表現(xiàn),并與具備相同能力的其他模型做比較。

非推理模式評估

SmolLM3與其他3B非推理模型進(jìn)行了比較,并在多個基準(zhǔn)測試中,與Qwen3推理模型在無推理模式下進(jìn)行對比。

正如下圖所示,SmolLM3在推理能力和效率之間找到了最佳平衡點。

在計算成本較低的情況下,SmolLM3顯著超越Qwen3 1.7B,并接近4B模型的性能,領(lǐng)先于測試的其他3B非推理模型。

指令模型在性能和成本之間找到了最佳平衡點。擴展推理評估

在啟用擴展推理后,繼續(xù)評估了SmolLM3的推理表現(xiàn)。

與非推理模型相比,SmolLM3在大多數(shù)基準(zhǔn)測試中取得了顯著進(jìn)展。

在一些具有挑戰(zhàn)性的任務(wù)中,研究人員觀察到了顯著提升,例如AIME 2025(36.7%對比9.3%)、LiveCodeBench上的競爭性編程(30.0%對比15.2%)以及GPQA Diamond上的研究生級推理(41.7%對比35.7%)。

盡管在推理和非推理模式下,Qwen3-4B通常能夠獲得最高分?jǐn)?shù),但SmolLM3在3B參數(shù)類中依然展現(xiàn)出了競爭力,特別是在數(shù)學(xué)推理和復(fù)雜問題解決任務(wù)中表現(xiàn)突出。

最后一個問題是:如何使用這個模型?

05 如何在本地運行

SmolLM3的模型代碼已在transformers v4.53.0中發(fā)布,確保您已升級到該版本的transformers。

pip install -U transformers

還可以通過最新版本的vllm加載該模型,vllm使用transformers作為后端。

from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = “HuggingFaceTB/SmolLM3-3B”device = “cuda” 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))

啟用和禁用擴展推理模式

默認(rèn)情況下,擴展推理模式已啟用,因此上述示例會生成帶有推理軌跡的輸出。

要啟用或禁用推理模式,在系統(tǒng)提示中使用/think或/no_think標(biāo)志,如下所示。

生成帶擴展推理的代碼步驟相同,唯一的區(qū)別在于系統(tǒng)提示應(yīng)為/thin而不是/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,)

智能體使用

SmolLM3支持工具調(diào)用!

只需將工具列表傳遞到xml_tools(標(biāo)準(zhǔn)工具調(diào)用)或python_tools(調(diào)用如Python函數(shù)的工具)參數(shù)中。

from transformers import AutoModelForCausalLM, AutoTokenizercheckpoint = “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]))參考資料:https://x.com/LoubnaBenAllal1/status/1942614508549333211https://HuggingFace.co/blog/smollm3

本文由人人都是產(chǎn)品經(jīng)理作者【新智元】,微信公眾號:【新智元】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!