<?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>Cuda on Tarragon</title><link>https://tarrragon.github.io/blog/tags/cuda/</link><description>Recent content in Cuda on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/cuda/index.xml" rel="self" type="application/rss+xml"/><item><title>GPU Compute Backend</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/gpu-compute-backend/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/gpu-compute-backend/</guid><description>&lt;p>GPU compute backend 的核心概念是「推論軟體（如 llama.cpp、PyTorch）跟 GPU 之間的計算 API 抽象層」。不同廠商 GPU 對應不同 backend、同一推論軟體通常要為每個 backend 編譯獨立 build。選對 backend 直接影響 GPU 算力能否被有效利用。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>各家 GPU 對應的常見 backend（2026 年 5 月狀態、依社群實踐變化）：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Backend&lt;/th>
 &lt;th>主要 GPU 廠商&lt;/th>
 &lt;th>平台支援&lt;/th>
 &lt;th>llama.cpp 生態成熟度&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>CUDA&lt;/td>
 &lt;td>NVIDIA&lt;/td>
 &lt;td>Windows / Linux&lt;/td>
 &lt;td>最成熟、社群預設&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>ROCm&lt;/td>
 &lt;td>AMD&lt;/td>
 &lt;td>Linux 主、Windows 演進中&lt;/td>
 &lt;td>中、依 GPU 型號變化&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Vulkan&lt;/td>
 &lt;td>跨廠商通用&lt;/td>
 &lt;td>Windows / Linux&lt;/td>
 &lt;td>中、通用 fallback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Metal&lt;/td>
 &lt;td>Apple Silicon&lt;/td>
 &lt;td>macOS&lt;/td>
 &lt;td>成熟（屬模組一範圍）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>SYCL&lt;/td>
 &lt;td>Intel ARC&lt;/td>
 &lt;td>Windows / Linux&lt;/td>
 &lt;td>相對年輕&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DirectML&lt;/td>
 &lt;td>多廠商（DirectX）&lt;/td>
 &lt;td>Windows&lt;/td>
 &lt;td>較少用於 LLM&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>OpenVINO&lt;/td>
 &lt;td>Intel&lt;/td>
 &lt;td>多平台&lt;/td>
 &lt;td>偏 Intel 生態&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>選 backend 的判讀依硬體跟平台：NVIDIA GPU 用 CUDA、AMD on Linux 優先 ROCm、AMD on Windows 多用 Vulkan、Intel ARC 用 Vulkan 或 SYCL、Apple Silicon 用 Metal。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>事實查核註&lt;/strong>：上表的「llama.cpp 生態成熟度」是社群常見回報、不是經本卡系統實測的 benchmark；各 backend 的支援度跟 throughput 依推論軟體版本快速演進、引用前以對應 backend 的官方文件跟 &lt;a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes&lt;/a> 為準。&lt;/p>&lt;/blockquote>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>理解 GPU compute backend 後可以解釋三個現象：為什麼下載 llama.cpp release 要選 CUDA / ROCm / Vulkan 版本（每個 build 對應一種 backend）、為什麼同樣硬體 throughput 差很多（backend 不對或 fallback 到 CPU）、為什麼非 NVIDIA GPU 跑 LLM 經驗較少（CUDA 生態太成熟、其他 backend 仍在演進）。&lt;/p>
&lt;p>選 PC GPU 跑本地 LLM 時、backend 成熟度是「工具鏈支援度」軸、跟硬體規格軸獨立、選卡時兩軸都要考慮。詳見 &lt;a href="https://tarrragon.github.io/blog/llm/05-discrete-gpu/gpu-vendor-differences/" data-link-title="5.6 GPU 廠商差異" data-link-desc="NVIDIA CUDA、AMD ROCm、Intel ARC 在 llama.cpp 生態的相對位置、選卡時的判讀軸">5.6 GPU 廠商差異&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>GPU compute backend 的核心概念是「推論軟體（如 llama.cpp、PyTorch）跟 GPU 之間的計算 API 抽象層」。不同廠商 GPU 對應不同 backend、同一推論軟體通常要為每個 backend 編譯獨立 build。選對 backend 直接影響 GPU 算力能否被有效利用。</p>
<h2 id="概念位置">概念位置</h2>
<p>各家 GPU 對應的常見 backend（2026 年 5 月狀態、依社群實踐變化）：</p>
<table>
  <thead>
      <tr>
          <th>Backend</th>
          <th>主要 GPU 廠商</th>
          <th>平台支援</th>
          <th>llama.cpp 生態成熟度</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>CUDA</td>
          <td>NVIDIA</td>
          <td>Windows / Linux</td>
          <td>最成熟、社群預設</td>
      </tr>
      <tr>
          <td>ROCm</td>
          <td>AMD</td>
          <td>Linux 主、Windows 演進中</td>
          <td>中、依 GPU 型號變化</td>
      </tr>
      <tr>
          <td>Vulkan</td>
          <td>跨廠商通用</td>
          <td>Windows / Linux</td>
          <td>中、通用 fallback</td>
      </tr>
      <tr>
          <td>Metal</td>
          <td>Apple Silicon</td>
          <td>macOS</td>
          <td>成熟（屬模組一範圍）</td>
      </tr>
      <tr>
          <td>SYCL</td>
          <td>Intel ARC</td>
          <td>Windows / Linux</td>
          <td>相對年輕</td>
      </tr>
      <tr>
          <td>DirectML</td>
          <td>多廠商（DirectX）</td>
          <td>Windows</td>
          <td>較少用於 LLM</td>
      </tr>
      <tr>
          <td>OpenVINO</td>
          <td>Intel</td>
          <td>多平台</td>
          <td>偏 Intel 生態</td>
      </tr>
  </tbody>
</table>
<p>選 backend 的判讀依硬體跟平台：NVIDIA GPU 用 CUDA、AMD on Linux 優先 ROCm、AMD on Windows 多用 Vulkan、Intel ARC 用 Vulkan 或 SYCL、Apple Silicon 用 Metal。</p>
<blockquote>
<p><strong>事實查核註</strong>：上表的「llama.cpp 生態成熟度」是社群常見回報、不是經本卡系統實測的 benchmark；各 backend 的支援度跟 throughput 依推論軟體版本快速演進、引用前以對應 backend 的官方文件跟 <a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes</a> 為準。</p></blockquote>
<h2 id="設計責任">設計責任</h2>
<p>理解 GPU compute backend 後可以解釋三個現象：為什麼下載 llama.cpp release 要選 CUDA / ROCm / Vulkan 版本（每個 build 對應一種 backend）、為什麼同樣硬體 throughput 差很多（backend 不對或 fallback 到 CPU）、為什麼非 NVIDIA GPU 跑 LLM 經驗較少（CUDA 生態太成熟、其他 backend 仍在演進）。</p>
<p>選 PC GPU 跑本地 LLM 時、backend 成熟度是「工具鏈支援度」軸、跟硬體規格軸獨立、選卡時兩軸都要考慮。詳見 <a href="/blog/llm/05-discrete-gpu/gpu-vendor-differences/" data-link-title="5.6 GPU 廠商差異" data-link-desc="NVIDIA CUDA、AMD ROCm、Intel ARC 在 llama.cpp 生態的相對位置、選卡時的判讀軸">5.6 GPU 廠商差異</a>。</p>
]]></content:encoded></item><item><title>5.3 llama.cpp 在 PC 上</title><link>https://tarrragon.github.io/blog/llm/05-discrete-gpu/llama-cpp-on-pc/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/05-discrete-gpu/llama-cpp-on-pc/</guid><description>&lt;p>llama.cpp 是 PC 場景跑本地 LLM 的主流 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">推論伺服器&lt;/a>、也是 Ollama、LM Studio 的底層 backend。在 PC 上直接使用 llama.cpp 的場景跟 Mac 不同：PC 需要選對 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/gpu-compute-backend/" data-link-title="GPU Compute Backend" data-link-desc="GPU 加速計算的底層 API 介面（CUDA / ROCm / Vulkan / Metal / SYCL）、決定推論軟體能否用 GPU 跑得快">GPU compute backend&lt;/a>（CUDA / ROCm / Vulkan）、處理 driver 版本對齊、調 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/moe-cpu-offload/" data-link-title="MoE CPU 卸載" data-link-desc="把 Mixture-of-Experts 模型不活躍的專家層權重放在系統 RAM、用到再走 PCIe 拉回 GPU、讓有限 VRAM 跑得了更大模型">MoE 卸載&lt;/a> 與 KV cache 量化旗標、產出的是 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/openai-compatible-api/" data-link-title="OpenAI 相容 API" data-link-desc="本地推論伺服器跟雲端 OpenAI 共用的 API 形狀標準">OpenAI 相容 API&lt;/a>。本章把這些 PC 場景特有的設定串成一條完整的調參工作流。&lt;/p>
&lt;p>讀完本章後、你應該能在自己的 PC 上：選對 llama.cpp build、用 &lt;code>llama-server&lt;/code> 跑 OpenAI 相容 API、用 &lt;code>llama-bench&lt;/code> 校準 throughput、知道多卡跟非 NVIDIA GPU 的入門設定方向。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;ol>
&lt;li>知道怎麼取得對應自己 GPU 的 llama.cpp build（pre-built release vs 自編譯）。&lt;/li>
&lt;li>看懂 PC 場景常用旗標的分組與互相關係。&lt;/li>
&lt;li>用 &lt;code>llama-server&lt;/code> 啟動 OpenAI 相容 server、接到 VS Code Continue.dev。&lt;/li>
&lt;li>用 &lt;code>llama-bench&lt;/code> 校準 prefill 跟 generation throughput。&lt;/li>
&lt;li>認識多卡 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/llama-cpp-tensor-split/" data-link-title="llama.cpp Tensor Split" data-link-desc="llama.cpp 多 GPU 場景中把模型張量按比例切到多張卡上的權重分配機制">tensor split&lt;/a> 的入門設定。&lt;/li>
&lt;li>知道 ROCm（AMD）跟 Vulkan backend 的相對成熟度。&lt;/li>
&lt;/ol>
&lt;h2 id="取得-llamacpp-build">取得 llama.cpp build&lt;/h2>
&lt;p>llama.cpp 在 PC 上的取得方式有三條：&lt;/p>
&lt;h3 id="路徑一官方-pre-built-release社群常見起點">路徑一：官方 pre-built release（社群常見起點）&lt;/h3>
&lt;p>&lt;code>ggml-org/llama.cpp&lt;/code> 的 GitHub release 提供 Windows / Linux 的 pre-built binary、含 CUDA 12.x、ROCm、Vulkan、CPU-only 等多種 backend。下載對應自己 GPU + driver 版本的 build、解壓即用。模型權重檔通常為 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/gguf/" data-link-title="GGUF" data-link-desc="llama.cpp 生態定義的模型權重格式：把權重、tokenizer、metadata 打包成單一檔案">GGUF&lt;/a> 格式。&lt;/p>
&lt;p>選 build 時的判讀：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>GPU 廠商&lt;/th>
 &lt;th>建議 backend&lt;/th>
 &lt;th>備註&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>NVIDIA（RTX 系列）&lt;/td>
 &lt;td>CUDA 12.x build&lt;/td>
 &lt;td>最成熟、社群回報最多、需對應 NVIDIA driver 版本&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>AMD（RX 系列、Radeon Pro）&lt;/td>
 &lt;td>ROCm build（Linux）/ Vulkan build（Windows）&lt;/td>
 &lt;td>ROCm Windows 支援仍在演進、Vulkan 跨平台但 throughput 通常較 CUDA 低&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Intel（ARC）&lt;/td>
 &lt;td>Vulkan build / SYCL build&lt;/td>
 &lt;td>工具鏈相對年輕、社群實測案例較少&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Apple Silicon&lt;/td>
 &lt;td>Metal build（屬模組一範圍）&lt;/td>
 &lt;td>見 &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 已經包好">1.2 Mac 版 llama.cpp&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>事實查核註&lt;/strong>：各 backend 的成熟度跟支援度依 llama.cpp 版本快速演進、上表為 2026 年 5 月常見回報的相對情況、建議引用時以 &lt;a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes&lt;/a> 跟對應 backend 的官方文件為準。&lt;/p></description><content:encoded><![CDATA[<p>llama.cpp 是 PC 場景跑本地 LLM 的主流 <a href="/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">推論伺服器</a>、也是 Ollama、LM Studio 的底層 backend。在 PC 上直接使用 llama.cpp 的場景跟 Mac 不同：PC 需要選對 <a href="/blog/llm/knowledge-cards/gpu-compute-backend/" data-link-title="GPU Compute Backend" data-link-desc="GPU 加速計算的底層 API 介面（CUDA / ROCm / Vulkan / Metal / SYCL）、決定推論軟體能否用 GPU 跑得快">GPU compute backend</a>（CUDA / ROCm / Vulkan）、處理 driver 版本對齊、調 <a href="/blog/llm/knowledge-cards/moe-cpu-offload/" data-link-title="MoE CPU 卸載" data-link-desc="把 Mixture-of-Experts 模型不活躍的專家層權重放在系統 RAM、用到再走 PCIe 拉回 GPU、讓有限 VRAM 跑得了更大模型">MoE 卸載</a> 與 KV cache 量化旗標、產出的是 <a href="/blog/llm/knowledge-cards/openai-compatible-api/" data-link-title="OpenAI 相容 API" data-link-desc="本地推論伺服器跟雲端 OpenAI 共用的 API 形狀標準">OpenAI 相容 API</a>。本章把這些 PC 場景特有的設定串成一條完整的調參工作流。</p>
<p>讀完本章後、你應該能在自己的 PC 上：選對 llama.cpp build、用 <code>llama-server</code> 跑 OpenAI 相容 API、用 <code>llama-bench</code> 校準 throughput、知道多卡跟非 NVIDIA GPU 的入門設定方向。</p>
<h2 id="本章目標">本章目標</h2>
<ol>
<li>知道怎麼取得對應自己 GPU 的 llama.cpp build（pre-built release vs 自編譯）。</li>
<li>看懂 PC 場景常用旗標的分組與互相關係。</li>
<li>用 <code>llama-server</code> 啟動 OpenAI 相容 server、接到 VS Code Continue.dev。</li>
<li>用 <code>llama-bench</code> 校準 prefill 跟 generation throughput。</li>
<li>認識多卡 <a href="/blog/llm/knowledge-cards/llama-cpp-tensor-split/" data-link-title="llama.cpp Tensor Split" data-link-desc="llama.cpp 多 GPU 場景中把模型張量按比例切到多張卡上的權重分配機制">tensor split</a> 的入門設定。</li>
<li>知道 ROCm（AMD）跟 Vulkan backend 的相對成熟度。</li>
</ol>
<h2 id="取得-llamacpp-build">取得 llama.cpp build</h2>
<p>llama.cpp 在 PC 上的取得方式有三條：</p>
<h3 id="路徑一官方-pre-built-release社群常見起點">路徑一：官方 pre-built release（社群常見起點）</h3>
<p><code>ggml-org/llama.cpp</code> 的 GitHub release 提供 Windows / Linux 的 pre-built binary、含 CUDA 12.x、ROCm、Vulkan、CPU-only 等多種 backend。下載對應自己 GPU + driver 版本的 build、解壓即用。模型權重檔通常為 <a href="/blog/llm/knowledge-cards/gguf/" data-link-title="GGUF" data-link-desc="llama.cpp 生態定義的模型權重格式：把權重、tokenizer、metadata 打包成單一檔案">GGUF</a> 格式。</p>
<p>選 build 時的判讀：</p>
<table>
  <thead>
      <tr>
          <th>GPU 廠商</th>
          <th>建議 backend</th>
          <th>備註</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>NVIDIA（RTX 系列）</td>
          <td>CUDA 12.x build</td>
          <td>最成熟、社群回報最多、需對應 NVIDIA driver 版本</td>
      </tr>
      <tr>
          <td>AMD（RX 系列、Radeon Pro）</td>
          <td>ROCm build（Linux）/ Vulkan build（Windows）</td>
          <td>ROCm Windows 支援仍在演進、Vulkan 跨平台但 throughput 通常較 CUDA 低</td>
      </tr>
      <tr>
          <td>Intel（ARC）</td>
          <td>Vulkan build / SYCL build</td>
          <td>工具鏈相對年輕、社群實測案例較少</td>
      </tr>
      <tr>
          <td>Apple Silicon</td>
          <td>Metal build（屬模組一範圍）</td>
          <td>見 <a href="/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">1.2 Mac 版 llama.cpp</a></td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：各 backend 的成熟度跟支援度依 llama.cpp 版本快速演進、上表為 2026 年 5 月常見回報的相對情況、建議引用時以 <a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes</a> 跟對應 backend 的官方文件為準。</p></blockquote>
<h3 id="路徑二自編譯需要特定功能或最新-commit">路徑二：自編譯（需要特定功能或最新 commit）</h3>
<p>從原始碼編譯適合下面情境：</p>
<ol>
<li>想用 release 還沒包進去的新功能（如剛 merge 的 PR）。</li>
<li>想針對特定 CUDA compute capability 編譯、減少 binary 大小或開特定優化。</li>
<li>自己 patch 過 llama.cpp。</li>
</ol>
<p>CUDA build 的常見編譯指令（以 Linux 為例、Windows 請參考官方文件）：</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">git clone https://github.com/ggml-org/llama.cpp.git
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">cd</span> llama.cpp
</span></span><span class="line"><span class="ln">3</span><span class="cl">cmake -B build -DGGML_CUDA<span class="o">=</span>ON
</span></span><span class="line"><span class="ln">4</span><span class="cl">cmake --build build --config Release -j</span></span></code></pre></div><p>編譯選項依版本變化、以 <code>CMakeLists.txt</code> 跟 <a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md">build 文件</a> 為準。</p>
<h3 id="路徑三透過上層工具ollama--lm-studio">路徑三：透過上層工具（Ollama / LM Studio）</h3>
<p>如果你不需要直接面對 llama.cpp 旗標、用 Ollama 或 LM Studio 通常更省事。它們把 llama.cpp 包裝在背後、提供更高層的設定介面。Mac / Windows 都適用、見 <a href="/blog/llm/05-discrete-gpu/lm-studio-on-windows/" data-link-title="5.4 LM Studio 在 Windows" data-link-desc="Windows &#43; 獨立 GPU 場景用 LM Studio：CUDA / ROCm backend 選擇、GUI 內對應 -ngl / cache-type / cpu-moe 的設定位置">5.4 LM Studio 在 Windows</a>。</p>
<p>直接面對 llama.cpp 的價值：完整控制旗標、看 log 直接 debug、用 <code>llama-bench</code> 做精確校準。</p>
<h2 id="核心旗標地圖">核心旗標地圖</h2>
<p>PC 場景常用的旗標可以分成五組：</p>
<h3 id="1-gpu-層分配">1. GPU 層分配</h3>
<table>
  <thead>
      <tr>
          <th>旗標</th>
          <th>作用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>-ngl &lt;N&gt;</code></td>
          <td>把 N 層 transformer block 放 GPU。常設 99 或 max 表示能放盡量放</td>
      </tr>
      <tr>
          <td><code>--n-cpu-moe &lt;N&gt;</code></td>
          <td>MoE 模型：把 N 層的專家權重保留 CPU 記憶體、見 <a href="/blog/llm/05-discrete-gpu/moe-cpu-offload-strategy/" data-link-title="5.1 MoE 模型與 CPU 卸載策略" data-link-desc="PC 場景把 MoE 不活躍專家層留在系統 RAM 的判讀：何時值得卸載、卸幾層、對 prefill 跟生成的影響各自不同">5.1</a></td>
      </tr>
      <tr>
          <td><code>--split-mode &lt;mode&gt;</code></td>
          <td>多卡模式（<code>none</code> / <code>layer</code> / <code>row</code>）</td>
      </tr>
      <tr>
          <td><code>-ts &lt;floats&gt;</code></td>
          <td>tensor split、多卡時各卡的權重比例</td>
      </tr>
      <tr>
          <td><code>-mg &lt;N&gt;</code></td>
          <td>主卡 index、特定計算（如 KV cache）放在主卡</td>
      </tr>
  </tbody>
</table>
<h3 id="2-kv-cache-與-context">2. KV cache 與 context</h3>
<table>
  <thead>
      <tr>
          <th>旗標</th>
          <th>作用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>-c &lt;N&gt;</code></td>
          <td>context window 大小</td>
      </tr>
      <tr>
          <td><code>--cache-type-k &lt;type&gt;</code></td>
          <td>K cache 量化（f16 / q8_0 / q4_0 等）、見 <a href="/blog/llm/05-discrete-gpu/kv-cache-quantization-strategy/" data-link-title="5.2 KV cache 量化策略" data-link-desc="PC 場景用 K=Q8 / V=Q4 等量化把 KV cache 壓縮、騰出 VRAM 開大 context window 或加併發數的判讀">5.2</a></td>
      </tr>
      <tr>
          <td><code>--cache-type-v &lt;type&gt;</code></td>
          <td>V cache 量化</td>
      </tr>
      <tr>
          <td><code>-fa</code> / <code>--flash-attn</code></td>
          <td>啟用 flash attention、部分量化組合需要</td>
      </tr>
  </tbody>
</table>
<h3 id="3-平行與-batch">3. 平行與 batch</h3>
<table>
  <thead>
      <tr>
          <th>旗標</th>
          <th>作用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>--parallel &lt;N&gt;</code></td>
          <td>同時處理的 sequence 數、高併發場景使用</td>
      </tr>
      <tr>
          <td><code>-b &lt;N&gt;</code></td>
          <td>logical batch size</td>
      </tr>
      <tr>
          <td><code>-ub &lt;N&gt;</code></td>
          <td>micro-batch size、影響 prefill 速度</td>
      </tr>
      <tr>
          <td><code>-np &lt;N&gt;</code></td>
          <td>num parallel slots（部分版本旗標、依版本變動）</td>
      </tr>
  </tbody>
</table>
<h3 id="4-模型與量化">4. 模型與量化</h3>
<table>
  <thead>
      <tr>
          <th>旗標</th>
          <th>作用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>-m &lt;path&gt;</code></td>
          <td>GGUF 模型路徑</td>
      </tr>
      <tr>
          <td><code>--alias &lt;name&gt;</code></td>
          <td>對外宣告的 model name（OpenAI 相容 API 用）</td>
      </tr>
      <tr>
          <td><code>--lora &lt;path&gt;</code></td>
          <td>LoRA adapter 路徑</td>
      </tr>
  </tbody>
</table>
<h3 id="5-server-設定">5. server 設定</h3>
<table>
  <thead>
      <tr>
          <th>旗標</th>
          <th>作用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>--host &lt;addr&gt;</code></td>
          <td>bind 位址、預設 127.0.0.1</td>
      </tr>
      <tr>
          <td><code>--port &lt;N&gt;</code></td>
          <td>port、預設 8080</td>
      </tr>
      <tr>
          <td><code>--api-key &lt;k&gt;</code></td>
          <td>API key 驗證</td>
      </tr>
      <tr>
          <td><code>-v</code></td>
          <td>verbose log</td>
      </tr>
  </tbody>
</table>
<p>完整旗標清單見 <code>llama-server --help</code> 跟 <a href="https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md">tools/server/README.md</a>；版本更新後旗標可能新增、改名或棄用、以實際版本為準。</p>
<h2 id="完整啟動範例">完整啟動範例</h2>
<p>下面三個範例對應三種常見硬體配置、皆為起點配置、需依實測調整。</p>
<h3 id="範例一16gb-vram--64gb-ram跑-30b-moe-寫-code">範例一：16GB VRAM + 64GB RAM、跑 30B MoE 寫 code</h3>





<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">./llama-server <span class="se">\
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="se"></span>  -m ~/models/Qwen3-30B-A3B-Q4_K_M.gguf <span class="se">\
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="se"></span>  --alias qwen3-30b-a3b <span class="se">\
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="se"></span>  -ngl <span class="m">99</span> <span class="se">\
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="se"></span>  --n-cpu-moe <span class="m">30</span> <span class="se">\
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="se"></span>  --cache-type-k q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="se"></span>  --cache-type-v q4_0 <span class="se">\
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="se"></span>  -fa <span class="se">\
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="se"></span>  -c <span class="m">32768</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="se"></span>  --parallel <span class="m">1</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="se"></span>  --host 127.0.0.1 <span class="se">\
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="se"></span>  --port <span class="m">8080</span></span></span></code></pre></div><p>對應的 Continue.dev 設定：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="nt">&#34;models&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local llama.cpp&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;openai&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-30b-a3b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:8080/v1&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">      <span class="nt">&#34;apiKey&#34;</span><span class="p">:</span> <span class="s2">&#34;not-needed&#34;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><h3 id="範例二24gb-vram--64gb-ram跑-32b-dense">範例二：24GB VRAM + 64GB RAM、跑 32B Dense</h3>





<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">./llama-server <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  -m ~/models/Qwen3-32B-Q4_K_M.gguf <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  -ngl <span class="m">99</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --cache-type-k q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="se"></span>  --cache-type-v q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="se"></span>  -fa <span class="se">\
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="se"></span>  -c <span class="m">65536</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="se"></span>  --parallel <span class="m">1</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="se"></span>  --port <span class="m">8080</span></span></span></code></pre></div><p>Dense 32B Q4_K_M 體積落在 16 ~ 20 GB 級、24GB VRAM 可全載；KV cache 保留較保守的 Q8 / Q8、context 開到 64K。</p>
<h3 id="範例三8gb-vram--32gb-ram跑-7b-級-dense">範例三：8GB VRAM + 32GB RAM、跑 7B 級 Dense</h3>





<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">./llama-server <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  -m ~/models/Qwen3-7B-Q4_K_M.gguf <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  -ngl <span class="m">99</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --cache-type-k q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="se"></span>  --cache-type-v q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="se"></span>  -fa <span class="se">\
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="se"></span>  -c <span class="m">16384</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="se"></span>  --port <span class="m">8080</span></span></span></code></pre></div><p>7B Q4_K_M 體積約 4 ~ 5 GB、8GB VRAM 可全載 + 適中 KV cache。</p>
<h2 id="用-llama-bench-校準">用 llama-bench 校準</h2>
<p><code>llama-bench</code> 是 llama.cpp 附帶的 benchmark 工具、用來測量特定模型 + 旗標組合的 prefill 跟 generation throughput。</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">./llama-bench <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  -m ~/models/Qwen3-30B-A3B-Q4_K_M.gguf <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  -ngl <span class="m">99</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --n-cpu-moe <span class="m">30</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="se"></span>  --cache-type-k q8_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="se"></span>  --cache-type-v q4_0 <span class="se">\
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="se"></span>  -p <span class="m">512</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="se"></span>  -n <span class="m">128</span></span></span></code></pre></div><p><code>-p</code>：prefill 測試的 prompt 長度；<code>-n</code>：generation 測試的 token 數。</p>
<p>輸出會列出 prefill t/s 跟 generation t/s。建議：</p>
<ol>
<li><strong>記錄基準</strong>：用「平衡起點」旗標跑一次、記下 prefill 跟 generation t/s。</li>
<li><strong>逐項調整</strong>：每次只動一個旗標（如 <code>--n-cpu-moe</code> 從 30 改 25、再改 35）、看 t/s 怎麼變。</li>
<li><strong>校準目標</strong>：找到「VRAM 用量、context 上限、t/s」三者組合符合工作流需求的設定。</li>
</ol>
<p>llama-bench 的結果是「fixed prompt / 固定生成長度」、跟「實際工作流的混合長度」有差距；建議再用實際工作流的代表性任務做最終驗證。</p>
<blockquote>
<p><strong>事實查核註</strong>：<code>llama-bench</code> 的輸出格式跟旗標名稱依 llama.cpp 版本變動、以實際 <code>llama-bench --help</code> 為準。</p></blockquote>
<h2 id="多卡-tensor-split-入門">多卡 tensor split 入門</h2>
<p>如果你有兩張或以上的 GPU、llama.cpp 支援把模型權重分散到多卡：</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">./llama-server <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  -m ~/models/Llama-4-Scout.gguf <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  -ngl <span class="m">99</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --split-mode layer <span class="se">\
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="se"></span>  -ts 0.5,0.5 <span class="se">\
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="se"></span>  --port <span class="m">8080</span></span></span></code></pre></div><ul>
<li><code>--split-mode layer</code>：以層為單位切分、最常用</li>
<li><code>--split-mode row</code>：以張量的 row 切分、用於 tensor parallel</li>
<li><code>-ts 0.5,0.5</code>：兩張卡各分一半權重；若兩卡 VRAM 不同、可調比例（如 <code>-ts 0.4,0.6</code>）</li>
</ul>
<p>多卡的實際吞吐縮放比依下面因素變化：</p>
<ol>
<li><strong>主機板 PCIe lane 配置</strong>：消費級主機板常見「一條 x16 + 一條 x4」、第二張卡的 PCIe 頻寬可能受限。</li>
<li><strong>GPU 之間是否有 <a href="/blog/llm/knowledge-cards/nvlink/" data-link-title="NVLink" data-link-desc="NVIDIA 多 GPU 之間的高速互連介面、提供比 PCIe 更高的卡間頻寬、消費級 RTX 系列普遍不支援">NVLink</a></strong>：消費級 RTX 系列普遍不支援 NVLink、卡間通訊走 <a href="/blog/llm/knowledge-cards/pcie/" data-link-title="PCIe" data-link-desc="PC 上連接 GPU 跟主機板的高速序列匯流排、影響模型載入速度跟 MoE 卸載時的推論吞吐">PCIe</a>、相對資料中心級配置慢。</li>
<li><strong>split-mode 選擇</strong>：<code>row</code> 模式需要更高的卡間頻寬、<code>layer</code> 模式對 PCIe 頻寬要求較低。</li>
</ol>
<p>社群常見回報：多卡縮放比通常低於線性、<code>layer</code> 模式對長 prompt 的 prefill 提升較明顯、generation 提升相對小。具體效益依工作流跟卡間頻寬、需用 <code>llama-bench</code> 校準。</p>
<p>對單人寫 code 場景、多卡的邊際效益通常不如「先升級單卡」或「先優化單卡配置」。</p>
<h2 id="rocm-與-vulkan-backend-的相對成熟度">ROCm 與 Vulkan backend 的相對成熟度</h2>
<p>llama.cpp 對非 CUDA backend 的支援度依社群回報有以下相對位置：</p>
<table>
  <thead>
      <tr>
          <th>Backend</th>
          <th>平台支援</th>
          <th>社群成熟度</th>
          <th>常見適用情境</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>CUDA</td>
          <td>NVIDIA、Windows/Linux</td>
          <td>最成熟、PR 與文件最多</td>
          <td>預設選項</td>
      </tr>
      <tr>
          <td>ROCm</td>
          <td>AMD、Linux 為主</td>
          <td>演進中、Windows 支援較新</td>
          <td>AMD GPU on Linux</td>
      </tr>
      <tr>
          <td>Vulkan</td>
          <td>跨廠商</td>
          <td>通用但 throughput 通常較 CUDA / ROCm 低</td>
          <td>AMD on Windows、Intel ARC、跨平台 fallback</td>
      </tr>
      <tr>
          <td>SYCL</td>
          <td>Intel</td>
          <td>新興、社群實測案例較少</td>
          <td>Intel ARC</td>
      </tr>
      <tr>
          <td>Metal</td>
          <td>Apple Silicon</td>
          <td>成熟（屬模組一範圍）</td>
          <td>Mac、見 <a href="/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">1.2</a></td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：各 backend 的成熟度跟性能對比是社群常見回報、不是經本文系統實測。建議引用前查閱 <a href="https://github.com/ggml-org/llama.cpp/pulls">llama.cpp 的 PR 列表</a>、對應 backend 的官方文件、跟自己硬體的實際 benchmark。</p></blockquote>
<p>選 backend 的判讀：</p>
<ol>
<li><strong>NVIDIA GPU</strong>：用 CUDA build、不需考慮其他。</li>
<li><strong>AMD GPU on Linux</strong>：優先試 ROCm build；不穩或不支援的卡型則退回 Vulkan。</li>
<li><strong>AMD GPU on Windows</strong>：ROCm on Windows 在演進、Vulkan 通常較穩。具體選擇以 llama.cpp release notes 跟自己硬體實測為準。</li>
<li><strong>Intel ARC</strong>：Vulkan 或 SYCL backend；社群實測案例較少、預期需要較多自己摸索。</li>
</ol>
<h2 id="跟-ollama--lm-studio-並存">跟 Ollama / LM Studio 並存</h2>
<p>llama.cpp <code>server</code>、Ollama、LM Studio 可以同時跑、用不同 port：</p>
<table>
  <thead>
      <tr>
          <th>推論伺服器</th>
          <th>預設 port</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Ollama</td>
          <td>11434</td>
      </tr>
      <tr>
          <td>llama-server</td>
          <td>8080</td>
      </tr>
      <tr>
          <td>LM Studio</td>
          <td>1234</td>
      </tr>
  </tbody>
</table>
<p>Continue.dev 可以同時接：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="nt">&#34;models&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Ollama default&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-30b-a3b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;llama.cpp custom&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;openai&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-30b-a3b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:8080/v1&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">      <span class="nt">&#34;apiKey&#34;</span><span class="p">:</span> <span class="s2">&#34;not-needed&#34;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>實務上、多數情況只需要一個推論伺服器；同時跑多個的場景是「比較同一模型在不同 backend / 旗標下的差異」、屬於調參階段、不是常態。</p>
<h2 id="下一章">下一章</h2>
<p>下一章：<a href="/blog/llm/05-discrete-gpu/lm-studio-on-windows/" data-link-title="5.4 LM Studio 在 Windows" data-link-desc="Windows &#43; 獨立 GPU 場景用 LM Studio：CUDA / ROCm backend 選擇、GUI 內對應 -ngl / cache-type / cpu-moe 的設定位置">5.4 LM Studio 在 Windows</a>、給「不想直接面對 CLI」的讀者另一條路。</p>
]]></content:encoded></item><item><title>5.6 GPU 廠商差異</title><link>https://tarrragon.github.io/blog/llm/05-discrete-gpu/gpu-vendor-differences/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/05-discrete-gpu/gpu-vendor-differences/</guid><description>&lt;p>選 GPU 跑本地 LLM 不只看 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/vram/" data-link-title="VRAM" data-link-desc="顯卡上的記憶體、跟系統 RAM 是兩塊獨立預算、決定能載入多大模型權重跟 KV cache">VRAM&lt;/a> 容量與 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/memory-bandwidth/" data-link-title="Memory Bandwidth" data-link-desc="記憶體每秒能讀寫多少 bytes：決定本地 LLM 生字速度的真正瓶頸">memory bandwidth&lt;/a>、工具鏈支援度同樣重要。NVIDIA / AMD / Intel 三家廠商在 llama.cpp 生態的位置不同、&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/gpu-compute-backend/" data-link-title="GPU Compute Backend" data-link-desc="GPU 加速計算的底層 API 介面（CUDA / ROCm / Vulkan / Metal / SYCL）、決定推論軟體能否用 GPU 跑得快">GPU compute backend&lt;/a> 中 CUDA 之外的選項仍在演進。本章整理三家在 2026 年 5 月的相對位置、跟選卡時值得考慮的判讀軸；多卡互連的議題見 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/nvlink/" data-link-title="NVLink" data-link-desc="NVIDIA 多 GPU 之間的高速互連介面、提供比 PCIe 更高的卡間頻寬、消費級 RTX 系列普遍不支援">NVLink&lt;/a> 跟 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/pcie/" data-link-title="PCIe" data-link-desc="PC 上連接 GPU 跟主機板的高速序列匯流排、影響模型載入速度跟 MoE 卸載時的推論吞吐">PCIe&lt;/a>。本章不重複 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/unified-memory/" data-link-title="Unified Memory Architecture" data-link-desc="Apple Silicon 讓 CPU / GPU / NE 共用同一塊記憶體：跑大模型的優勢來源">統一記憶體&lt;/a> 的 Mac 場景、改聚焦 PC 獨立 VRAM 的廠商工具鏈差異。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>事實查核註&lt;/strong>：GPU 工具鏈的支援度依 driver 版本、llama.cpp release 與廠商策略快速演進、本章描述為 2026 年 5 月的社群常見回報、建議引用前查閱對應 backend 的官方文件、&lt;a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes&lt;/a> 跟自己硬體的實測。&lt;/p>&lt;/blockquote>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;ol>
&lt;li>知道 NVIDIA CUDA、AMD ROCm、Intel SYCL、跨平台 Vulkan 各自的成熟度。&lt;/li>
&lt;li>認識「工具鏈支援度」相對「硬體規格」對本地 LLM 體驗的重要性。&lt;/li>
&lt;li>在選卡時、能用「工具鏈 × 規格 × 預算」三軸做判讀。&lt;/li>
&lt;li>認識常見的混合場景（雲端 + 本地）。&lt;/li>
&lt;/ol>
&lt;h2 id="nvidia-cuda當前生態預設">NVIDIA CUDA：當前生態預設&lt;/h2>
&lt;p>NVIDIA GPU + CUDA backend 是 2026 年本地 LLM 社群的事實預設。原因不是「規格最好」、而是「工具鏈最成熟」：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>llama.cpp CUDA backend 開發最久、PR 跟 issue 數量最多&lt;/strong>：新功能（新量化、flash attention 改進、speculative decoding 等）通常先在 CUDA backend 落地。&lt;/li>
&lt;li>&lt;strong>driver 跟 CUDA toolkit 對齊明確&lt;/strong>：driver 版本對應 CUDA 版本的表清楚、出問題容易查。&lt;/li>
&lt;li>&lt;strong>社群實測案例多&lt;/strong>：Reddit、HuggingFace forum、GitHub issue 上、絕大多數 benchmark 跟調參討論基於 CUDA。&lt;/li>
&lt;li>&lt;strong>上層工具（Ollama、LM Studio）優先支援&lt;/strong>：新版本通常先 CUDA、再 Vulkan、再 ROCm。&lt;/li>
&lt;/ol>
&lt;p>社群常見回報的 NVIDIA 卡分級（依 VRAM 容量為主、寫 code 場景）：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>等級&lt;/th>
 &lt;th>代表卡型&lt;/th>
 &lt;th>適用情境&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>入門&lt;/td>
 &lt;td>RTX 5060 8GB / RTX 4060 8GB&lt;/td>
 &lt;td>試水溫、跑 7B 級模型&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>主流（甜蜜點）&lt;/td>
 &lt;td>RTX 5060 Ti 16GB / RTX 5070 Ti 16GB&lt;/td>
 &lt;td>30B MoE 卸載、寫 code 場景社群常見起點&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>進階&lt;/td>
 &lt;td>RTX 4090 24GB / RTX 5080 16GB&lt;/td>
 &lt;td>32B Dense 全載 / 70B MoE 卸載&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>旗艦&lt;/td>
 &lt;td>RTX 5090 32GB&lt;/td>
 &lt;td>70B Dense Q4 全載、長 context、多模型併存&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>上一代二手&lt;/td>
 &lt;td>RTX 3090 24GB&lt;/td>
 &lt;td>二手市場價格可能更友善、CUDA 支援度仍佳&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>選卡時的常見軸&lt;/strong>：&lt;/p></description><content:encoded><![CDATA[<p>選 GPU 跑本地 LLM 不只看 <a href="/blog/llm/knowledge-cards/vram/" data-link-title="VRAM" data-link-desc="顯卡上的記憶體、跟系統 RAM 是兩塊獨立預算、決定能載入多大模型權重跟 KV cache">VRAM</a> 容量與 <a href="/blog/llm/knowledge-cards/memory-bandwidth/" data-link-title="Memory Bandwidth" data-link-desc="記憶體每秒能讀寫多少 bytes：決定本地 LLM 生字速度的真正瓶頸">memory bandwidth</a>、工具鏈支援度同樣重要。NVIDIA / AMD / Intel 三家廠商在 llama.cpp 生態的位置不同、<a href="/blog/llm/knowledge-cards/gpu-compute-backend/" data-link-title="GPU Compute Backend" data-link-desc="GPU 加速計算的底層 API 介面（CUDA / ROCm / Vulkan / Metal / SYCL）、決定推論軟體能否用 GPU 跑得快">GPU compute backend</a> 中 CUDA 之外的選項仍在演進。本章整理三家在 2026 年 5 月的相對位置、跟選卡時值得考慮的判讀軸；多卡互連的議題見 <a href="/blog/llm/knowledge-cards/nvlink/" data-link-title="NVLink" data-link-desc="NVIDIA 多 GPU 之間的高速互連介面、提供比 PCIe 更高的卡間頻寬、消費級 RTX 系列普遍不支援">NVLink</a> 跟 <a href="/blog/llm/knowledge-cards/pcie/" data-link-title="PCIe" data-link-desc="PC 上連接 GPU 跟主機板的高速序列匯流排、影響模型載入速度跟 MoE 卸載時的推論吞吐">PCIe</a>。本章不重複 <a href="/blog/llm/knowledge-cards/unified-memory/" data-link-title="Unified Memory Architecture" data-link-desc="Apple Silicon 讓 CPU / GPU / NE 共用同一塊記憶體：跑大模型的優勢來源">統一記憶體</a> 的 Mac 場景、改聚焦 PC 獨立 VRAM 的廠商工具鏈差異。</p>
<blockquote>
<p><strong>事實查核註</strong>：GPU 工具鏈的支援度依 driver 版本、llama.cpp release 與廠商策略快速演進、本章描述為 2026 年 5 月的社群常見回報、建議引用前查閱對應 backend 的官方文件、<a href="https://github.com/ggml-org/llama.cpp/releases">llama.cpp release notes</a> 跟自己硬體的實測。</p></blockquote>
<h2 id="本章目標">本章目標</h2>
<ol>
<li>知道 NVIDIA CUDA、AMD ROCm、Intel SYCL、跨平台 Vulkan 各自的成熟度。</li>
<li>認識「工具鏈支援度」相對「硬體規格」對本地 LLM 體驗的重要性。</li>
<li>在選卡時、能用「工具鏈 × 規格 × 預算」三軸做判讀。</li>
<li>認識常見的混合場景（雲端 + 本地）。</li>
</ol>
<h2 id="nvidia-cuda當前生態預設">NVIDIA CUDA：當前生態預設</h2>
<p>NVIDIA GPU + CUDA backend 是 2026 年本地 LLM 社群的事實預設。原因不是「規格最好」、而是「工具鏈最成熟」：</p>
<ol>
<li><strong>llama.cpp CUDA backend 開發最久、PR 跟 issue 數量最多</strong>：新功能（新量化、flash attention 改進、speculative decoding 等）通常先在 CUDA backend 落地。</li>
<li><strong>driver 跟 CUDA toolkit 對齊明確</strong>：driver 版本對應 CUDA 版本的表清楚、出問題容易查。</li>
<li><strong>社群實測案例多</strong>：Reddit、HuggingFace forum、GitHub issue 上、絕大多數 benchmark 跟調參討論基於 CUDA。</li>
<li><strong>上層工具（Ollama、LM Studio）優先支援</strong>：新版本通常先 CUDA、再 Vulkan、再 ROCm。</li>
</ol>
<p>社群常見回報的 NVIDIA 卡分級（依 VRAM 容量為主、寫 code 場景）：</p>
<table>
  <thead>
      <tr>
          <th>等級</th>
          <th>代表卡型</th>
          <th>適用情境</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>入門</td>
          <td>RTX 5060 8GB / RTX 4060 8GB</td>
          <td>試水溫、跑 7B 級模型</td>
      </tr>
      <tr>
          <td>主流（甜蜜點）</td>
          <td>RTX 5060 Ti 16GB / RTX 5070 Ti 16GB</td>
          <td>30B MoE 卸載、寫 code 場景社群常見起點</td>
      </tr>
      <tr>
          <td>進階</td>
          <td>RTX 4090 24GB / RTX 5080 16GB</td>
          <td>32B Dense 全載 / 70B MoE 卸載</td>
      </tr>
      <tr>
          <td>旗艦</td>
          <td>RTX 5090 32GB</td>
          <td>70B Dense Q4 全載、長 context、多模型併存</td>
      </tr>
      <tr>
          <td>上一代二手</td>
          <td>RTX 3090 24GB</td>
          <td>二手市場價格可能更友善、CUDA 支援度仍佳</td>
      </tr>
  </tbody>
</table>
<p><strong>選卡時的常見軸</strong>：</p>
<ol>
<li><strong>VRAM 容量決定模型上限</strong>：16GB 起步可跑 30B MoE 卸載、24GB 跑 32B Dense、32GB 跑 70B Dense。</li>
<li><strong>VRAM 頻寬決定生字速度上限</strong>：同 VRAM 容量下、頻寬接近兩倍的卡（如 5070 Ti 對 5060 Ti）生字速度通常顯著差。</li>
<li><strong>CUDA compute capability</strong>：影響某些優化能否啟用、新世代卡通常有額外指令支援。</li>
<li><strong>driver 長期支援</strong>：較新世代卡的 driver 支援週期通常較長、適合長時間用。</li>
</ol>
<h2 id="amd-rocm-與-radeon">AMD ROCm 與 Radeon</h2>
<p>AMD GPU 在 llama.cpp 生態的位置：ROCm backend 在演進、Vulkan backend 是跨平台 fallback。</p>
<h3 id="rocm-backend">ROCm backend</h3>
<p>ROCm（Radeon Open Compute）是 AMD 的 GPU 計算平台、定位類似 CUDA。社群常見回報的當前狀態：</p>
<ol>
<li><strong>Linux 支援度較 Windows 成熟</strong>：ROCm 在 Linux 上發展時間較長、Windows 版本相對年輕。</li>
<li><strong>支援 GPU 清單</strong>：ROCm 對「官方支援」的 GPU 清單有明確限制、清單外的卡也許能跑、但走 unsupported 路徑。</li>
<li><strong>llama.cpp ROCm build 跟 CUDA build 的功能差異</strong>：多數核心功能跨 backend 一致、新功能 cherry-pick 速度通常稍慢於 CUDA。</li>
<li><strong>效能對比</strong>：同價格段、AMD 卡的 VRAM 容量有時較大；但生字速度依模型跟設定變化、社群回報的 NVIDIA / AMD 對比結果不一致、需自己硬體實測。</li>
</ol>
<h3 id="vulkan-backend">Vulkan backend</h3>
<p>Vulkan 是跨平台 GPU API、llama.cpp 的 Vulkan backend 適合：</p>
<ol>
<li><strong>AMD GPU on Windows</strong>：ROCm Windows 不穩或不支援時的選項。</li>
<li><strong>Intel ARC</strong>：見下節。</li>
<li><strong>跨平台 fallback</strong>：希望同一份 binary 跑在多種 GPU 上。</li>
</ol>
<p>社群常見回報：Vulkan backend 的 throughput 通常較同硬體的 CUDA / ROCm backend 低、但通用性高。</p>
<h3 id="選-amd-卡的判讀">選 AMD 卡的判讀</h3>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>建議</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Linux 主力使用者、想避開 NVIDIA driver</td>
          <td>AMD + ROCm on Linux 是合理選擇、先確認卡型在 ROCm 支援清單</td>
      </tr>
      <tr>
          <td>Windows 主力使用者</td>
          <td>NVIDIA + CUDA 仍是社群預設較順的路徑</td>
      </tr>
      <tr>
          <td>同價格段、AMD VRAM 容量明顯較大</td>
          <td>評估「容量優勢 vs 工具鏈成本」、用自己工作流校準</td>
      </tr>
      <tr>
          <td>已有 AMD 卡、想試本地 LLM</td>
          <td>直接試 Vulkan / ROCm backend、看是否符合需求</td>
      </tr>
  </tbody>
</table>
<h2 id="intel-arc">Intel ARC</h2>
<p>Intel 的獨立 GPU 系列 ARC（A 系列、後續預期 B 系列）在 llama.cpp 生態仍處於相對年輕的階段：</p>
<ol>
<li><strong>可用 backend</strong>：Vulkan（通用）、SYCL / OpenVINO（Intel 特化）。</li>
<li><strong>VRAM 容量</strong>：ARC A770 16GB 的 VRAM 容量在價格段內競爭力較強。</li>
<li><strong>工具鏈成熟度</strong>：社群實測案例較 NVIDIA / AMD 少、預期需要較多自己摸索。</li>
<li><strong>driver 演進</strong>：Intel ARC driver 在 2026 年仍持續演進、不同版本的 throughput 可能差異較大。</li>
</ol>
<p>選 Intel ARC 的合理情境：</p>
<ol>
<li>想試「相對冷門但價格友善」的選項。</li>
<li>已有 Intel 平台、想保持廠商一致。</li>
<li>不介意花時間自己調工具鏈設定。</li>
</ol>
<p>對「想最快跑起來、最少調參」的使用者、ARC 不是最順的選擇。</p>
<h2 id="工具鏈--規格--預算的判讀框架">工具鏈 × 規格 × 預算的判讀框架</h2>
<p>選卡時的三軸框架：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">工具鏈支援度（CUDA &gt; ROCm &gt; Vulkan &gt; SYCL）
</span></span><span class="line"><span class="ln">2</span><span class="cl">  ×
</span></span><span class="line"><span class="ln">3</span><span class="cl">硬體規格（VRAM 容量 + VRAM 頻寬 + CUDA core / CU 數量）
</span></span><span class="line"><span class="ln">4</span><span class="cl">  ×
</span></span><span class="line"><span class="ln">5</span><span class="cl">預算（含後續電費、機殼散熱、電源升級）</span></span></code></pre></div><p>判讀順序：</p>
<ol>
<li><strong>先確認工具鏈支援度符合自己的折騰意願</strong>：怕折騰選 NVIDIA、樂於折騰可考慮 AMD / Intel。</li>
<li><strong>再依預算選 VRAM 容量級別</strong>：16GB 起步、24GB 進階、32GB 旗艦。</li>
<li><strong>同容量下選頻寬較高的卡</strong>：對生字速度影響直接。</li>
<li><strong>預留升級空間</strong>：機殼散熱、電源、PCIe lane 配置會影響後續多卡或換卡的選擇。</li>
</ol>
<h2 id="雲端--本地的混合場景">雲端 + 本地的混合場景</h2>
<p>本地 LLM 不必獨自解決所有任務、雲端 + 本地的混合是社群多數使用者的實際做法：</p>
<table>
  <thead>
      <tr>
          <th>任務類型</th>
          <th>適合本地</th>
          <th>適合雲端</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>補完、行內編輯（高頻、短回答）</td>
          <td>本地反應快、不消耗 API quota</td>
          <td>雲端 latency 較高、成本累積</td>
      </tr>
      <tr>
          <td>跨檔案重構、設計討論</td>
          <td>視本地模型能力</td>
          <td>旗艦模型（Claude、GPT-5）能力較強</td>
      </tr>
      <tr>
          <td>隱私敏感內容、未公開 codebase</td>
          <td>本地 prompt 不離開機器</td>
          <td>視服務的資料政策</td>
      </tr>
      <tr>
          <td>試新 prompt、調 prompt 工程</td>
          <td>本地快速迭代、無 quota 壓力</td>
          <td>雲端做最終驗證</td>
      </tr>
      <tr>
          <td>一次性 / 偶爾的複雜任務</td>
          <td>投資本地硬體可能不划算</td>
          <td>雲端按使用量付費較划算</td>
      </tr>
  </tbody>
</table>
<p>社群常見的混合做法：本地跑 30B 級 MoE 處理日常補完、跨檔案重構或設計討論切到雲端旗艦。Continue.dev 等工具支援同時設定多個 model、可以快速切換、見 <a href="/blog/llm/01-local-llm-services/vscode-continue-integration/" data-link-title="1.3 VS Code &#43; Continue.dev 整合" data-link-desc="安裝 Continue 擴充套件、config.json 設定、Cmd&#43;L 對話 / Cmd&#43;I 行內編輯快捷鍵">1.3 VS Code + Continue.dev 整合</a>。</p>
<h2 id="給讀者的選卡判讀">給讀者的選卡判讀</h2>
<p>整合本章與 <a href="/blog/llm/05-discrete-gpu/vram-ram-budget/" data-link-title="5.0 VRAM &#43; RAM 分層預算" data-link-desc="PC 獨立 GPU 場景的記憶體預算判讀：VRAM 是快的世界、RAM 是大的世界、PCIe 把兩個世界連起來">5.0 VRAM + RAM 分層預算</a> 的建議：</p>
<ol>
<li><strong>NVIDIA 是當前社群預設</strong>：怕折騰、想最大化「跑得起來」概率、選 NVIDIA。</li>
<li><strong>VRAM 16GB 是常見起點</strong>：16GB VRAM + 64GB RAM 配 30B MoE 卸載、是 2026 年寫 code 場景的常見配置。</li>
<li><strong>頻寬比容量更影響日常體感</strong>：同容量下、頻寬接近兩倍的卡（如 5070 Ti 對 5060 Ti）日常生字速度差異明顯。</li>
<li><strong>二手卡也是選項</strong>：RTX 3090 24GB 二手市場價格依在地市場變化、CUDA 支援度仍佳、適合預算敏感但想要 24GB VRAM 的使用者。</li>
<li><strong>多卡不是優先升級方向</strong>：單人寫 code 場景下、單卡 + 良好設定通常勝過雙卡入門配置。</li>
</ol>
<h2 id="下一步">下一步</h2>
<p>本章是模組五的最後一章。下一步可以回到 <a href="/blog/llm/05-discrete-gpu/" data-link-title="模組五：Windows / Linux &#43; 獨立 GPU" data-link-desc="消費級 PC（Windows / Linux &#43; NVIDIA / AMD 獨立 GPU）跑本地 LLM 的硬體判讀、MoE CPU 卸載、KV cache 量化與 llama.cpp 調參">模組五 _index</a> 看其他章節、或進入 <a href="/blog/llm/04-applications/" data-link-title="模組四：LLM 應用層原理" data-link-desc="Prompt 技術光譜、RAG、tool use、agent、應用層協議、人機協作、multi-agent、workflow 編排、eval 設計：跨工具不變的概念地圖">模組四 應用層原理</a> 看 LLM 作為系統元件的設計取捨。</p>
]]></content:encoded></item></channel></rss>