返回首頁

GitHub Repo

Ollama 維護者提出 MLX 狀態修補,降低工具呼叫後的隱藏記憶體占用

10 月 5 日提出的修補,針對推測解碼回退後仍引用大型緩衝區的遞迴狀態,避免多餘記憶體隨前綴快取保留。作者回報十二次工具呼叫測試末輪減少 3.52 GiB 占用,但提案尚未合併。

Mattruffoni · CC BY-SA 4.0 · Image source
zh-Hant

Ollama 維護者 dhiltgen 於 10 月 5 日提出 PR #18805,處理 MLX 推論路徑在推測解碼回退後保留過大緩衝區的問題。作者回報,十二次工具呼叫的 A/B 測試中,修補讓最後一輪的 MLX 持有記憶體減少 3.52 GiB,而邏輯快取用量相當。截至查核時,提案仍開放審查,目標分支為 release_v0.40.0。修補提案

問題出在狀態的生命週期:逐 token 擷取的遞迴狀態,在回退並選取其中一份後,仍可能指向較大的底層緩衝區。若請求在下一次模型運算前結束,該緩衝區就會跟著存活的快取留下;快取帳面只計算選定狀態,實際配置卻可能更大。提案會標記可能共享緩衝區的還原狀態,在請求關閉、保留至前綴快取前批次壓實;正常模型步驟替換狀態時則清除標記,並加入還原與緩衝區分離測試。機制說明

這項新修補連結到 9 月 24 日的社群回報。回報者在 32 GB、M1 Max 的 Mac Studio,以 Ollama 0.34.2 與 0.34.4 執行 qwen3.6:27b-mlx,開啟 MTP 推測解碼並連續呼叫工具,觀察到每次以工具呼叫結束的請求額外增加約 0.43 GiB,未反映在前綴快取計數;一般聊天對照沒有相同增量。這是特定配置的重現,不能直接推廣至所有模型與後端。原始案例與腳本

對本地代理部署而言,這意味著容量評估需同時觀察快取帳面與執行時配置。MLX 官方文件指出,get_active_memory() 回報使用中的記憶體位元組數,且不包含快取緩衝區,因此也不一定等於作業系統顯示的占用。MLX 記憶體文件

工程師接下來應追蹤合併與版本發布,並以連續工具呼叫比較修補前後的記憶體曲線、交換空間與延遲。3.52 GiB 是作者單一測試的結果;其他模型的改善幅度、壓實成本,以及是否完整處理相關累積問題,仍需驗證。

來源

  1. mlx: compact restored recurrent state after speculative rollback — PR #18805
  2. MLX runner: tool-call requests retain memory outside the prefix-cache budget — Issue #18620
  3. mlx.core.get_active_memory — MLX documentation