<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>GPU on IT 空間</title><link>https://blog.jiatool.com/tags/GPU/</link><description>Recent content in GPU on IT 空間</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>jia@jiatool.com (Jia)</managingEditor><webMaster>jia@jiatool.com (Jia)</webMaster><copyright>&amp;copy;{year}, Jia All Rights Reserved</copyright><lastBuildDate>Sun, 26 Jul 2026 13:45:00 +0800</lastBuildDate><atom:link href="https://blog.jiatool.com/tags/GPU/index.xml" rel="self" type="application/rss+xml"/><item><title>Qwen 3.6 27B 推論需要多少 GPU VRAM？包含 KV Cache 的算法</title><link>https://blog.jiatool.com/posts/qwen3-6-27b-gpu-vram/</link><pubDate>Sun, 26 Jul 2026 13:45:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Sun, 26 Jul 2026 13:45:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/qwen3-6-27b-gpu-vram/</guid><description>前言 你在布署 LLM 時，也遇過這些疑惑嗎： 需要多少 GPU VRAM 才夠？ 可以支持多少人 &amp;quot;同時&amp;quot; 使用？ KV Cache 的 VRAM 佔用該如何計算？ 最近在公司內要</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>你在布署 LLM 時，也遇過這些疑惑嗎：&lt;/p>
&lt;ul>
&lt;li>需要多少 GPU VRAM 才夠？&lt;/li>
&lt;li>可以支持多少人 &amp;quot;同時&amp;quot; 使用？&lt;/li>
&lt;li>KV Cache 的 VRAM 佔用該如何計算？&lt;/li>
&lt;/ul>
&lt;br/>
&lt;p>最近在公司內要布署 Qwen3.6-27B (FP8) 模型，所以想知道推論時需要多少 GPU VRAM 才夠，我將查資料並計算出來的過程整理成此篇文章。&lt;/p>
&lt;p>就讓我們一起來了解一下吧~&lt;/p>
&lt;br/>
&lt;p>在文章一開始，有幾點要先補充說明：&lt;/p>
&lt;ul>
&lt;li>Qwen3.6-27B 採用混合架構 (Gated DeltaNet 線性注意力 + Gated Attention 全注意力，3:1)，所以 KV Cache 比同尺寸的傳統全注意力 Transformer 模型小很多 (降低了 75%)，Context Length 越長差異就會很明顯。&lt;/li>
&lt;li>以下以 &lt;a href="https://huggingface.co/Qwen/Qwen3.6-27B-FP8" target="_blank" rel="noopener">
Qwen3.6-27B-FP8
&lt;/a> 為例，如果是 BF16/FP16 原生精度，占用大小要再 x2。&lt;/li>
&lt;li>KV cache dtype 預設 BF16，如果改成 FP8，占用數值可再砍半。&lt;/li>
&lt;/ul>
&lt;br/>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/gpu.jpg" data-caption="" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;/figure>
&lt;br/>
&lt;!--adsense-->
&lt;br/>
&lt;h2 id="需要多少-vram">需要多少 VRAM？&lt;/h2>
&lt;p>需要的 VRAM 主要分成四個部分：&lt;strong>模型權重&lt;/strong>、&lt;strong>框架開銷&lt;/strong>、&lt;strong>Recurrent State&lt;/strong>、&lt;strong>KV Cache&lt;/strong>。&lt;/p>
&lt;p>以 Qwen3.6-27B-FP8 模型為例：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>模型權重 (Model Weights)&lt;/strong>：約 30.9 GB&lt;/li>
&lt;li>&lt;strong>框架消耗&lt;/strong>：粗估抓個 3 GB 左右&lt;/li>
&lt;li>Gated DeltaNet 線性注意力的「&lt;strong>Recurrent State&lt;/strong>」：固定大小，而且很小 (以下計算)&lt;/li>
&lt;li>Gated Attention 全注意力的「&lt;strong>KV Cache&lt;/strong>」：隨著 Context Length、精度而有所不同 (以下計算)&lt;/li>
&lt;/ul>
&lt;br/>
&lt;br/>
&lt;p>前面有提到，Qwen3.6-27B 採用混合架構 (Gated DeltaNet 線性注意力 + Gated Attention 全注意力) 共有 64 層，其中 48 層線性注意力 + 16 層全注意力。&lt;/p>
&lt;br/>
&lt;p>&lt;strong>Gated DeltaNet 線性注意力的「Recurrent State」&lt;/strong>&lt;/p>
&lt;p>Gated DeltaNet &amp;quot;不會&amp;quot; 隨著 context 長度而增加，而且全部層加起來也不到 100 MB，所以佔總用量的很小部分而已。&lt;/p>
&lt;p>總共 Recurrent State 大小：&lt;/p>
&lt;pre>&lt;code>= num_V_heads x head_dim_k x head_dim_v x bytes_per_element x num_deltanet_layers
= 48 x 128 x 128 x 2 bytes(BF16) x 48 層
= 786,432 elements/層 x 2 bytes x 48 層
= 1,572,864 bytes/層 x 48 層
= 75,497,472 bytes
≈ 72 MB
&lt;/code>&lt;/pre>&lt;br/>
&lt;p>&lt;strong>Gated Attention 全注意力的「KV Cache」&lt;/strong>&lt;/p>
&lt;p>Gated Attention 全注意力就會隨著 context 長度而增加，這也是 KV Cache 會較大的原因。&lt;/p>
&lt;p>全部 Attention 層合計 KV Cache 大小 (一個 token)：&lt;/p>
&lt;pre>&lt;code>= 2 (K 和 V) x num_KV_heads x head_dim x bytes_per_element x num_attention_layers
= 2 x 4 x 256 x 2 bytes(BF16) x 16 層
= 2,048 elements/層 x 2 bytes x 16 層
= 4,096 bytes/層 x 16 層
= 65,536 bytes
≈ 64 KB
&lt;/code>&lt;/pre>&lt;p>看起來超小對吧，但可別忘了，KV Cache 會隨著 context 長度而增加，以上是單一個 token 的 KV Cache 大小。&lt;br />
看你送進來的 context 多長，就要再乘上幾：&lt;/p>
&lt;pre>&lt;code>= 64 KB x context_length
&lt;/code>&lt;/pre>&lt;br/>
&lt;p>* 以上 V heads、head_dim_k、num_KV_heads、&amp;hellip;之類參數的數值可以從模型官方說明文章或模型設定檔內找到。&lt;/p>
&lt;br/>
&lt;br/>
&lt;br/>
&lt;p>所以 Qwen3.6-27B-FP8 總消耗 VRAM 大約是：&lt;/p>
&lt;pre>&lt;code>= 模型權重 + 框架消耗 + Recurrent State + KV Cache
= 30.9 GB + 3 GB + 0.072 GB + (0.064 GB x context_length)
≈ 34 GB + (0.064 GB x context_length)
&lt;/code>&lt;/pre>&lt;p>例如不同的 context_length 長度：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th align="left">Context Length (上下文長度)&lt;/th>
&lt;th align="right">KV Cache (BF16/FP16)&lt;/th>
&lt;th align="right">&lt;strong>總 VRAM 需求&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td align="left">&lt;strong>8K&lt;/strong> (8,192 tokens)&lt;/td>
&lt;td align="right">~0.5 GB&lt;/td>
&lt;td align="right">~34 GB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>32K&lt;/strong> (32,768 tokens)&lt;/td>
&lt;td align="right">~2.0 GB&lt;/td>
&lt;td align="right">~36 GB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>64K&lt;/strong> (65,536 tokens)&lt;/td>
&lt;td align="right">~4.0 GB&lt;/td>
&lt;td align="right">~38 GB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>128K&lt;/strong> (131,072 tokens)&lt;/td>
&lt;td align="right">~8.0 GB&lt;/td>
&lt;td align="right">~42 GB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>262K&lt;/strong> (262,144 tokens)&lt;/td>
&lt;td align="right">~16.0 GB&lt;/td>
&lt;td align="right">~50 GB&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>* 我自己透過 OpenCode 在用，起始大概就 10 幾 K (Harness 框架的 system prompt、tool、skill&amp;hellip;等等)，單一 Session 的 Context Length 要到達 100 K 也是很有可能的事~&lt;/p>
&lt;br/>
&lt;p>以下列出一些常用來執行 LLM 的 GPU/主機 供參考 (括號內為 VRAM 大小)：&lt;/p>
&lt;ul>
&lt;li>RTX 4090 (24GB)&lt;/li>
&lt;li>RTX 5090 (32GB)&lt;/li>
&lt;li>RTX 6000 Ada (48GB)&lt;/li>
&lt;li>RTX PRO 6000 (96GB)&lt;/li>
&lt;li>H100 (80GB)&lt;/li>
&lt;li>H200 (141GB)&lt;/li>
&lt;li>Mac mini (24GB / 32GB / 64GB)&lt;/li>
&lt;li>Mac Studio (36GB / 96GB / 256GB / 512GB)&lt;/li>
&lt;li>NVIDIA DGX Spark (128GB)&lt;/li>
&lt;/ul>
&lt;br/>
&lt;p>因為 Qwen3.6-27B-FP8 模型本身權重就約 31 GB 了，所以如果你的 GPU 在 32GB 以下 (例如 4090、5090)，是無法運行此模型。&lt;br />
除非改用更低量化版本 (例如 INT4)，或多張 GPU，再或者用 GPU + CPU 混合 (llama.cpp / Ollama) 的方式。&lt;/p>
&lt;br/>
&lt;br/>
&lt;h2 id="可以支持多少人-同時-使用">可以支持多少人 &amp;quot;同時&amp;quot; 使用？&lt;/h2>
&lt;p>以上的計算我們都是以 Batch Size = 1 為例 (同時一個人)，也就是如果需要 &amp;quot;同時&amp;quot; 給多個人使用，或自己 &amp;quot;同時&amp;quot; 會執行多個推論，則就還要再乘上 Batch Size。&lt;/p>
&lt;p>至於能支援多少併發推論人數，也取決於使用者的 Context Length (也就是影響 KV Cache)。&lt;/p>
&lt;br/>
&lt;p>例如同時有五個人在使用，每個人送出的 Context Length 為 32K tokens：&lt;/p>
&lt;pre>&lt;code>= 模型權重 + 框架消耗 + (Recurrent State x Batch Size) + (KV Cache x Batch Size)
= 30.9 GB + 3 GB + (0.072 GB x 5) + (2 GB x 5)
= 30.9 GB + 3 GB + 0.36 GB + 10 GB
≈ 44 GB
&lt;/code>&lt;/pre>&lt;p>再例如同時有五個人在使用，但每個人送出的 Context Length 提升到 128K tokens：&lt;/p>
&lt;pre>&lt;code>= 模型權重 + 框架消耗 + (Recurrent State x Batch Size) + (KV Cache x Batch Size)
= 30.9 GB + 3 GB + (0.072 GB x 5) + (8 GB x 5)
= 30.9 GB + 3 GB + 0.36 GB + 40 GB
≈ 74 GB
&lt;/code>&lt;/pre>&lt;br/>
&lt;p>可以看到「模型權重」是固定的，「框架消耗」也差異不大，「Recurrent State」可忽略，主要就是「KV Cache」的變動。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>我們再來看看，&lt;br />
假如我們超有錢，再加上廠商大發慈悲，願意出貨給我們一張新台幣約 150 萬的 H200 (141 GB)，可以同時支援多少人使用。&lt;/p>
&lt;p>依照剛剛的計算，總共 141 GB 扣掉基本的固定消耗後，剩下約 107 GB 留給 KV Cache (141 - 30.9 - 3)，依照不同的 Context Length，可以算出以下表格：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th align="left">Context Length (上下文長度)&lt;/th>
&lt;th align="right">KV Cache (BF16/FP16)&lt;/th>
&lt;th align="right">&lt;strong>最多併發人數&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td align="left">&lt;strong>8K&lt;/strong> (8,192 tokens)&lt;/td>
&lt;td align="right">~0.5 GB&lt;/td>
&lt;td align="right">214 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>32K&lt;/strong> (32,768 tokens)&lt;/td>
&lt;td align="right">~2.0 GB&lt;/td>
&lt;td align="right">53 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>64K&lt;/strong> (65,536 tokens)&lt;/td>
&lt;td align="right">~4.0 GB&lt;/td>
&lt;td align="right">26 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>128K&lt;/strong> (131,072 tokens)&lt;/td>
&lt;td align="right">~8.0 GB&lt;/td>
&lt;td align="right">13 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>262K&lt;/strong> (262,144 tokens)&lt;/td>
&lt;td align="right">~16.0 GB&lt;/td>
&lt;td align="right">6 人&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>* 此表計算有忽略 Recurrent State，如果併發人數較多，Recurrent State 也是會佔一點 VRAM。例如 100 人會占用 &lt;code>0.072 GB x 100 = 7.2 GB&lt;/code>。&lt;/p>
&lt;br/>
&lt;p>不過通常要留一些 VRAM 給像是 CUDA Runtime、Driver或系統其他服務，vLLM 有個 &lt;code>--gpu-memory-utilization&lt;/code> 參數 (預設 0.9，也就是 90%)，指的是允許 vLLM 使用多少 VRAM。&lt;/p>
&lt;p>假如我們設定 &lt;code>--gpu-memory-utilization 0.95&lt;/code> 的話，等於 &lt;code>141 GB x 0.95 = 134 GB&lt;/code> 扣掉基本的固定消耗後，變成剩下約 100 GB 留給 KV Cache，依照不同的 Context Length，以上表格會有些微的調整：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th align="left">Context Length (上下文長度)&lt;/th>
&lt;th align="right">KV Cache (BF16/FP16)&lt;/th>
&lt;th align="right">&lt;strong>最多併發人數&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td align="left">&lt;strong>8K&lt;/strong> (8,192 tokens)&lt;/td>
&lt;td align="right">~0.5 GB&lt;/td>
&lt;td align="right">200 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>32K&lt;/strong> (32,768 tokens)&lt;/td>
&lt;td align="right">~2.0 GB&lt;/td>
&lt;td align="right">50 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>64K&lt;/strong> (65,536 tokens)&lt;/td>
&lt;td align="right">~4.0 GB&lt;/td>
&lt;td align="right">25 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>128K&lt;/strong> (131,072 tokens)&lt;/td>
&lt;td align="right">~8.0 GB&lt;/td>
&lt;td align="right">12 人&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td align="left">&lt;strong>262K&lt;/strong> (262,144 tokens)&lt;/td>
&lt;td align="right">~16.0 GB&lt;/td>
&lt;td align="right">6 人&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;br/>
&lt;h2 id="補充">補充&lt;/h2>
&lt;p>以上是以 BF16/FP16 精度(預設) 計算，如果將其降為 FP8 (&lt;code>--kv-cache-dtype fp8&lt;/code>)，可以降低一半的 VRAM 占用 (併發人數 x2)。&lt;/p>
&lt;br/>
&lt;p>如果有開啟 MTP (例如 &lt;code>{&amp;quot;method&amp;quot;:&amp;quot;qwen3_next_mtp&amp;quot;,&amp;quot;num_speculative_tokens&amp;quot;:3}&lt;/code>)，雖然會讓最大並發數稍稍下降 5-10%，不過推論生成速度可以提升不少，建議開啟~&lt;/p>
&lt;br/>
&lt;p>強烈建議開啟 Prefix Caching 共享前綴快取 (&lt;code>--enable-prefix-caching&lt;/code>，vLLM 預設開啟)，如果新來的 request 跟之前某個 request (或同一個 session 的前幾輪) 有相同的開頭，則這段 prefix 的 KV Cache 不用重新跑一次 prefill，直接拿之前計算好存在 VRAM 裡的結果來用，可以節省 TTFT (首字延遲時間) 和這部分 GPU 算力。&lt;/p>
&lt;blockquote>
&lt;p>釐清：&lt;br />
KV Cache 解決「同一輪對話中，生成下一個 Token 時不需要重新算前面的 Token。」&lt;br />
Prefix Caching 解決「跨輪次、跨請求、跨不同使用者，如果前綴內容相同，直接重用先前算好的 KV Cache。」&lt;/p>
&lt;/blockquote>
&lt;br/>
&lt;p>如果完全不使用視覺 (圖片/影片)，可加上 &lt;code>--language-model-only&lt;/code> 參數，稍微節省 vision encoder 的權重佔用 VRAM (但只有節省 1~2 GB 左右，差異不大) 和多模態分析 (multimodal profiling)，把省下來的 VRAM 留給更多 KV cache。&lt;/p>
&lt;br/>
&lt;p>vLLM 參數說明可參考官方文章：&lt;a href="https://docs.vllm.ai/en/latest/configuration/engine_args/">https://docs.vllm.ai/en/latest/configuration/engine_args/&lt;/a>&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;br/>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>以上計算結果跟你想像的有落差嗎？&lt;/p>
&lt;p>經過這次找資料、詢問 AI，也讓我稍微搞清楚 LLM 所需 VRAM 和 KV Cache 的計算方式了，希望也能讓你對此有些概念。&lt;/p>
&lt;br/>
&lt;p>對於生成式 AI 感興趣的讀者，歡迎追蹤 FB 粉專『&lt;a href="https://www.facebook.com/jiatool" target="_blank" rel="noopener">
IT空間
&lt;/a>』，避免錯過最新的發文通知呦~🔔&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://huggingface.co/Qwen/Qwen3.6-27B-FP8" target="_blank" rel="noopener">
Qwen3.6-27B-FP8 | Hugging Face
&lt;/a>&lt;br />
&lt;a href="https://docs.vllm.ai/en/latest/configuration/engine_args/" target="_blank" rel="noopener">
vLLM Engine Arguments
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>「速度比完美重要。」&lt;br />
越想等到完美，越容易停在原地。&lt;br />
反而是那些願意先跨出去的人，邊做邊學，邊錯邊改，最後走得比想像中還遠。&lt;/p>
&lt;p align="right">—— 黃仁勳 (NVIDIA 共同創辦人暨執行長)&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/qwen36_27b_gpu_vram.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/qwen36_27b_gpu_vram_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>Qwen</category><category>VRAM</category><category>GPU</category><category>LLM</category><category>AI</category><category>人工智慧</category><category>問題</category></item></channel></rss>