Character.ai 解密預訓練技術:6-bit 梯度壓縮讓通訊開銷驟降
Character.ai 首次公開早期由 Noam Shazeer 帶領研發的 Transformer 預訓練最佳化技巧。其中最引人關注的是 6-bit 梯度壓縮演算法 Squinch,在叢集網路頻寬僅為頂尖系統四分之一的限制下,保持了與 bfloat16 相當的訓練精度。團隊同時還公開了注意力正則化與蒸餾最佳化等工程細節。

如果你的計算叢集頻寬只有行業頂尖水平的四分之一,但你還想訓大模型,該怎麼辦?
當年在 Character.ai 帶領預訓練團隊的 Noam Shazeer 選擇了一個簡單粗暴的解法:把梯度狠狠壓扁。如今 Character.ai 已經轉型在開源模型上做應用,不再做大規模預訓練,但官方首次公開了當年壓箱底的五項底層最佳化細節。
6-bit 梯度壓縮與精度補丁
最吸睛的技術叫 Squinch,是 Noam Shazeer 設計的 6-bit 梯度壓縮演算法。當時叢集頻寬嚴重受限,他們把 8 個梯度數值打包進一個 48-bit 的塊裡,平均每個值只佔 6 bit,卻能維持和 bfloat16 幾乎一致的模型精度。
這種演算法專門針對 Transformer 梯度分佈設計,後來 DeepSeek 的 logfmt 也借鑑了類似思路。對於頻寬受限的叢集、跨機房分散式訓練或者 MoE 模型,它依然非常實用。
針對數值穩定性,團隊拿出了 Attention Z-Reg。bfloat16 在大數值區間的浮點步長很大,40 到 41 之間的間距遠大於 0 到 1 之間,容易丟失精度。他們在反向傳播時向注意力梯度引入正則修正,把數值拉回零附近的精細區間。
在量化感知訓練中,團隊還設計了動態截斷機制。傳統的固定截斷會導致小啟用值在量化後直接塌縮成零,他們根據輸入權重的均方根動態調整範圍,保證了量化精度。
對話樹打包與離線蒸餾省錢法
處理對話資料時,多輪分支和長文本拼接很容易拖慢速度。Character.ai 引入了可見性掩碼機制,只用起始和邊界兩個張量,就能在單個批次裡原生表達樹狀文件、因果注意力甚至推理時的束搜尋分支。
另一項實用技巧針對模型蒸餾。如果離線儲存教師模型的全詞表機率,超大詞表會把硬碟撐爆。他們採用基於 Gumbel top-k 的子取樣方法,只儲存少量取樣結果和閾值,在訓練學生模型時能無偏重建軟目標,省下了海量儲存。
為什麼重要
對開發者和中小團隊來說,這篇技術分享簡直是一份在缺錢、缺卡、缺頻寬時的工程求生指南。如果你手頭的機群網路條件一般,或者在做跨地域算力組網、訓稀疏 MoE,Squinch 這類壓縮思路完全可以拿來抄作業。
對行業來說,這些技術揭示了大模型黃金年代的一個殘酷現實:頂尖人才和極端工程能力,真的能抹平硬體上的巨大差距。當年 Character.ai 靠這套縫縫補補的自研體系打出了極佳的對話效果,間接促成了後續 Google 對團隊核心人員的重金招攬。
我們認為,Character.ai 選擇在放棄自研預訓練之後公開這套程式碼和思路,做法既坦誠又聰明。它一方面為開源社群留下了真金白銀的系統級沉澱,另一方面也向外界交代了自己技術路線轉向的原因:當算力基建變成軍備競賽,中小公司與其死磕預訓練通訊瓶頸,不如掉頭把精力集中在開源微調和產品層。
來源 (1)
- blog.character.ai(在新分頁開啟)原文blog.character.ai