MoE CPU 卸載的核心概念是「Mixture-of-Experts 模型每個 token 只啟用少數專家、把不活躍的專家權重留在系統 RAM、用到再走 PCIe 拉回 GPU」。它讓 16GB VRAM 卡能載入 30B / 70B 等級的 MoE 模型、是 獨立 GPU 場景 相對 統一記憶體 場景多出的工程選項。

概念位置

MoE 卸載屬於「推論時的權重位置管理」、跟 量化 屬於「權重精度壓縮」是兩個獨立維度、可以疊加(如 30B MoE Q4 + 卸載部分層、模型精度跟記憶體位置同時被處理)。它跟 KV cache 量化是 PC 場景常一起使用的兩個工具:卸載騰出 VRAM、KV cache 量化讓騰出的 VRAM 拿去開大 context window

在 llama.cpp 中、對應的旗標是 --n-cpu-moe <N>、把 N 層的 MoE 專家權重保留在 CPU 記憶體。例如 --n-cpu-moe 30 表示 30 層的專家層留 RAM、其餘走 GPU。

可觀察訊號與例子

以 Qwen3-30B-A3B Q4_K_M(模型體積 10 GB 級、active parameter 約 3B 等級)為例、不同卸載策略下記憶體分布與生字速度的相對方向(具體數值依驅動、CUDA backend、模型版本、PCIe 版本變化、本表用於說明趨勢、不是嚴格 benchmark):

配置卸載策略VRAM 佔用方向RAM 佔用方向生字速度方向(同卡比較)
全載 VRAM--n-cpu-moe 0接近 VRAM 上限系統正常上限取決於 VRAM 頻寬
中度卸載--n-cpu-moe ~20顯著下降上升至 10 GB 級較全載小幅下降
重度卸載--n-cpu-moe ~30大幅下降上升較多較全載明顯下降
極限卸載--n-cpu-moe ~40接近最低上升最多較全載大幅下降

事實查核註:上表是趨勢示意、不是經本文系統實測的數值。實際數值依顯卡型號、PCIe 版本、CUDA backend、GGUF 量化版本、-ngl 設定、context 長度與 batch size 變化、建議用 llama-bench 或實際工作流校準。

社群常見的觀察是:MoE 卸載對生字速度的衰減幅度、相對於「Dense 模型把同樣比例的層卸載到 CPU」較小、原因是 MoE 每 token 只啟用少數專家、PCIe 上的權重傳輸量也較少;具體幅度依模型架構(active parameter 比例、專家數)變化。

設計責任

理解 MoE 卸載後、可以解釋三個 PC 場景的現象:16GB VRAM 卡能載入 30B 級 MoE 模型(透過部分卸載而非全載 VRAM)、PC 場景 64GB RAM 相對 32GB 在 MoE 卸載空間上明顯更寬裕(可卸載更多層)、Mac 統一記憶體場景較少需要「卸載」這個概念(VRAM 跟 RAM 共用、不需要在兩個區域之間搬資料)。

設定 PC 推論伺服器時、卸載層數通常跟 KV cache 量化、context 長度、併發數一起調:先估算想開的 context 長度、扣掉 KV cache 體積算出 VRAM 餘量、再選卸載層數讓模型剛好放得進。詳見 5.0 VRAM + RAM 分層預算