<?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>Mlx on Tarragon</title><link>https://tarrragon.github.io/blog/tags/mlx/</link><description>Recent content in Mlx on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/mlx/index.xml" rel="self" type="application/rss+xml"/><item><title>oMLX</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/omlx/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/omlx/</guid><description>&lt;p>oMLX 的核心概念是「&lt;strong>以 MLX 為基礎、針對 Apple Silicon 長 context 場景優化的推論伺服器路線&lt;/strong>」。它不是 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX&lt;/a> 這個運算框架本身，也不是 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/mtp/" data-link-title="Multi-Token Prediction (MTP)" data-link-desc="Google 為 Gemma 系列釋出的 speculative decoding 工程化實作">MTP&lt;/a> 這類解碼技巧，而是把 MLX serving、長 context 與 KV cache 管理組合成服務層能力。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>oMLX 位在 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/three-layer-architecture/" data-link-title="Three-Layer Architecture" data-link-desc="把本地 LLM 工具拆成介面層、推論伺服器層、模型權重層的基礎心智模型">three-layer architecture&lt;/a> 的伺服器層。它的差異化重點通常是 Apple Silicon 最佳化、長 context prefill 成本、SSD-backed KV cache 或相關 cache 策略；它對上仍可提供 API，對下仍載入模型權重。&lt;/p>
&lt;h2 id="可觀察訊號與例子">可觀察訊號與例子&lt;/h2>
&lt;p>看到文章把 oMLX 跟 Ollama、LM Studio、llama.cpp server 放在同一組比較時，討論的是 serving 路線。看到它跟 MLX / MTP 並列時，判讀重點是「框架、解碼技巧、伺服器」三者層級不同。&lt;/p>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>評估 oMLX 時，重點是工作流是否真的受長 context 與 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT&lt;/a> 影響；短 prompt 對話通常未必需要特化 serving。下一步路由是 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX&lt;/a>、&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/kv-cache/" data-link-title="KV Cache" data-link-desc="已處理 token 的 attention 中間結果暫存：避免重算、加速後續生成">KV Cache&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/llm/00-foundations/mlx-mtp-omlx/" data-link-title="0.4 MLX / MTP / oMLX 的區別" data-link-desc="三個常被混為一談的術語：framework、加速技巧、特化 server，疊加而非互斥">0.4 MLX / MTP / oMLX&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>oMLX 的核心概念是「<strong>以 MLX 為基礎、針對 Apple Silicon 長 context 場景優化的推論伺服器路線</strong>」。它不是 <a href="/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX</a> 這個運算框架本身，也不是 <a href="/blog/llm/knowledge-cards/mtp/" data-link-title="Multi-Token Prediction (MTP)" data-link-desc="Google 為 Gemma 系列釋出的 speculative decoding 工程化實作">MTP</a> 這類解碼技巧，而是把 MLX serving、長 context 與 KV cache 管理組合成服務層能力。</p>
<h2 id="概念位置">概念位置</h2>
<p>oMLX 位在 <a href="/blog/llm/knowledge-cards/three-layer-architecture/" data-link-title="Three-Layer Architecture" data-link-desc="把本地 LLM 工具拆成介面層、推論伺服器層、模型權重層的基礎心智模型">three-layer architecture</a> 的伺服器層。它的差異化重點通常是 Apple Silicon 最佳化、長 context prefill 成本、SSD-backed KV cache 或相關 cache 策略；它對上仍可提供 API，對下仍載入模型權重。</p>
<h2 id="可觀察訊號與例子">可觀察訊號與例子</h2>
<p>看到文章把 oMLX 跟 Ollama、LM Studio、llama.cpp server 放在同一組比較時，討論的是 serving 路線。看到它跟 MLX / MTP 並列時，判讀重點是「框架、解碼技巧、伺服器」三者層級不同。</p>
<h2 id="設計責任">設計責任</h2>
<p>評估 oMLX 時，重點是工作流是否真的受長 context 與 <a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a> 影響；短 prompt 對話通常未必需要特化 serving。下一步路由是 <a href="/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX</a>、<a href="/blog/llm/knowledge-cards/kv-cache/" data-link-title="KV Cache" data-link-desc="已處理 token 的 attention 中間結果暫存：避免重算、加速後續生成">KV Cache</a> 與 <a href="/blog/llm/00-foundations/mlx-mtp-omlx/" data-link-title="0.4 MLX / MTP / oMLX 的區別" data-link-desc="三個常被混為一談的術語：framework、加速技巧、特化 server，疊加而非互斥">0.4 MLX / MTP / oMLX</a>。</p>
]]></content:encoded></item><item><title>0.4 MLX / MTP / oMLX 的區別</title><link>https://tarrragon.github.io/blog/llm/00-foundations/mlx-mtp-omlx/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/00-foundations/mlx-mtp-omlx/</guid><description>&lt;p>MLX、MTP、oMLX 是本地 LLM 生態中最容易被網路文章混為一談的三個術語。它們分別屬於不同的技術層級：MLX 是 Apple 自家的數值運算 framework，MTP 是一種加速技巧，oMLX 是一個建在 MLX 上的特化推論伺服器。三者&lt;strong>疊加而非互斥&lt;/strong>，可以同時存在於一套堆疊裡。&lt;/p>
&lt;p>把這三個分清楚後，看到「MLX 加速 50%」「MTP 整合到 llama.cpp」「oMLX 用上 MTP」這類句子就能精準判讀。本章的責任是把每個術語放回正確的位置，再說明它們如何疊加。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後，你應該能：&lt;/p>
&lt;ol>
&lt;li>用一句話分別說清楚 MLX、MTP、oMLX 是什麼。&lt;/li>
&lt;li>看懂「MLX backend」「啟用 MTP」「用 oMLX 跑」這些句子。&lt;/li>
&lt;li>判斷三者組合的可行性與效果。&lt;/li>
&lt;li>避開把它們當成競爭關係的常見誤解。&lt;/li>
&lt;/ol>
&lt;h2 id="mlxapple-的數值運算-framework">MLX：Apple 的數值運算 framework&lt;/h2>
&lt;p>&lt;strong>MLX&lt;/strong> 是 Apple 為 Apple Silicon 設計的數值運算 framework、類似 PyTorch 或 JAX 在 Mac 上的對應物（全名 Machine Learning eXchange、2023 年釋出）。它的責任是：&lt;/p>
&lt;ol>
&lt;li>在 CPU、GPU、Neural Engine 之間自動排程運算。&lt;/li>
&lt;li>利用統一記憶體（UMA）避免在記憶體層級之間搬資料。&lt;/li>
&lt;li>提供 lazy evaluation（延遲計算、把運算累積成圖再一次優化執行）與 graph optimization（自動合併多個運算、減少記憶體 round-trip）、讓相同的 Python 程式碼在 M1 ~ M4 上都能用上各代硬體優勢。&lt;/li>
&lt;li>提供 &lt;code>mlx.core&lt;/code>、&lt;code>mlx.nn&lt;/code> 等 Python API、可以寫訓練 / 推論程式。&lt;/li>
&lt;/ol>
&lt;p>MLX 的角色就是「跑神經網路用的底層數值庫」、把 server / 模型 / 加速技巧三個責任都留給上層工具去做。可以類比：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>主流生態&lt;/th>
 &lt;th>Apple Silicon 對應&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>PyTorch / JAX&lt;/td>
 &lt;td>MLX&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CUDA&lt;/td>
 &lt;td>Metal（MLX 在 GPU 上跑會用 Metal）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>NumPy&lt;/td>
 &lt;td>&lt;code>mlx.core&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hugging Face Transformers&lt;/td>
 &lt;td>&lt;code>mlx-lm&lt;/code>、&lt;code>mlx-community&lt;/code> 上的模型&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>MLX 的角色定位是「basic infrastructure」。要拿 MLX 跑 LLM，你需要：MLX framework + 一份用 MLX 寫的模型實作（如 &lt;code>mlx-lm&lt;/code> package）+ 模型權重（MLX format）+ 一個介面（CLI 或 server wrapper）。所有上層工具都站在 MLX 這塊地基上。&lt;/p>
&lt;p>接近真實的例子：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">pip install mlx-lm
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">mlx_lm.generate --model mlx-community/Llama-3.2-3B-Instruct-4bit --prompt &lt;span class="s2">&amp;#34;hi&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>這段命令會載入 MLX 格式的模型權重、用 MLX framework 在 Apple Silicon 上跑推論。但這只是 library 等級的呼叫、不是常駐伺服器；要做成 server 還需要再 wrap 一層（例如 &lt;code>mlx_lm.server&lt;/code> 或 oMLX）。&lt;/p>
&lt;h3 id="常見-mlx-誤用">常見 MLX 誤用&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>以為裝 MLX 就有 server&lt;/strong>：MLX 只是 library、要 expose HTTP API 需要再 wrap 一層（&lt;code>mlx_lm.server&lt;/code>、oMLX、或自己用 FastAPI 包）。&lt;/li>
&lt;li>&lt;strong>以為 MLX 跟 Metal 互斥&lt;/strong>：MLX 跑在 GPU 上會自動用 Metal、兩者是上下層關係、不是擇一。Metal 是 Apple 的 GPU 加速 API、MLX 是利用 Metal 的高階 framework。&lt;/li>
&lt;li>&lt;strong>以為 Ollama 用 MLX backend&lt;/strong>：Ollama 內部用 &lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">llama.cpp&lt;/a> 配 Metal、跟 MLX 沒關係。看到「Ollama 用 MLX 加速」要追問來源、多半是混淆。&lt;/li>
&lt;/ol>
&lt;h2 id="mtp一種加速技巧">MTP：一種加速技巧&lt;/h2>
&lt;p>&lt;strong>Multi-Token Prediction&lt;/strong>（MTP）的核心是「一次預測多個 token 的加速技巧」，本質上是 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/speculative-decoding/" data-link-title="Speculative Decoding" data-link-desc="用小模型猜未來 token、大模型並行驗證的加速技巧">speculative decoding&lt;/a> 的工程化實作。它的責任是：&lt;/p></description><content:encoded><![CDATA[<p>MLX、MTP、oMLX 是本地 LLM 生態中最容易被網路文章混為一談的三個術語。它們分別屬於不同的技術層級：MLX 是 Apple 自家的數值運算 framework，MTP 是一種加速技巧，oMLX 是一個建在 MLX 上的特化推論伺服器。三者<strong>疊加而非互斥</strong>，可以同時存在於一套堆疊裡。</p>
<p>把這三個分清楚後，看到「MLX 加速 50%」「MTP 整合到 llama.cpp」「oMLX 用上 MTP」這類句子就能精準判讀。本章的責任是把每個術語放回正確的位置，再說明它們如何疊加。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後，你應該能：</p>
<ol>
<li>用一句話分別說清楚 MLX、MTP、oMLX 是什麼。</li>
<li>看懂「MLX backend」「啟用 MTP」「用 oMLX 跑」這些句子。</li>
<li>判斷三者組合的可行性與效果。</li>
<li>避開把它們當成競爭關係的常見誤解。</li>
</ol>
<h2 id="mlxapple-的數值運算-framework">MLX：Apple 的數值運算 framework</h2>
<p><strong>MLX</strong> 是 Apple 為 Apple Silicon 設計的數值運算 framework、類似 PyTorch 或 JAX 在 Mac 上的對應物（全名 Machine Learning eXchange、2023 年釋出）。它的責任是：</p>
<ol>
<li>在 CPU、GPU、Neural Engine 之間自動排程運算。</li>
<li>利用統一記憶體（UMA）避免在記憶體層級之間搬資料。</li>
<li>提供 lazy evaluation（延遲計算、把運算累積成圖再一次優化執行）與 graph optimization（自動合併多個運算、減少記憶體 round-trip）、讓相同的 Python 程式碼在 M1 ~ M4 上都能用上各代硬體優勢。</li>
<li>提供 <code>mlx.core</code>、<code>mlx.nn</code> 等 Python API、可以寫訓練 / 推論程式。</li>
</ol>
<p>MLX 的角色就是「跑神經網路用的底層數值庫」、把 server / 模型 / 加速技巧三個責任都留給上層工具去做。可以類比：</p>
<table>
  <thead>
      <tr>
          <th>主流生態</th>
          <th>Apple Silicon 對應</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>PyTorch / JAX</td>
          <td>MLX</td>
      </tr>
      <tr>
          <td>CUDA</td>
          <td>Metal（MLX 在 GPU 上跑會用 Metal）</td>
      </tr>
      <tr>
          <td>NumPy</td>
          <td><code>mlx.core</code></td>
      </tr>
      <tr>
          <td>Hugging Face Transformers</td>
          <td><code>mlx-lm</code>、<code>mlx-community</code> 上的模型</td>
      </tr>
  </tbody>
</table>
<p>MLX 的角色定位是「basic infrastructure」。要拿 MLX 跑 LLM，你需要：MLX framework + 一份用 MLX 寫的模型實作（如 <code>mlx-lm</code> package）+ 模型權重（MLX format）+ 一個介面（CLI 或 server wrapper）。所有上層工具都站在 MLX 這塊地基上。</p>
<p>接近真實的例子：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">pip install mlx-lm
</span></span><span class="line"><span class="ln">2</span><span class="cl">mlx_lm.generate --model mlx-community/Llama-3.2-3B-Instruct-4bit --prompt <span class="s2">&#34;hi&#34;</span></span></span></code></pre></div><p>這段命令會載入 MLX 格式的模型權重、用 MLX framework 在 Apple Silicon 上跑推論。但這只是 library 等級的呼叫、不是常駐伺服器；要做成 server 還需要再 wrap 一層（例如 <code>mlx_lm.server</code> 或 oMLX）。</p>
<h3 id="常見-mlx-誤用">常見 MLX 誤用</h3>
<ol>
<li><strong>以為裝 MLX 就有 server</strong>：MLX 只是 library、要 expose HTTP API 需要再 wrap 一層（<code>mlx_lm.server</code>、oMLX、或自己用 FastAPI 包）。</li>
<li><strong>以為 MLX 跟 Metal 互斥</strong>：MLX 跑在 GPU 上會自動用 Metal、兩者是上下層關係、不是擇一。Metal 是 Apple 的 GPU 加速 API、MLX 是利用 Metal 的高階 framework。</li>
<li><strong>以為 Ollama 用 MLX backend</strong>：Ollama 內部用 <a href="/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">llama.cpp</a> 配 Metal、跟 MLX 沒關係。看到「Ollama 用 MLX 加速」要追問來源、多半是混淆。</li>
</ol>
<h2 id="mtp一種加速技巧">MTP：一種加速技巧</h2>
<p><strong>Multi-Token Prediction</strong>（MTP）的核心是「一次預測多個 token 的加速技巧」，本質上是 <a href="/blog/llm/knowledge-cards/speculative-decoding/" data-link-title="Speculative Decoding" data-link-desc="用小模型猜未來 token、大模型並行驗證的加速技巧">speculative decoding</a> 的工程化實作。它的責任是：</p>
<ol>
<li>用一個小模型（drafter）快速猜未來 N 個 token。</li>
<li>把這 N 個 token 一次餵給大模型（target），讓大模型並行驗證。</li>
<li>大模型保留它認同的 token 前綴，從第一個拒絕點繼續。</li>
</ol>
<p>MTP 是跑模型時的演算法層、跟伺服器與模型實作互相正交：任何推論伺服器都可以選擇實作或不實作 MTP、模型可以選擇有沒有官方 drafter、兩件事分離。</p>
<p>Google 為 Gemma 4 釋出官方 drafter 後，MTP 變成 Gemma 4 生態的標準配備。官方數據宣稱 coding 任務 2 ~ 3 倍加速；寫 code 的加速尤其明顯，因為 code 有大量可預測 pattern（縮排、括號、常見變數名），drafter 接受率高。</p>
<p>陷阱有三個：</p>
<ol>
<li><strong>MTP ≠ Gemma 4 限定</strong>。任何模型理論上都能用 speculative decoding；只是 Gemma 4 有官方 drafter、現成可用。其他模型要嘛社群自己訓 drafter，要嘛沒有。</li>
<li><strong>MTP 不一定加速所有任務</strong>。對沒有預測 pattern 的任務（如生成隨機 ID、加密文字），接受率低，反而會拖慢。寫 code 是甜蜜點。</li>
<li><strong>加速倍數受實作品質影響</strong>。網路上「MTP 加速 40%」這類來源不明數字常見；Google 官方數據是 2 ~ 3 倍，視任務而定。引用時要追到官方來源。</li>
</ol>
<p>實作層面、要用 MTP 需要：</p>
<ul>
<li>一個支援 speculative decoding 的伺服器（2026 年 5 月時 Ollama v0.23+ 已支援、LM Studio 跟 oMLX 也支援、llama.cpp 上游 speculative decoding 框架仍 beta）。</li>
<li>一個有 drafter 的模型、或自己組合 target + drafter pair。</li>
</ul>
<p>Ollama 在 2026/5/7 釋出的 v0.23.1 加入 Gemma 4 MTP 一鍵支援：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ollama run gemma4:31b-coding-mtp-bf16</span></span></code></pre></div><p>這個 model tag 內含 drafter，伺服器自動啟用 speculative decoding。</p>
<h2 id="omlx建在-mlx-上的特化伺服器">oMLX：建在 MLX 上的特化伺服器</h2>
<p><strong>oMLX</strong>（&ldquo;optimized MLX server&rdquo; 的縮寫，2024 年由社群釋出）的核心是「建在 MLX 之上、針對 coding agent 長 context 場景優化的推論伺服器」。它的責任是：</p>
<ol>
<li>用 MLX 當推論 backend，吃 Apple Silicon 統一記憶體優勢。</li>
<li>提供 OpenAI 相容 HTTP API。</li>
<li><strong>paged SSD KV cache</strong>：把已 prefill 過的 prompt context 存到 SSD，下次同前綴 prompt 可以直接讀 cache。</li>
<li>支援 speculative decoding 與<a href="/blog/llm/knowledge-cards/quantization/" data-link-title="Quantization" data-link-desc="用較少 bits 表示模型權重：壓縮記憶體佔用、加快生字速度，代價是少量品質衰減">量化</a>。</li>
</ol>
<p>oMLX 跟 Ollama 並列同一層（都是推論伺服器），但定位不同：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Ollama</th>
          <th>oMLX</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>推論 backend</td>
          <td>llama.cpp</td>
          <td>MLX</td>
      </tr>
      <tr>
          <td>目標場景</td>
          <td>通用本地 LLM</td>
          <td>coding agent 長 context</td>
      </tr>
      <tr>
          <td>KV cache 策略</td>
          <td>記憶體內，session 結束就丟</td>
          <td>paged SSD，跨 session 復用</td>
      </tr>
      <tr>
          <td>安裝難度</td>
          <td>一行 brew</td>
          <td>較高，要設 Python 環境</td>
      </tr>
      <tr>
          <td>對 TTFT 的優化</td>
          <td>一般</td>
          <td>主打：30 ~ 90 秒降到 1 ~ 3 秒</td>
      </tr>
      <tr>
          <td>生態成熟度</td>
          <td>高，大量 model tag</td>
          <td>較新，模型支援要自己轉</td>
      </tr>
  </tbody>
</table>
<p>oMLX 解的是 <a href="/blog/llm/00-foundations/why-llm-feels-slow/" data-link-title="0.1 為什麼 LLM 生字慢" data-link-desc="自回歸架構與記憶體頻寬瓶頸：為何即使 Mac 算力很強，本地 LLM 仍一個字一個字吐">0.1 為什麼 LLM 生字慢</a> 提到的痛點：當你用 aider 或 Cline 這類 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">coding agent</a>（用 LLM 自動操作 git / 檔案的 CLI 工具、模組四會展開）、把整個 repo 塞進 prompt 時、本地 LLM 每次都要重新 <a href="/blog/llm/knowledge-cards/prefill/" data-link-title="Prefill" data-link-desc="Prompt 首次處理時的計算階段：把整段輸入跑過模型、產生 KV cache">prefill</a> 10K+ tokens、等 30 ~ 90 秒。oMLX 的 SSD cache 把同前綴 prompt 的 prefill 結果保存下來、下次只 prefill「新增的部分」、TTFT 從幾十秒降到幾秒。</p>
<p>陷阱是把 oMLX 當成「比 Ollama 強的替代品」。它解的是非常特定的痛點；短 prompt code completion 或一般對話場景下、Ollama 的 TTFT 痛點不浮現、oMLX 的 SSD cache 賣點換不到體感、卻要先承擔較高的安裝與維護成本。長 context coding agent 才是 oMLX 的甜蜜點。</p>
<h2 id="三者疊加實際堆疊長什麼樣">三者疊加：實際堆疊長什麼樣</h2>
<p>三者不是競爭關係，是堆疊關係。下表是幾種常見組合：</p>
<table>
  <thead>
      <tr>
          <th>組合</th>
          <th>適用情境</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>MLX framework + <code>mlx-lm</code> library</td>
          <td>研究用、直接寫 Python 跑推論</td>
      </tr>
      <tr>
          <td>Ollama（用 llama.cpp 當 backend）</td>
          <td>主流選擇、跟 MLX 無關</td>
      </tr>
      <tr>
          <td>Ollama + Gemma 4 with MTP drafter</td>
          <td>主流選擇 + 加速、coding 場景 2x</td>
      </tr>
      <tr>
          <td>oMLX（用 MLX 當 backend）+ Gemma 4 MTP</td>
          <td>長 context agent 場景的完整堆疊</td>
      </tr>
      <tr>
          <td>LM Studio + Qwen3-Coder + speculative decoding</td>
          <td>GUI 派 + 加速</td>
      </tr>
  </tbody>
</table>
<p>兩個主流堆疊的延伸判讀：</p>
<ul>
<li><strong>Ollama + Gemma 4 MTP</strong>：成立條件是 Ollama 版本 ≥ v0.23.1（內建 MTP 一鍵支援）、target / drafter 同 family（都是 Gemma 4）。換成 Llama 或 Qwen 系列就要找對應的 drafter 配對、或退回沒 MTP 的版本；2026 年 5 月時 Qwen3-Coder 還沒有官方 drafter。</li>
<li><strong>oMLX + Gemma 4 MTP</strong>：成立條件是有長 context coding agent 工作流（10K+ tokens）、且 Mac 記憶體足夠同時載入 target + drafter（32GB+）。短 context 或一般對話場景、oMLX 的 SSD cache 帶不來體感優勢、改用 Ollama 配同樣 model tag 更省事。</li>
</ul>
<p>注意三件事：</p>
<ol>
<li>Ollama 預設用 llama.cpp 當 backend，跟 MLX 沒關係。看到「Ollama 用 MLX 加速」這種句子要追問來源，多半是混淆。</li>
<li>oMLX 是少數真正把 MLX 用在 server 層的工具；它的賣點不是「MLX」本身，是 SSD KV cache。</li>
<li>MTP 是技巧層，可以疊在 Ollama 或 oMLX 上面，跟伺服器選擇正交。</li>
</ol>
<h2 id="用三層定位判讀新資訊">用三層定位判讀新資訊</h2>
<p>三層定位的用法是「把每則資訊放回 framework / server / 技巧層、再追問該層的證據」。社群文章在描述這三者時常會混用層級、用這個流程可以快速還原它真正在說什麼。下面是幾個常見句子、加上三層定位重新解析的版本：</p>
<p><strong>「llama.cpp 已整合 Gemma 4 MTP」</strong>：要追問版本與時間點。2026 年 5 月時 llama.cpp 上游的 speculative decoding 框架仍 beta、Gemma 4 官方 drafter 整合是 feature request；Ollama 反而在 v0.23.1（2026/5/7）一鍵支援、是少見的「Ollama 領先底層 llama.cpp」情境。Ollama 維護自己的 fork、有時搶先加 patch。</p>
<p><strong>「MTP 加速 40%」</strong>：要追問任務與基準。Google 官方數據是 coding 任務 2 ~ 3 倍、其他任務 1.5 ~ 2 倍。「40%」這類數字若沒附上任務、硬體、比較基準、判讀價值有限。回到 Google Gemma 4 技術報告比對原始三變數。</p>
<p><strong>「Ollama 用 MLX 比 llama.cpp 快」</strong>：混淆了 framework 層與 server 層。Ollama 內部用 llama.cpp（library 層）當推論引擎、配 Metal backend 接 Apple Silicon GPU。它跟 MLX 是平行的選擇、不是包含關係。想用 MLX 當 backend 要選 oMLX 或自己 wrap mlx-lm。</p>
<p><strong>「oMLX 是 Ollama 的 MLX 版本」</strong>：兩者沒有 fork 關係。oMLX 的主要創新是 paged SSD KV cache、解的是長 <a href="/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">context window</a> coding agent 的 <a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a> 痛點。「換 backend 到 MLX」是另一回事、不是 oMLX 的賣點。</p>
<p><strong>「裝 MLX 就能跑 LLM」</strong>：<a href="/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX</a> 只是 framework。實際要跑 LLM 還需要模型實作（<code>mlx-lm</code>）+ 模型權重（MLX format）+ 介面（CLI 或 server wrapper）。對寫 code 場景的多數使用者、直接用 Ollama 反而更直接、不用接觸 MLX 細節。</p>
<p>詳細的判讀框架見 <a href="/blog/llm/00-foundations/info-judgment-frames/" data-link-title="0.6 判讀本地 LLM 資訊的五個框架" data-link-desc="本地 LLM 資訊更新快，學會用版本、層級、變數、能力、資料流五個框架評估文章與宣稱">0.6 判讀本地 LLM 資訊的五個框架</a>；其中框架一（追溯版本與時間點）、框架二（量化宣稱三變數）、框架三（工具放回三層架構）對本章三個術語的混淆特別有用。</p>
<h2 id="給讀者的選擇順序">給讀者的選擇順序</h2>
<p>寫 code 場景的優先順序：</p>
<ol>
<li><strong>先裝 Ollama</strong>、跑 Gemma 4 31B MTP 或 Qwen3-Coder 30B。MTP 加速包含在 Ollama v0.23.1 內、開箱即用。</li>
<li><strong>用一週後</strong>若發現 TTFT 在塞長 context 時體感痛、再評估 oMLX。</li>
<li><strong>MLX 本身</strong>對寫 code 使用者是抽象層下面的事、多數場景由 Ollama 把 MLX 細節包起來；直接接觸 MLX 的時機是想自己 wrap library 或調試底層 framework。</li>
</ol>
<p>順序設計的核心是「先解決日常路徑、再針對痛點做特化」。先鑽 MLX 細節或安裝 oMLX、會在還沒驗證痛點存在時就承擔額外的學習與維護成本。</p>
<h2 id="下一章">下一章</h2>
<p>下一章：<a href="/blog/llm/00-foundations/hardware-memory-budget/" data-link-title="0.5 Apple Silicon 記憶體預算" data-link-desc="記憶體決定能跑什麼，Q4 量化下的可運作模型對照與系統保留">0.5 Apple Silicon 記憶體預算</a>、把心智模型對到自己 Mac 的真實規格。</p>
]]></content:encoded></item></channel></rss>