本文將深入探討 IBM 如何建構 Granite 4.2 推理模型家族的技術細節。

Granite 4.2 是我們首個密集型、僅解碼器架構的推理大型語言模型家族,共發布 3B、8B 和 30B 三種尺寸。每個模型都從零開始,使用五階段策略在約 15 兆個 tokens 上進行預訓練,將上下文視窗擴展至 512K tokens。

接著,它們透過思維鏈、推理和代理軌跡資料進行監督式微調,然後再透過多階段強化學習管線進行後訓練。該管線包含代理式強化學習,讓 8B 和 30B 模型學會在真實沙盒環境中運用工具。

每個模型都具備「思考/非思考」模式切換功能,以及一種針對簡單問題分配少量推理預算的「低功耗思考」模式,並支援原生工具呼叫。所有 Granite 4.2 模型均依據 Apache 2.0 授權條款發布。

Granite 4.2 是 Granite 語言模型家族中專注於推理能力的版本。早期的 Granite 版本是強大的指令遵循助理;Granite 4.2 則明確增加了推理功能。

每個模型都能在給出答案前產生思維鏈,並可根據任務所需的思考程度,在「思考」或「非思考」模式下運行。介於兩者之間的「低功耗模式」則會為簡單問題分配少量推理預算。

這三種尺寸(3B、8B 和 30B)共享相同的架構設計,並遵循相同的訓練管線(從零開始預訓練、SFT,然後是多階段 RL),各自以其規模進行訓練。這三種模型都是強大的推理器和指令遵循者。

最明顯的能力區分體現在後訓練階段。8B 和 30B 模型額外經過代理式強化學習區塊,學習作為代理人操作:在真實環境中呼叫工具、編輯和執行程式碼、操作終端機以及搜尋網路。

每個模型都支援原生工具呼叫。透過與 OpenAI 相容的端點(例如使用 vLLM)提供服務時,它會以 OpenAI 函數呼叫格式發出工具呼叫,並無需額外連接即可整合到代理式框架中。Granite 4.2 也支援 SGLang,請參閱 SGLang 食譜以獲取可立即使用的範例。

本文的其餘部分將詳細介紹其建構過程:包括架構、預訓練、監督式微調、多階段強化學習管線以及成果。

Granite 4.2 模型基於僅解碼器架構的密集型 Transformer 設計,其核心組件包括:注意力機制採用分組查詢注意力(GQA),具備 40 個注意力頭和 8 個 KV 頭;位置嵌入使用旋轉位置嵌入(RoPE),其中 θ 值為 10,000,000;前饋網路為帶有 SwiGLU 啟用函數的 MLP;正規化採用 RMSNorm(ε = 1e-5);嵌入層則使用獨立的輸入/輸出嵌入;精度為 bfloat16。

具體來說,3B 模型的嵌入大小為 2560,層數 40,注意力頭數量 40,MLP 隱藏層大小 8192;而 8B 和 30B 模型則共享 4096 的嵌入大小,注意力頭數量為 32,注意力頭大小為 128,KV 頭數量為 8。8B 模型有 40 層,MLP 隱藏層大小為 12800;30B 模型則有 64 層,MLP 隱藏層大小高達 32768。所有模型的序列長度均為 131072。

Granite 4.2 採用五階段訓練策略,從零開始在約 15 兆個 tokens 上進行訓練。階段 1-2 專注於基礎預訓練,階段 3-4 則透過逐步提高資料品質的退火策略進行中期訓練。

而階段 5 則引入長上下文訓練,將上下文視窗擴展至 512K tokens。每個階段都使用不同的資料混合和學習率排程,逐步從廣泛的網路規模資料轉向更精選、高品質的來源。預訓練方法與上一代模型非常相似;有關資料混合、階段排程和長上下文擴展的詳細說明,請參閱 Granite 4.1 部落格。

監督式微調(SFT)將基礎模型轉變為可靠的指令遵循、推理和工具使用助理。SFT 資料混合了代理式(31.6%)和非代理式(68.4%)資料,總計約 720 萬個樣本,約 1000 億個 tokens,其中約 650 億個可供訓練。

代理式語料庫涵蓋廣泛領域,包括軟體工程(SWE,69%)、工具呼叫(12.1%)、終端機使用(8.0%)、數學(3.5%)、搜尋(0.8%)和動作(0.2%)。這些樣本和軌跡是使用多種代理框架和工具生成的,包括 OpenHands、OpenCode、Terminus-2、SWE-agent、OpenResearcher、MiniSWE、OpenSeeker、EnvScaler、Gemini CLI、Hermes、Codex 和 Goose。

代理式資料結合了開源資料集和我們自己合成生成的強化學習環境中的樣本,涵蓋了各種代理與工具組合。非代理式語料庫包含幾個主要類別:指令遵循(18.8%)、程式編碼(18.8%)、數學(14.6%)、多語言(7.0%)、科學(5.4%)、推理(3.0%)和安全(0.8%)。

在樣本進入最終 SFT 混合資料之前,我們應用了多個階段的品質控制。首先,來自不同來源的資料會被標準化並重新格式化為一致的 OpenAI Chat 格式,使對話結構和工具互動在所有資料集和框架中保持統一。

接著,我們使用 GPT-OSS-120B 和 Gemma 4 作為基於大型語言模型的評審來評估樣本品質。評分較低的樣本會被移除,同樣被移除的還有包含幻覺或捏造資訊、無效工具互動,或呼叫未在相應工具列表中定義的函數的樣本。

我們還會酌情應用一些針對特定資料集的啟發式規則,以進一步提高品質並消除已知的雜訊來源。最後,我們執行局部和全域的重複資料刪除。重複資料刪除是基於工具和訊息欄位組合計算的 SHA-256 雜湊值,以移除個別資料來源內部以及整個 SFT 混合資料中的重複樣本。

完整的語料庫首先會進行全域隨機打亂,以減少排序效應,並確保來自不同領域的樣本在訓練期間充分混合。打亂後的語料庫接著被分割成大小相等的 .parquet 分片,這些分片使用模型的 tokenizer 和聊天模板進行 tokenization,並準備用於大規模分散式訓練。

在啟動最終大規模運行之前,我們會在代表性配置上調整超參數,掃描學習率排程、初始學習率和暖機比率,以找到在不同模型尺寸下都能穩定訓練的設定。最終的訓練配置總結如下:計算資源方面,根據模型尺寸使用 32 至 128 個節點,每個節點配備 4 個 Grace/GB200 處理器。

打包後的序列長度為 131,072(128K),全域批次大小設定為 128。學習率在暖機後保持恆定 1.0e-5,而第二階段則為 3.0e-6。學習率暖機佔訓練迭代次數的 2.5%,訓練時長約為 2 個 epoch。平行化策略採用 TP=2、PP=1、CP=4 或 CP=2。

對於 30B 模型,我們額外執行了第二階段的 SFT,專門針對代理式程式編碼。在此階段,代理式、SWE 和程式編碼資料被上採樣,以增加它們對訓練分佈的有效貢獻,同時約 16% 的混合資料作為原始 SFT 語料庫的重播資料被保留。

接著,30B 模型以較低的學習率 3.0e-6 進行約一個額外 epoch 的微調。這個有針對性的第二階段增加了模型對代理式程式編碼軌跡的接觸,同時不丟失在初始 SFT 階段獲得的能力。

在 SFT 之後,我們應用了一個多階段、多環境的強化學習管線。我們不是進行單一的強化學習過程,而是運行一系列專注的階段,涵蓋多個環境:數學、程式碼、科學、指令遵循、工具使用和結構化輸出,然後是軟體工程、終端機使用和網路搜尋。

每個階段都是一個獨立的強化學習運行,針對一種能力,並從前一階段的檢查點進行暖啟動。圖 1 顯示了分階段的強化學習課程。基礎強化學習(可驗證獎勵 + 技能提升)適用於所有尺寸的模型;代理式強化學習區塊(SWE → 終端機 → 搜尋)僅適用於 8B 和 30B 模型。每個模型都以 RLHF 結束。每個階段都是一個獨立的 GRPO 運行,並從前一個檢查點進行暖啟動。

每個階段都使用非同步 GRPO(群組相對策略優化)進行訓練,因此生成器和訓練器的循環兩部分永遠不會相互阻塞。一群生成工作者不斷採樣回應,並將完成的軌跡放入共享緩衝區;一旦緩衝區累積了足夠一個完整步驟的資料,訓練器就會提取該批次,執行優化器步驟,並將更新後的參數串流回生成工作者,而無需暫停它們。

更新可能會在 rollout 過程中發生,導致單一軌跡由兩個相鄰的策略版本拼接而成。我們允許這種情況發生,而不是花費成本去阻止它:工作者會重複使用現有的 KV 快取,而不是在每次更新後重建,唯一的防護措施是限制它們與訓練器之間的漂移不超過一次更新,這限制了任何樣本可能偏離策略的程度。

任何超出該限制的不匹配都會在目標函數中透過截斷重要性採樣來處理,該方法將訓練與生成之間的對數機率比率限制在固定上限,以防止少量過時的 tokens 主導更新。優勢值是群組相對的,並採用留一法基準:每個回應都根據針對相同提示抽取的其他樣本的平均獎勵進行評估,這消除了對單獨價值網路的需求。

具體來說,以 RLVR 為例,這是第一個也是運行時間最長的階段:每一步將 256 個提示與每個提示的 16 個採樣回應配對,形成一個 4,096 個樣本的批次,訓練器在下一個 rollout 開始前,會在一個優化器步驟中消耗這個批次。後續階段保持此機制不變,僅調整每個階段的形狀。

強化學習管線在所有階段都保持一套共同的超參數骨幹,以簡化課程運行和比較。其中一些固定參數包括:演算法為 GRPO(無價值網路;群組相對優勢),訓練堆疊使用 NeMo-RL(Megatron-Core + vLLM)搭配 NeMo-Gym 環境。

比率截斷(最小/最大)設定為 0.2 / 0.28,微批次大小為 1,平行化採用 tensor-parallel 2-4,不使用 pipeline 或 context-parallelism。

各階段的具體設定則有所不同,例如 30B 模型的 RLVR 階段,每步驟提示數為 256,每提示生成數為 16,最大序列長度為 64K,Rollout 回合數為 1,KL 散度為 0,學習率為 5e-7。其他階段如指令遵循提升、程式碼提升、SWE、終端機和搜尋等,則根據其特定目標調整了提示數、生成數、最大序列長度、Rollout 回合數和 KL 散度等參數。

顯示的是 30B 模型的參數。全域批次大小 = 每步驟提示數 × 每提示生成數(例如,RLVR 為 256 × 16 = 4096)。3B 和 8B 模型使用相同的配方和超參數,但階段較少(請參閱「三種尺寸有何不同」);改變的是階段列表,而不是參數設定。KL 排程遵循獎勵類型:在獎勵客觀且可驗證的情況下自由探索(RLVR 和 SWE 2 在 KL 0 運行)。