接續:Jev 社群外掛生態研究(X 20專案清單)- 2026-09-21、blog《兩顆本地 LLM 協同作業實測:Muse-Glimmer × Qwen3.8》(2026-08-16)

結論先行:Bonsai-2-27B 已正式取代 Apodex-1.1-mini 佔據 :8083,生成速度是 NVFP4 主力的 ~2.7 倍,m-a-s 實測「synthesize 輪」速度勝過 Muse baseline(585s vs 942s)且品質相當;critique 輪因 8080 審查者速度瓶頸未在時限內完成,已定位根因。

一、模型是什麼

  • prism-ml/Ternary-Bonsai-2-27B-gguf:Qwen3.8-27B 的 ternary 量化版(與 :8080 主力同一 base)
  • 真正的 1.72 bits/weight({−1,0,+1} + 每 128 權重一個 FP16 scale,Hadamard rotated basis),官方宣稱保留 98.2% FP16 智力(14 個 thinking 基準平均 84.78,vs 傳統 IQ2_XXS 的 72.59)
  • 262K context(75% linear attention)、vision tower 以 0.63GB mmproj 選載
  • 兩種打包:PTQ1_0(1.75bpw,5.95GB)/ PQ2_0(2.13bpw,7.21GB)——已各下載一份備用

二、部署經驗(踩坑全記錄)

  1. 原版 llama.cpp 拒載:ggml-org/llama.cpp(b11.524,2026-08 build)無法解析 PTQ1_0/PQ2_0 packing。必須用 PrismML fork(github.com/PrismML-Eng/llama.cpp)——其最新 commit 就是 CUDA PTQ1_0 MMQ tile 優化。fork 以 ~/mllib-bonsai 獨立建置(-DGGML_CUDA=ON),不干擾 ~/mllib 生產環境。
  2. CUDA OOM 於 cudaSetDevice:初次試載失敗不是模型問題,是三個現役 llama-server 已吃滿統一記憶體。解法 = 停掉 8083 Apodex(本來就是被取代對象)再載。
  3. systemd 化:llama-server-bonsai.service(user unit,含 OOMScoreAdjust、Restart=on-failure),ctx 262144、KV q4_0、parallel 1、mmproj Q8_0。
  4. 每日重啟:restart_llama_bonsai_daily.sh + timer 04:20(錯開 8080 的 04:00 錯峰),重啟後 health check + TG 通知。已確認 8080 的 restart 腳本不涉及 8083,不會互踩。
  5. thinking model 行為:推理在 reasoning_content、答案在 content(llama.cpp 分離)。max_tokens 要給足(推理也計入),否則 content 為空。
  6. 回滾路徑:Apodex 檔案原封不動在 ~/models/Apodex/,殺 8083 重啟舊指令即回滾。

三、NVFP4 vs Ternary 對照測速(同題、各兩輪、溫熱快取)

指標:8080 Qwen3.8-27B NVFP4 (15.5GB):8083 Bonsai PTQ1_0 (5.95GB)
生成速度5.2 / 6.1 tok/s14.4 / 16.5 tok/s(~2.7×)
Prompt 處理12,553 / 1,270 ms312 / 334 ms(~4×)
權重記憶體15.5GB5.95GB

原理:ternary packed weights 直接被 kernel 消費不展開,weight traffic 極小 → 記憶體頻寬瓶頸大幅緩解。NVFP4 的強項(4-bit 精度)在頻寬受限場景反而是負擔。

⚠ 環境變數註記(2026-09-23):測試當天氣候炎熱,DGX Spark 有 CPU 降頻至 ~55%、GPU 降頻至 ~60% 的熱節流現象。上表數據為同機同條件下的相對對照(Bonsai vs NVFP4 的 2.7×/4× 差距與結論不受影響),但絕對值(14–16 tok/s、6 tok/s 等)比機器涼爽時的滿血表現偏低,不宜直接引用為 DGX Spark 的標準效能基準。m-a-s 各輪耗時同理——輪內相對比較有效,與 8/16 blog baseline 的絕對秒數對照時需打折看待(該次為不同季節/溫度)。

品質觀察:簡單事實題 Bonsai 出現過一次錯答(把 P/E 講成 P/B,第二輪即正確)——ternary 量化的代價。分工建議:精確事實/審查走 8080 NVFP4;起草/規模化/輔助任務走 8083 Bonsai。

四、m-a-s 四輪任務對照(multi-agent-synthesizer,Bonsai 接任 Muse 角色)

config:[muse](起草者)→ 8083 Bonsai;[qwen](審查者)→ 8080 NVFP4;[synthesizer] → 8080。

模式Blog baseline(Muse×Qwen, 8/16)本輪(Bonsai×Qwen, 9/23)備註
synthesize(Flutter 計數器+Riverpod+Logger DI)942s / 品質 8.5585s / 品質 ≈8.5完整可跑:StateNotifier + abstract DataLogger + 建構子注入 + MockDataLogger 可測性說明,零截斷
pipeline(Qwen 出 JSON 規格 → Bonsai 實作 Flutter Web 圖片上傳+離線佇列)1020s / 品質 71444s / 品質 ≈7.51202 行完整實作(狀態機/Hive 佇列/重試/生產注意事項),零截斷
critique(Bonsai 起草 → Qwen 審查修正)~600s / 品質 8.5❌ 兩次未完成見下
critique —reverse—❌ 未跑(跟隨 critique 失敗而停)—

critique 失敗根因(兩層):

  1. 第一跑:Bonsai thinking 鏈 + 完整程式碼吃光 max_tokens=16384 → content 空輸出(0 bytes,2400s timeout)——與 blog 中 Qwen 的教訓完全同款。修法:config 對 muse 加 chat_template_kwargs = { enable_thinking = false }。

  2. 第二跑(thinking off)仍未在 2400s 內完成:真正的瓶頸是 8080 審查者只有 ~6 tok/s,16K tokens 的全篇修正版要 45 分鐘以上。timeout 是我們 benchmark 腳本設的,不是模型壞了。

修正建議(下次重跑):critique 模式 timeout 放寬到 5400s,或 max_tokens 降到 8192,或審查階段改交給另一顆 Bonsai(用兩顆同模型互審會失去異質觀點,不建議)。

五、結論

  1. Bonsai-2-27B 以 1/3 記憶體、2.7× 速度,提供了接近 NVFP4 主力的智力——Apodex 槽位的正確繼任者,「小而快但不是玩具」。
  2. m-a-s 的 synthesize 輪證明它能在真實多模型協作中勝任起草角色(585s vs Muse 的 942s,品質持平)。
  3. 8080 NVFP4 仍是品質天花板(事實正確性、審查深度),但速度瓶頸真實存在——若未來 Qwen3.8 系也出 ternary 思考版,值得整組換。
  4. 模型/腳本位置:模型 ~/models/Ternary-Bonsai-2-27B/;fork ~/mllib-bonsai/;service llama-server-bonsai.service;benchmark ~/ZCodeProject/multi-agent-synthesizer/benchmarks/;產出 outputs/20260923-*。