<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[【詳細教程】本地 27B 主推理 + MiMo 壓縮外判：一套省 token、唔卡機、無人看守的              Hermes + llama.cpp 系統（RTX 3080 20GB 實戰複製指南）]]></title><description><![CDATA[<h1>================================================================================<br />
【詳細教程】本地 27B 主推理 + MiMo 壓縮外判：一套省 token、唔卡機、無人看守的<br />
Hermes + llama.cpp 系統（RTX 3080 20GB 實戰複製指南）</h1>
<p dir="auto">首先感謝上面3090 mimo壓縮的想法,然後融合了大家的設定,下面若果大家有什麼意見歡迎提供給我參考</p>
<p dir="auto">作者實機：Intel Xeon E5-2696 v4（22C/44T）＋ NVIDIA RTX 3080 20GB ＋ 121GB RAM ＋ Ubuntu<br />
本文所有數字都係實測（<a href="http://bench.py" rel="nofollow ugc">bench.py</a> 固定 prompt），唔靠口講。</p>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
0. 呢個系統解決咩問題<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
跑本地大模型做 Agent 有兩個痛點：</p>
<ol>
<li>長對話觸發「上下文壓縮」時，本地 GPU 要埋頭做摘要 → 對話卡 1–2 分鐘，甚至卡死控制流</li>
<li>主推理放雲端 → token 燒得飛快</li>
</ol>
<p dir="auto">解決方案：主推理全本地（0 外部 token），只有「壓縮」外判去 Xiaomi MiMo 最平嘅模型<br />
（mimo-v2.5，Token Plan），配合自己 A/B 實測嘅提速參數。全套仲加咗：Harness 守門<br />
（防自問自答）、2H 互救（自動止血）、watchdog（無人看守）。</p>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ol>
<li>系統架構總覽<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
┌─────────────────────────────────────────────┐<br />
│ Hermes Agent（gateway，Telegram）            │<br />
│  主推理 → 本地 llama.cpp（127.0.0.1:8081）   │<br />
│  壓縮    → MiMo token-plan-sgp（mimo-v2.5）  │<br />
├─────────────────────────────────────────────┤<br />
│ DoubleH Harness（127.0.0.1:17171）           │<br />
│  build_context（規劃）＋ record_result（存證）│<br />
│  harness-gate 15（硬門檻，防幻覺）           │<br />
├─────────────────────────────────────────────┤<br />
│ guardian watchdog + failover + 2h-rescue     │<br />
│  （服務死咗自動 restart，有 cooldown）       │<br />
└─────────────────────────────────────────────┘</li>
</ol>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
2. 硬件／軟件清單<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
硬件：Xeon E5-2696 v4（22C/44T）｜RTX 3080 20GB｜121GB RAM｜Ubuntu（Driver 595.84）<br />
軟件：</p>
<ul>
<li>llama.cpp：自編 master（commit cb30059，CUDA 12.4）</li>
<li>模型：Qwen3.8-27B-Uncensored-Q4_K_M.gguf（27.3B，Q4_K_M 約 16.8GB，GGUF 內置 MTP nextn head）</li>
<li>Hermes Agent（doubleh fork）</li>
<li>Xiaomi MiMo Token Plan（mimo-v2.5，token-plan-sgp 節點）</li>
<li>systemd user services（llama-qwen38 / hermes-gateway）+ guardian watchdog + 2h-rescue.timer</li>
</ul>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
3. Step 1：模型 + llama.cpp<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ol>
<li>下載 Qwen3.8-27B 嘅 GGUF（Q4_K_M 類；留意模型檔要帶 MTP tensors：可以<br />
<code>strings 模型.gguf | grep nextn</code> 確認有 <code>blk.*.nextn.*</code> 先有 MTP 加速）</li>
<li>編譯 llama.cpp（CUDA）：
<h1>冇系統 cmake 都冇問題——用 pip 裝到自家 venv，唔使 sudo</h1>
python3 -m venv ~/llama_autotune/buildenv<br />
~/llama_autotune/buildenv/bin/pip install cmake<br />
cd ~/llama.cpp &amp;&amp; git pull<br />
~/llama_autotune/buildenv/bin/cmake -B build -DLLAMA_CUDA=ON -DCMAKE_BUILD_TYPE=Release<br />
~/llama_autotune/buildenv/bin/cmake --build build --target llama-server -j 44</li>
<li>確認旗標存在先好加：<code>llama-server --help | grep -E "spec-type|kv-offload|reasoning-effort"</code><br />
—— 版本冇嘅旗標唔好硬加（會 NOT READY）</li>
</ol>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
4. Step 2：高速啟動參數（實測重點，一個一個講）<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
llama-server 啟動參數（Hermes 主模型，ctx 必須 ≥64K）：<br />
--ctx-size 65532 --flash-attn on --kv-offload <br />
--threads 24 --threads-batch 40 --batch-size 4096 --ubatch-size 256 <br />
--spec-type draft-mtp --spec-draft-n-max 2 <br />
--reasoning-budget 4096 --reasoning-effort low --reasoning-preserve <br />
--cache-type-k q4_0 --cache-type-v q4_0 --parallel 1 --n-gpu-layers 99</p>
<p dir="auto">每個旗標嘅實測效果：</p>
<ul>
<li>★ --kv-offload：KV cache 放 RAM。短/中 context 解碼快 2.5–3.5 倍（7.8 → ~40 tok/s）。<br />
長 context（4K tokens）仍有 24.5 t/s。呢個係全個調校最大嘅單一發現。</li>
<li>★ --spec-type draft-mtp --spec-draft-n-max 2：用模型內置 MTP head 做投機解碼<br />
（+33%~145%）。實測 draft acceptance 72%。n-max 2 喺 20GB 卡係 sweet spot<br />
（n-max 1 得 12.18 t/s，n-max 2 有 12.50 t/s；44 threads 會暴跌 75%！）</li>
<li>--reasoning-budget 4096：cap thinking token，防止空思考吞晒速度。</li>
<li>--reasoning-effort low：thinking 深度鎖 low。實測 thinking tokens 減 21%–75%，<br />
質素冇跌（簡單推理題照答啱）。</li>
<li>--threads 24 / --threads-batch 40：Xeon 22C 實測 sweet spot。<br />
<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=301515bb865" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title="⚠" alt="⚠" /> 陷阱：threads-batch 44（含 hyperthreading）會暴跌到 3 t/s（-75%）！</li>
<li>--batch-size 4096 / --ubatch-size 256：prefill 效率。</li>
<li>--cache-type-k/v q4_0：KV 量化要 K/V 對稱！混搭（K q8 / V q4）會令 flash<br />
attention 靜默回退、速度斷崖但唔報錯。</li>
<li>ctx 65532：Hermes 主模型硬要求 ≥64K（agent_init.py MINIMUM_CONTEXT_LENGTH），<br />
設 8K 會令 gateway 起唔到。</li>
</ul>
<p dir="auto">提速流程（唔靠網上抄參數）：</p>
<ol>
<li>固定 bench：~/llama_autotune/bench.py --mode low / --mode e2e（同一個 prompt）</li>
<li>一次只改一個參數，每次 backup unit + restart + READY + bench</li>
<li>退化 ≥15% 或 NOT READY → 自動回退（autotune 腳本做 KEEP/REVERT）</li>
<li>長上下文 smoke test（至少 4K tokens）——避免「只短 prompt 快」</li>
<li><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=301515bb865" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title="⚠" alt="⚠" /> 測速前閂 Chrome/Firefox：桌面 compositor + 瀏覽器會偷 GPU 頻寬，<br />
decode 靜默減半（38 t/s → 9 t/s），唔好誤判係參數問題</li>
</ol>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
4.5 性能提升總結（系統有幾勁——全部實測數字）<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
【tok/s 進化旅程】（同一 <a href="http://bench.py" rel="nofollow ugc">bench.py</a> 固定 prompt）<br />
階段                                  短輸出 tok/s     備註<br />
─────────────────────────────────────────────────────────────<br />
最初（舊 bundle、未調參）              7.77            長輸出測試</p>
<ul>
<li>MTP（draft-mtp n-max 2）            12.50           舊 bundle</li>
<li>新 binary（cb30059）+ --kv-offload  ~38–46          大躍進</li>
<li>--reasoning-effort low              36–40           thinking 減 21–75%<br />
─────────────────────────────────────────────────────────────<br />
而家實測（今日，GPU 7% 負載）         e2e ~36–39 / low ~34<br />
4K 長上下文 smoke                     ~24.5<br />
→ 由頭到尾淨提升 ≈ 5 倍</li>
</ul>
<p dir="auto">【MiMo 壓縮威力】<br />
細 context 摘要：~2 秒<br />
158K tokens 大 context：8.4 秒（超真實 109K session 需求）<br />
vs 以前本地 GPU 做壓縮：卡 60–120 秒 → 而家秒級完成，對話唔再卡</p>
<p dir="auto">【成個系統有幾勁（一句總結）】<br />
主推理 0 外部 token（全本地）＋ 壓縮秒級外判 MiMo ＋ 64K 長對話自動維持<br />
＋ 無人看守（watchdog + 2H 互救 + gate 守門防幻覺）＝ 每日可以唔使理佢，<br />
淨係喺 Telegram 用，token 幾乎淨係 MiMo 壓縮嗰啲小額。</p>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
5. Step 3：MiMo Token Plan 設定<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ol>
<li>買 Token Plan（最細檔就夠），攞到 tp- 開頭 key 同區域節點 URL。<br />
注意：key 係區域綁定！實測 cn/ams 節點 401，只有 sgp 節點 200。</li>
<li>Key 只放本機 env 檔，嚴禁貼 chat / config / log：<br />
/etc/hermes_secrets/mimo_tokenplan.env（chmod 600）：<br />
MIMO_API_KEY=tp-xxxxx<br />
MIMO_BASE_URL=<a href="https://token-plan-sgp.xiaomimimo.com/v1" rel="nofollow ugc">https://token-plan-sgp.xiaomimimo.com/v1</a><br />
MIMO_MODEL=mimo-v2.5</li>
<li>Hermes config.yaml 接線（config 唔寫 key 明文）：<br />
auxiliary:<br />
compression:<br />
provider: custom<br />
base_url: <a href="https://token-plan-sgp.xiaomimimo.com/v1" rel="nofollow ugc">https://token-plan-sgp.xiaomimimo.com/v1</a><br />
model: mimo-v2.5<br />
api_key_env: MIMO_API_KEY<br />
（如果你 Hermes 版本有原生 xiaomi provider，用 provider: xiaomi 都得；<br />
key 會由 XIAOMI_API_KEY env 讀。以 agent.log 實際輸出為準，唔好靠估）</li>
<li>驗證「真係用緊 MiMo」（唔係「key 檔存在」就算）：<br />
grep "Auxiliary compression: using" ~/.hermes/logs/agent.log
<h1>應該見到：using custom (mimo-v2.5) at <a href="https://token-plan-sgp" rel="nofollow ugc">https://token-plan-sgp</a>...</h1>
<h1>壓縮成功會見到：commit_status=committed</h1>
<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=301515bb865" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title="⚠" alt="⚠" /> 真證據喺 agent.log，唔喺 journald；/proc/&lt;pid&gt;/environ 都唔可靠<br />
（gateway 係 per-turn 載入 .env）</li>
<li>大 session 陷阱：aux call 實測要 33–40s（大 session 更耐）＞ 預設 hygiene<br />
timeout 30s → 會狂 timeout。修法：<br />
compression:<br />
hygiene_timeout_seconds: 120</li>
</ol>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
6. Step 4：Hermes 接入<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
config.yaml：<br />
model:<br />
provider: custom<br />
base_url: <a href="http://127.0.0.1:8081/v1" rel="nofollow ugc">http://127.0.0.1:8081/v1</a><br />
api_key: anything          # 本地 endpoint 唔驗證<br />
context_length: 65532<br />
real_context_length: 65532<br />
改完：systemctl --user restart hermes-gateway.service</p>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
7. Step 5：無人看守（watchdog + 2H 互救）<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ul>
<li>guardian watchdog：監察 llama-qwen38@8081 + hermes-gateway，down 自動 restart<br />
＋ failover（local <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2194.png?v=301515bb865" class="not-responsive emoji emoji-android emoji--left_right_arrow" style="height:23px;width:auto;vertical-align:middle" title="↔" alt="↔" /> 雲端緊急互切，healthy 5 次自動回滾）</li>
<li>2h-rescue.timer（每分鐘）：llama / gateway / Harness 邊個死 restart 邊個，<br />
帶 lock + cooldown（10 分鐘上限 2 次）防重啟風暴</li>
<li>Harness 守門：任何多步/高風險操作前 <code>harness-gate 15</code>（FAIL 即停）；<br />
做完 <code>record_result</code> 存證（做咗乜、證據、回退點）</li>
</ul>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
8. 驗收清單（全部命令）<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
curl -s <a href="http://127.0.0.1:8081/v1/models" rel="nofollow ugc">http://127.0.0.1:8081/v1/models</a>                    # 本地模型 list<br />
python3 ~/llama_autotune/bench.py --mode low               # 短輸出 tok/s<br />
python3 ~/llama_autotune/bench.py --mode e2e               # 端到端 tok/s<br />
grep "Auxiliary compression: using" ~/.hermes/logs/agent.log   # MiMo 路由證據<br />
grep commit_status ~/.hermes/logs/agent.log | tail         # 壓縮成功=committed<br />
systemctl --user is-active 2h-rescue.timer                 # 互救 timer<br />
harness-gate 15                                            # 守門（有 planning 證據先 PASS）</p>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
9. 踩過嘅坑（時間線）<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ol>
<li>舊 session 205K tokens 撞爆本地 64K → HTTP 400「exceeds context size」→ 長對話<br />
一定要靠壓縮（或開新 session）維持喺 64K 內</li>
<li>threads-batch 44（HT）→ 3 t/s（-75%）</li>
<li>KV 混搭 K q8 / V q4 → flash attention 靜默回退</li>
<li>桌面 Chrome/Firefox → GPU 94% → decode 減半（測速前要閂）</li>
<li>MiMo key 區域綁定（sgp 先得）；key 貼 chat 過＝洩漏風險</li>
<li>hygiene timeout 30s 唔夠大 session 嘅 aux call（33–40s）</li>
<li>pkill -f 打到自己個 shell（pattern 匹配到自己）→ 用 pgrep -x 精確名</li>
</ol>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
10. 風險／回退<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<ul>
<li>MTP 屬實驗功能：異常時刪走 --spec-type draft-mtp --spec-draft-n-max 2 → 回退</li>
<li>--kv-offload 食少 VRAM 但 64K 全滿 decode 未測極限；同 ComfyUI 唔好同時開</li>
<li>effort low 係全局：複雜推理任務質素有機會跌，覺得變蠢就刪 flag 或改 medium</li>
<li>每個改動都有 backup（~/.config/systemd/user/backup_llama_qwen38/）＋ revert 命令</li>
</ul>
<p dir="auto">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
11. 致謝／參考連結<br />
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<br />
特別感謝以下文章同項目（參數同思路大多源自佢哋）：</p>
<ul>
<li>sudoingX/qwen38-mtp（MTP 旗標發現同實測）: <a href="https://github.com/sudoingX/qwen38-mtp" rel="nofollow ugc">https://github.com/sudoingX/qwen38-mtp</a></li>
<li>Habr 實戰「Qwen3.6-27B 推到 73 tok/s」: <a href="https://habr.com/en/articles/1042716/" rel="nofollow ugc">https://habr.com/en/articles/1042716/</a></li>
<li>unsloth Qwen3.6-27B MTP GGUF 討論: <a href="https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF/discussions/6" rel="nofollow ugc">https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF/discussions/6</a></li>
<li><a href="http://lcz.me" rel="nofollow ugc">lcz.me</a>「RTX 3080 20G + llama.cpp + Hermes 實戰心得」: <a href="https://lcz.me/topic/1020/">https://lcz.me/topic/1020/</a></li>
<li>MiMo Token Plan 官方文檔: <a href="https://mimo.mi.com/docs/zh-CN/tokenplan/Token%20Plan/quick-access" rel="nofollow ugc">https://mimo.mi.com/docs/zh-CN/tokenplan/Token Plan/quick-access</a></li>
<li>llama.cpp 官方: <a href="https://github.com/ggerganov/llama.cpp" rel="nofollow ugc">https://github.com/ggerganov/llama.cpp</a></li>
</ul>
<h1>有問題歡迎交流；參數請以自己機器的 bench 為準——硬件唔同結果會差好多。</h1>
]]></description><link>https://lcz.me/topic/1370</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 22:53:35 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1370.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Aug 2026 18:41:37 GMT</pubDate><ttl>60</ttl></channel></rss>