Qwen3.5-4B:SSD Streaming 低記憶體 CPU 推理
本 repo 是推論專案(patch、量測工具與驗證證據),不包含模型權重。模型位於
unsloth/Qwen3.5-4B-GGUF,
使用 Qwen3.5-4B-Q4_K_M.gguf(約 2.553 GiB)。
這是 dense/hybrid 模型的 SSD Streaming + KV SSD Paging 實作,不是 MoE expert paging,也不是 EPQ。權重透過 mmap 與背景 reclaim 留在 SSD,KV cache 可使用檔案 mmap;RAM 只保留運算所需資料。
核心實測
測試設定為 1 GiB 總 RAM、swap=0、1024 context:
| 配置 | 峰值總 RSS | Decode | Prefill | 結果 |
|---|---|---|---|---|
| 權重保留 page cache(建議) | 0.384 GiB | 2.67 tok/s | 7.72 tok/s | ✅ |
| 權重頁全丟回 SSD | 0.226 GiB | 0.12 tok/s | 0.94 tok/s | ✅ |
| 權重常駐 RAM、KV SSD | 2.77 GiB | 2.82 tok/s | 6.21 tok/s | ❌ 超過 1 GiB |
在這台測試機上,權重保留 page cache 仍符合約束,且比全丟 SSD 快約 22 倍。 解除記憶體限制只快約 6%,但 RSS 增加到 7 倍以上。這是單一機器與 workload 的實測,不是跨硬體保證。
模型架構與記憶體
Qwen3.5 是 hybrid 架構:32 層中 8 層為 full attention,其餘 24 層為 linear/SSM。 在 1024 context 時:
| 資料 | 位置 |
|---|---|
| Q4_K_M 權重,2.553 GiB | SSD mmap |
| f16 KV,約 32 MiB | SSD-backed mmap |
| SSM state、compute buffer、執行檔 | RAM |
262144 context 的 KV 即使使用 q4_0 也約 2.25 GiB,超過 1 GiB 部署預算; 目前文件只對 1K context 的驗證結果負責。
使用方法
git clone https://huggingface.co/HelloSun/qwen35-4b-ssd-streaming
cd qwen35-4b-ssd-streaming
# 編譯、下載模型、啟動並驗證 1K context
./installpi.sh
# 只驗證
./installpi.sh --validate-only
# 重新跑 benchmark matrix
./bench.sh
可調整的主要環境變數:MEMORY_LIMIT_GB、LLAMA_THREADS、LLAMA_CONTEXT、
LLAMA_MMAP_RELEASE、LLAMA_KV_SSD。公開模型不需要 HF token;若設置
HF_TOKEN,只應以環境變數傳給下載工具。
Patch 與限制
| Patch | 功能 |
|---|---|
0001-ssd-mmap-release.patch |
背景釋放 mmap 權重頁 |
0002-kv-ssd-pager.patch |
將 KV cache 放到 SSD 檔案 mmap |
llama.cpp 固定 commit 為 0504396140d1c882f5f6ee34466a42db7ae90114。
總 RSS、page cache 與 swap 必須在實際部署主機上量測;單看匿名 RSS 不足以證明合規。
證據
validate/validation.json:1K 驗證validate/bench.jsonl:速度/記憶體矩陣STATUS.md:技術決策與進度REPRODUCE.md:完整重現指引