STEPQuant:從時間與空間兩個維度量化 Delta-Rule 遞迴狀態
STEPQuant: When and Where Errors Matter in Delta-Rule Recurrent State Quantization
背景
Transformer 在長文本推論時,KV cache 會隨序列長度線性成長,這是服務端記憶體壓力的主要來源。近年的 linear attention 路線(例如 Qwen3.8-27B、Kimi-Linear-48B-A3B-Instruct 這類混合架構模型)改用固定大小的遞迴狀態(recurrent state)取代不斷長大的 KV cache,理論上記憶體不再隨長度增加。
但這個固定大小的狀態,在多請求並行服務時反而成了新的瓶頸。論文指出,當並行請求數達到 70 時,Qwen 的 FP32 狀態池占用的記憶體,已經超過 BF16 權重本身。每個請求都要有一份常駐狀態,請求一多,總量就很可觀。
直覺的做法是把狀態量化到低位元,但效果很差。原因在於 Delta-rule 的狀態是逐 token 遞迴更新的,每一步的量化誤差都會被帶進下一步,不斷累積。論文中的 baseline 顯示,uniform INT4 在 Qwen 的長生成推理任務上平均只剩 12.73%,而 FP32 狀態是 80.60%。
STEPQuant 的出發點是:這些誤差並不是「平均地」傷害模型,影響程度取決於兩件事。一是時間維度,誤差出現在壽命長的記憶上,會跨很多個 decoding step 持續存在。二是空間維度,不同 key row 上同樣大小的誤差,對輸出的影響不同,而且狀態數值在 row 與 column 兩個方向上的大小差異很大。
方法
STEPQuant 是一個 post-training quantization(PTQ)框架,分成兩部分。
時間維度:依記憶壽命分配位元。 狀態中的記憶壽命由遺忘門(retention gate)決定。作者量測到,壽命越長的單元累積的量化誤差越大(Spearman ρ 約 0.80)。因此 STEPQuant 在固定的位元預算下,從幾個離散的位元寬度候選中挑選,把較高的精度給「誤差大且壽命長」的單元。風險最高的那一小部分單元直接保留 FP16。論文提到,Qwen 約有 1.4% 的 head 屬於這類。
空間維度:key row 與 value column 的雙軸 scale。 作者發現狀態在 key row 方向的最大值與中位數相差約 10.3 倍,在 value column 方向則高達 19.4 倍,離群值很明顯。一般的 per-tensor 或單軸 scale 處理不好這種分佈。此外,同樣大小的誤差落在不同的 key row,對最終讀出(readout)的影響也不同。
因此 STEPQuant 為 key row 與 value column 各配一組 scale。key row 的 scale 同時考慮該 row 的數值大小和實測的「對輸出誤差的影響」,value column 的 scale 則在擬合時給高影響 row 較大的權重。兩組 scale 是聯合擬合的,而不是各自獨立決定。
這些分配與影響分數都在離線階段完成,只用 32 段 WikiText-2 做校準,推論時不需要額外訓練。
工程面上,作者把它整合進 SGLang,並寫了優化過的 GPU kernel,把量化、狀態更新等操作融合,以減少記憶體流量。
實驗結果
實驗在 SGLang 上跑 Qwen3.8-27B 與 Kimi-Linear-48B-A3B-Instruct,涵蓋兩類任務。長生成推理包含 7 項:LiveCodeBench、EvalPlus、AIME、MATH-500、HMMT、GPQA-Diamond、IFBench。短生成理解包含 6 項:MMLU、ARC-C、OpenBookQA、HellaSwag、WinoGrande、LAMBADA。
準確度(長生成任務平均):
- Qwen:FP32 狀態 80.60%;STEPQuant 6-bit 80.59%、4-bit 80.51%;uniform INT4 只有 12.73%。
- Kimi:FP32 狀態 61.52%;STEPQuant 6-bit 61.47%、4-bit 58.52%;uniform INT4 為 21.63%。uniform INT6 為 45.70%。
也就是說,6-bit 幾乎和 FP32 狀態打平。4-bit 在 Qwen 上只差約 0.1 個百分點,在 Kimi 上差約 3 個百分點。論文摘要也說,4-bit 配置的表現優於 uniform INT8。作者自己承認 Kimi 在 4-bit 的落差比 Qwen 明顯,推測與架構對量化的容忍度不同有關。
消融實驗(Qwen、6-bit): 只用空間維度的方法平均 80.19%,只用時間維度的方法平均 75.63%,兩者合併的完整 STEPQuant 為 84.51%。這組數字的基準與上面的長任務平均不同,而且完整版的分數高於 80.60% 的 FP32 長任務平均,所以應該是另一組任務或設定,不宜直接和上表比較。可以確定的結論是:兩個維度各有貢獻,合併後最好。
生成長度也是重要訊號。 uniform 量化不只是分數低,還會讓模型輸出異常拉長。例如 Kimi 的 uniform INT4 會生成約 64K token,逼近 65,536 的上限,準確度卻接近零。STEPQuant 的輸出長度則與 FP32 相近。這說明狀態誤差累積後,模型會「迷失」而不是單純變笨。
效率(NVIDIA A800):
- 6-bit 下遞迴狀態壓縮約 5.03×–5.08×。
- 含權重在內的總服務記憶體,Qwen 減少 68.7%、Kimi 減少 53.7%。
- 狀態更新操作加速約 2.91 倍。
意義
這篇論文的價值,在於把「linear attention 省了 KV cache,但狀態又成為新瓶頸」這個實際的服務問題講清楚,並給出一個可直接部署的解法。對於並行請求數高的線上服務,狀態池壓縮 5 倍以上、總記憶體最多少三分之二,代表同一張卡能多承載不少請求,或是能把剩下的空間讓給更長的上下文與更大的 batch。
從方法論看,它提醒我們:遞迴模型的量化不能沿用 Transformer 權重或 KV cache 量化的思路。在遞迴結構裡,誤差有「壽命」,位置不同(哪個 key row)影響也不同,所以要同時看時間與空間。「依誤差累積時間分配位元」這個想法,應該也能延伸到其他有狀態的架構,例如各種 state-space model 與 gated linear attention。
限制也要留意。第一,校準資料只用了 WikiText-2 的 32 段,對差異很大的領域(例如程式碼或多語言)是否穩健,論文沒有檢驗。第二,效益依賴 SGLang 整合與客製 GPU kernel,移植到其他推論框架需要額外工程。第三,極低位元時需要保留少量 FP16 的 pivot,會增加儲存與實作的複雜度。第四,誤差傳播的分析假設不同路徑的輸入與門控相同,真實 token 的變異可能偏離校準時的統計。另外,實驗只涵蓋兩個模型家族與 A800 硬體,結論能否推廣還需更多驗證。
整體來說,STEPQuant 證明了遞迴狀態可以在 6-bit 下近乎無損,在 4-bit 下仍可用。對於正在評估 linear attention 混合架構部署成本的團隊,這是一個值得參考的方向。作者已在 https://github.com/Dreamer-Toby/STEPQuant 釋出程式碼。