<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CPU Inference on 凱凱的技術筆記</title><link>https://lalio.dpdns.org/tags/cpu-inference/</link><description>Recent content in CPU Inference on 凱凱的技術筆記</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lalio.dpdns.org/tags/cpu-inference/index.xml" rel="self" type="application/rss+xml"/><item><title>十年前的 Xeon 伺服器，也能跑得動 260 億參數的 Gemma 4</title><link>https://lalio.dpdns.org/posts/gemma-4-on-a-2016-xeon/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://lalio.dpdns.org/posts/gemma-4-on-a-2016-xeon/</guid><description>&lt;h2 id="引言一台不該跑-ai的機器">引言：一台「不該跑 AI」的機器&lt;/h2>
&lt;p>這篇文章是 point.free 上一篇 Gemma 4 系列的最後一篇——前面兩篇講了怎麼把 Gemma 4 的 MTP drafter 量化、怎麼跟 verifier 配對，而這一篇要回答一個更刁鑽的問題：&lt;/p>
&lt;p>&lt;strong>「把這些成果丟到一台根本沒有資格跑 AI 的機器上，會怎樣？」&lt;/strong>&lt;/p>
&lt;p>作者的硬體規格聽起來像是一台從墳墓裡挖出來的古董：&lt;/p>
&lt;ul>
&lt;li>CPU：Intel Xeon E5-2620 v4（2016 年產，約為當前筆電 CPU 的五分之一慢）&lt;/li>
&lt;li>記憶體：128 GB DDR3（頻寬只有最新筆電 RAM 的五分之一到六分之一）&lt;/li>
&lt;li>GPU：無（連內顯都沒有）&lt;/li>
&lt;/ul>
&lt;p>換作一般工具，比如 ollama，直接放棄。但這篇文章的作者說：「等等，聽我說完……」&lt;/p>
&lt;hr>
&lt;h2 id="核心問題記憶体牆memory-wall">核心問題：記憶体牆（Memory Wall）&lt;/h2>
&lt;p>要理解這篇文章的精髓，先搞懂一個概念——&lt;strong>LLM 推理的瓶頸不在運算能力，而在記憶體頻寬&lt;/strong>。&lt;/p>
&lt;p>當你使用 ChatGPT 看著文字逐字流出時，你看到的是「decoder pass」。在這個階段，處理器要不斷把龐大的模型權重從記憶體拉進 CPU cache 才能計算下一個 token。處理器的運算速度其實很快，但它大部分時間都在等記憶體傳輸——這就叫「記憶體受限」（memory-bound），而非「運算受限」（compute-bound）。&lt;/p>
&lt;p>這就是著名的「記憶体牆」問題。不管你用的是 2016 年的 Xeon 還是最新的 H100，這堵牆都在那裡。&lt;/p>
&lt;p>所以，直接拿預設參數跑 llama-cli 在 DDR3 機器上會慢到令人發指。解法是什麼？把 ik_llama.cpp 能用的優化選項全部拉滿。&lt;/p>
&lt;hr>
&lt;h2 id="那串魔法咒語">那串「魔法咒語」&lt;/h2>
&lt;p>作者甩出了一長串 llama-cli 參數，看起來像中世紀巫師的咒語：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>llama-cli &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --model gemma-4-26B-A4B-it-Q8_0.gguf &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --model-draft wikitext-2-raw_ik-llama-mtp_drafter-conservative/gemma-4-26B-A4B-it-assistant-Q8_0.gguf &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --spec-type mtp --draft-max &lt;span style="color:#ae81ff">3&lt;/span> --draft-p-min 0.0 --spec-autotune &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -cnv --color --jinja --special &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -sm graph -smgs -sas -mea &lt;span style="color:#ae81ff">256&lt;/span> --split-mode-f32 &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --temp 0.7 -t &lt;span style="color:#ae81ff">8&lt;/span> --parallel &lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --cpu-moe --merge-up-gate-experts &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --flash-attn on --mla-use &lt;span style="color:#ae81ff">3&lt;/span> &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> --mlock --run-time-repack --no-kv-offload
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>25 個參數，一半沒有文件說明，四分之一會靜默失敗。這就是作者所說的「可用性的護城河」（usability moat）——黑盒工具讓你看不見這些，但也讓你無法優化。&lt;/p></description></item></channel></rss>