<?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[4080S 32G + qwen3.6-27B + vllm 参数及踩坑]]></title><description><![CDATA[<p dir="auto">前几天看论坛帖子才意识到 vllm 吞吐量远大于 llama.cpp，于是转战 vllm。趁 qwen3.8-27B 还没发布，记录一下配置 vllm 踩过的坑。</p>
<ol>
<li>
<p dir="auto"><strong>配置</strong>：4080S 32G + Ubuntu 24 + qwen3.6-27B + vllm 0.26 + lmcache 0.5.3</p>
</li>
<li>
<p dir="auto"><strong>模型</strong>。官方 safetensors 自带 MTP 权重；而 llama.cpp GGUF 经过转换，惯例是在模型名中标明 MTP。所以并不需要刻意去找 MTP 模型（我一开始是这么做的），挑热门那几个即可。</p>
<ul>
<li>AWQ，autoround，GPTQ 均可。不要 INT8</li>
</ul>
</li>
<li>
<p dir="auto"><strong>vllm 概述</strong>。vllm 与 llama.cpp 相比，优势在于（在一定范围内）多并发时每个会话 decode 速率不会下降（即便话题不同），这就相当于大幅提升了 decode 速率；而最终受到的制约仍是 KVCache 大小，也就是由显存决定。所有会话共享 KVCache 池子，那么高并发时，摊到每个会话的上下文就很小了。</p>
</li>
<li>
<p dir="auto"><strong>vllm 运行参数</strong></p>
<ul>
<li>
<p dir="auto"><code>--kv-cache-dtype</code> （相当于 llama-server -ctk、-ctv）</p>
<ul>
<li>qwen3.6-27B 目前选 <code>fp8</code>，<code>turboquant_4bit_nc</code> 在 vllm 0.26 有 bug，需要等主线更新或使用旧版（0.24）（我还没试过 tq）</li>
<li><code>fp8_e4m3</code> 可能比 <code>fp8_e5m2</code> 略好</li>
<li>关于 turboquant，官方有篇文章详细介绍：<a href="https://vllm.com.cn/blog/2026-05-11-turboquant" rel="nofollow ugc">TurboQuant 首个全面研究：准确性与性能 | vLLM 博客 - vLLM 推理引擎</a></li>
</ul>
</li>
<li>
<p dir="auto"><code>--kv-cache-memory-bytes</code> 指定 KVCache 池子大小</p>
<ul>
<li>这是比 <code>--gpu-memory-utilization</code> 更好的参数，不容易OOM，不管 <code>--max-model-len</code> 和 <code>--max-num-seqs</code> 怎么设，它都不受影响。</li>
<li>可以先定个保守数值，比如 9G，稳定了再往上增，OOM 就降。</li>
<li>fp8 10G 时，<code>GPU KV cache size</code> 略大于 qwen3.5 原生的 262K</li>
</ul>
</li>
<li>
<p dir="auto"><code>--max-num-seqs</code> 简单理解为最大并发，超过该值的进入排队（相当于 llama-server -np）</p>
<ul>
<li>在一定范围内增加并发，可以有效提高吞吐量</li>
<li>在 32 时观察到 700 tps（MTP=2），大概是峰值了</li>
</ul>
</li>
<li>
<p dir="auto"><code>--max-model-len</code> 单会话最大上下文长度（相当于 llama-server --ctx-size）</p>
<ul>
<li>虽然 <code>--kv-cache-memory-bytes</code> 定了 KVCache 总量，但 <code>--max-num-seqs</code> 和 <code>--max-model-len</code> 仍会影响调度，并不是越大越好，按需设置。</li>
</ul>
</li>
<li>
<p dir="auto"><code>--language-model-only</code> 完全关闭视觉以降低显存占用（大概有 1G 多）。按需</p>
</li>
<li>
<p dir="auto"><code>--speculative-config</code> MTP 受实际任务影响，接受率波动非常大。按需调整。我设了2</p>
<ul>
<li>注意，MTP 还会影响其它参数的设置</li>
</ul>
</li>
<li>
<p dir="auto"><code>--compilation-config '{"cudagraph_capture_sizes":[]}'</code></p>
<ul>
<li>
<p dir="auto">默认值略长，可以按 <code>--max-num-seqs</code> x (<code>num_speculative_tokens</code>+1) 设置。</p>
<p dir="auto">比如 8 并发 MTP 2，那么设为 [1,2,4,8,16,24]</p>
</li>
</ul>
</li>
<li>
<p dir="auto"><code>--max-num-batched-tokens</code> 更大 prefill 更快，但也会占用更多显存（我感觉不明显）</p>
<ul>
<li>
<p dir="auto">相当于 llama-server -cb</p>
</li>
<li>
<p dir="auto">同时开 MTP 和 lmcache 需要注意该值：</p>
<ol>
<li>找到启动时的 <code>Setting attention block size to</code>，设该值为 N</li>
<li>将 <code>--max-num-batched-tokens</code> 设置为 2N-1</li>
</ol>
</li>
</ul>
</li>
<li>
<p dir="auto"><code>--enable-prefix-caching</code> qwen3.5系列 必须加上才能开启前缀缓存</p>
</li>
<li>
<p dir="auto"><code>--mamba-cache-mode align</code></p>
<p dir="auto"><code>--kv-transfer-config '{"kv_connector":"LMCacheMPConnector","kv_role":"kv_both"}'</code></p>
<p dir="auto">开 lmcache 则需要这两条语句</p>
</li>
</ul>
</li>
<li>
<p dir="auto"><strong>lmcache 概述</strong>。</p>
<ul>
<li>lmcache 并不能增大 KVCache 池子，它的作用是把 KVCache 写入内存乃至硬盘，以增加前缀缓存命中率（相当于 llama-server --cache-idle-slots、--slot-save-path）</li>
<li>对 qwen3.5系列 能够略微增加额外的前缀缓存命中率。对 KVCache 满时换出换入有帮助</li>
<li>它本身会占用一定的显存（我这是每个 vllm 900M），根据个人需求安装启用</li>
</ul>
</li>
<li>
<p dir="auto"><strong>lmcache 运行参数</strong></p>
<ul>
<li><code>--chunk-size</code> 设置为 N（见上）</li>
<li><code>--separate-object-groups</code> qwen3.5系列必需</li>
<li>L2 写入硬盘在 lmcache 主线似乎还不能控制大小，按需或等更新</li>
</ul>
</li>
<li>
<p dir="auto"><strong>实战</strong>。接入 ClaudeCode</p>
<ul>
<li>prefill 和 decode 混合，速率是低于纯 decode 的</li>
<li>首轮输入会产生 1.5G 显存占用，要留空间</li>
<li>12 并发时接近 400 tps，然后 KVCache 满了排队。没有做太多测试</li>
</ul>
</li>
<li>
<p dir="auto"><strong>其它说明</strong></p>
<ul>
<li>以上的具体数值仅针对 4080S 32G</li>
<li>问 AI 是最佳实践</li>
<li>欢迎交流</li>
</ul>
</li>
</ol>
]]></description><link>https://lcz.me/topic/1070/4080s-32g-qwen3.6-27b-vllm-参数及踩坑</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 16:56:21 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1070.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Aug 2026 02:57:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Tue, 11 Aug 2026 10:17:31 GMT]]></title><description><![CDATA[<p dir="auto">@CHIA AN YANG Che 上面那组吞吐表就是答案，帮你把数抽出来：</p>
<p dir="auto">单并发（自己用、聊天的体感）：</p>
<ul>
<li>无 MTP：约 37 tok/s</li>
<li>MTP=1：54 tok/s</li>
<li>MTP=2：65 tok/s</li>
<li>MTP=3：70 tok/s，首 token 延迟也从 7s 降到 3.7s</li>
</ul>
<p dir="auto">聚合吞吐（多路并发，比如 ClaudeCode 并行任务）：</p>
<ul>
<li>无 MTP 峰值最高：conc=32 时 704 tok/s，conc=128 能到 787，但 32 之后开始排队</li>
<li>开 MTP 高并发收益反而下降：MTP=3 在 conc=16 就到顶 406 tok/s</li>
</ul>
<p dir="auto">他实战里跑 8 个 ClaudeCode 并行约 350 tps，16 个约 400 tps，但实际最大并发只有 12 就撞 KV cache 上限了。</p>
<p dir="auto">一句话：单用户看 37-70 tok/s（取决于 MTP），多并发聚合能到 700+，瓶颈在 KV cache 不在模型。</p>
]]></description><link>https://lcz.me/post/11888</link><guid isPermaLink="true">https://lcz.me/post/11888</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Tue, 11 Aug 2026 10:17:31 GMT</pubDate></item><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Tue, 11 Aug 2026 06:21:09 GMT]]></title><description><![CDATA[<p dir="auto">想知道每秒多少token ?</p>
]]></description><link>https://lcz.me/post/11878</link><guid isPermaLink="true">https://lcz.me/post/11878</guid><dc:creator><![CDATA[CHIA AN YANG]]></dc:creator><pubDate>Tue, 11 Aug 2026 06:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Mon, 10 Aug 2026 20:20:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a></p>
<p dir="auto">显卡在家里，暂时拍不到。。发点截图吧：<br />
ClaudeCode<br />
<img src="https://upload.lcz.me/uploads/509f8ba8-58e3-4d11-a574-e75cb44e90a1.png" alt="屏幕截图(85).png" class=" img-fluid img-markdown" /><br />
<img src="https://upload.lcz.me/uploads/178f2a50-91b4-4a3d-880f-c85fdced4ac2.png" alt="屏幕截图(86).png" class=" img-fluid img-markdown" /><br />
<img src="https://upload.lcz.me/uploads/bccd531c-b8e9-438d-9e50-151ce7f2880e.png" alt="屏幕截图(87).png" class=" img-fluid img-markdown" /><br />
vllm<br />
<img src="https://upload.lcz.me/uploads/d6a43ab1-9ea5-4179-af2b-8596c9e35cee.png" alt="屏幕截图(82).png" class=" img-fluid img-markdown" /><br />
lmcache<br />
<img src="https://upload.lcz.me/uploads/2594fc1b-57f4-446c-89af-f8bfbe088e15.png" alt="屏幕截图(83).png" class=" img-fluid img-markdown" /></p>
<hr />
<p dir="auto">另外，发现 lmcache 有 bug，导致qwen3.5系列输出乱码：<br />
<img src="https://upload.lcz.me/uploads/277871a1-98ed-417e-8014-f8938423d93c.png" alt="屏幕截图(84).png" class=" img-fluid img-markdown" /><br />
现在要用 lmcache 只能回退到 vllm0.25</p>
]]></description><link>https://lcz.me/post/11866</link><guid isPermaLink="true">https://lcz.me/post/11866</guid><dc:creator><![CDATA[Che]]></dc:creator><pubDate>Mon, 10 Aug 2026 20:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Mon, 10 Aug 2026 15:33:04 GMT]]></title><description><![CDATA[<p dir="auto">发下显卡实拍啊，日志截图之类的。</p>
]]></description><link>https://lcz.me/post/11857</link><guid isPermaLink="true">https://lcz.me/post/11857</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Mon, 10 Aug 2026 15:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Mon, 10 Aug 2026 14:34:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/terry" aria-label="Profile: terry">@<bdi>terry</bdi></a></p>
<ol>
<li>
<p dir="auto"><strong>吞吐</strong></p>
<ul>
<li>
<p dir="auto">无 MTP</p>
<pre><code class="language-zsh">并发       总时           平均延迟          吞吐
conc=  1  wall=  7.00s  avg_lat= 7.00s  agg=  36.6 tok/s
conc=  4  wall=  7.53s  avg_lat= 7.52s  agg= 136.0 tok/s
conc= 16  wall=  8.94s  avg_lat= 8.94s  agg= 457.9 tok/s
conc= 32  wall= 11.63s  avg_lat=11.62s  agg= 704.5 tok/s
conc= 64  wall= 23.91s  avg_lat=17.08s  agg= 685.4 tok/s
conc=128  wall= 41.63s  avg_lat=27.23s  agg= 787.1 tok/s
</code></pre>
<p dir="auto">可以看到 32 就开始排队了，KVCache 装不下，接下来砍掉 64 和 128 挡位：</p>
<pre><code class="language-zsh">conc=  1  wall=  6.85s  avg_lat= 6.85s  agg=  37.4 tok/s
conc=  4  wall=  7.51s  avg_lat= 7.50s  agg= 136.3 tok/s
conc=  8  wall=  7.82s  avg_lat= 7.81s  agg= 262.0 tok/s
conc= 16  wall=  8.94s  avg_lat= 8.94s  agg= 458.0 tok/s
conc= 24  wall= 10.41s  avg_lat=10.40s  agg= 590.2 tok/s
conc= 32  wall= 11.63s  avg_lat=11.62s  agg= 704.5 tok/s
</code></pre>
</li>
<li>
<p dir="auto">MTP=1</p>
<pre><code class="language-zsh">conc=  1  wall=  4.74s  avg_lat= 4.74s  agg=  54.0 tok/s
conc=  4  wall=  5.09s  avg_lat= 5.01s  agg= 201.1 tok/s
conc=  8  wall=  5.51s  avg_lat= 5.41s  agg= 371.8 tok/s
conc= 16  wall=  6.67s  avg_lat= 6.58s  agg= 613.7 tok/s
conc= 24  wall=  8.17s  avg_lat= 7.94s  agg= 752.5 tok/s
conc= 32  wall= 13.44s  avg_lat= 9.40s  agg= 609.6 tok/s
</code></pre>
</li>
<li>
<p dir="auto">MTP=2</p>
<pre><code class="language-zsh">conc=  1  wall=  3.95s  avg_lat= 3.95s  agg=  64.9 tok/s
conc=  4  wall=  4.45s  avg_lat= 4.32s  agg= 230.2 tok/s
conc=  8  wall=  5.03s  avg_lat= 4.92s  agg= 406.9 tok/s
conc= 16  wall=  6.37s  avg_lat= 6.17s  agg= 642.9 tok/s
conc= 24  wall= 11.92s  avg_lat= 8.53s  agg= 515.3 tok/s
conc= 32  wall= 13.17s  avg_lat= 9.86s  agg= 621.8 tok/s
</code></pre>
</li>
<li>
<p dir="auto">MTP=3</p>
<pre><code class="language-zsh">conc=  1  wall=  3.66s  avg_lat= 3.66s  agg=  70.0 tok/s
conc=  4  wall=  4.00s  avg_lat= 3.87s  agg= 255.7 tok/s
conc=  8  wall=  4.90s  avg_lat= 4.74s  agg= 418.1 tok/s
conc= 16  wall= 10.07s  avg_lat= 6.82s  agg= 406.6 tok/s
conc= 24  wall= 11.60s  avg_lat= 8.57s  agg= 529.6 tok/s
conc= 32  wall= 16.32s  avg_lat=10.36s  agg= 502.0 tok/s
</code></pre>
</li>
<li>
<p dir="auto">可见高并发 MTP 收益下降</p>
</li>
</ul>
</li>
<li>
<p dir="auto"><strong>KVCache</strong></p>
<ul>
<li>
<pre><code class="language-zsh">  --kv-cache-memory-bytes 9G
</code></pre>
<blockquote>
<p dir="auto">GPU KV cache size: 128,341 tokens</p>
</blockquote>
</li>
<li>
<pre><code class="language-zsh">  --kv-cache-memory-bytes 10G
</code></pre>
<blockquote>
<p dir="auto">GPU KV cache size: 141,994 tokens</p>
</blockquote>
</li>
<li>
<pre><code class="language-zsh">  --kv-cache-memory-bytes 9G \
  --kv-cache-dtype fp8_e4m3
</code></pre>
<blockquote>
<p dir="auto">GPU KV cache size: 220,013 tokens</p>
</blockquote>
</li>
<li>
<pre><code class="language-zsh">  --kv-cache-memory-bytes 10G \
  --kv-cache-dtype fp8_e4m3
</code></pre>
<blockquote>
<p dir="auto">GPU KV cache size: 243,419 tokens</p>
</blockquote>
</li>
<li>
<p dir="auto"><code>--kv-cache-memory-bytes</code> 极限大概在 13G，但这意味着必须砍掉 MTP、lmcache 等功能</p>
</li>
<li>
<p dir="auto">除了 <code>--kv-cache-memory-bytes</code> 和 <code>--kv-cache-dtype</code>，GPU KV cache size 实际值还受一些其它参数影响</p>
</li>
</ul>
</li>
<li>
<p dir="auto"><strong>视觉</strong></p>
<ul>
<li>
<p dir="auto">关闭（<code>--gpu-memory-utilization 0.8</code> 仅作为测试）</p>
<pre><code class="language-zsh">  --language-model-only \
  --gpu-memory-utilization 0.8
</code></pre>
<blockquote>
<p dir="auto">Free memory on device (31.08/31.47 GiB) on startup. Desired GPU memory utilization is (0.8, 25.17 GiB). Actual usage is 18.33 GiB for weight, 2.47 GiB for peak activation, 0.11 GiB for non-torch memory, and 0.51 GiB for CUDAGraph memory. Replace gpu_memory_utilization config with <code>--kv-cache-memory=3863865754</code> (3.6 GiB) to fit into requested memory, or <code>--kv-cache-memory=10206990336</code> (9.51 GiB) to fully utilize gpu memory. Current kv cache memory in use is 3.74 GiB.</p>
</blockquote>
</li>
<li>
<p dir="auto">开启</p>
<blockquote>
<p dir="auto">Free memory on device (31.21/31.48 GiB) on startup. Desired GPU memory utilization is (0.8, 25.18 GiB). Actual usage is 19.2 GiB for weight, 1.89 GiB for peak activation, 0.11 GiB for non-torch memory, and 0.52 GiB for CUDAGraph memory. Replace gpu_memory_utilization config with <code>--kv-cache-memory=3555439719</code> (3.31 GiB) to fit into requested memory, or <code>--kv-cache-memory=10030697984</code> (9.34 GiB) to fully utilize gpu memory. Current kv cache memory in use is 3.46 GiB.</p>
</blockquote>
</li>
<li>
<p dir="auto">可见视觉权重约 0.9G</p>
</li>
</ul>
</li>
<li>
<p dir="auto"><strong>lmcache</strong></p>
<ul>
<li>
<p dir="auto">ClaudeCode 第二轮对话</p>
<ul>
<li>
<p dir="auto">不开启</p>
<blockquote>
<p dir="auto">Prefix cache hit rate: 44.5%</p>
</blockquote>
</li>
<li>
<p dir="auto">开启</p>
<blockquote>
<p dir="auto">Prefix cache hit rate: 45.1%, External prefix cache hit rate: 6.3%</p>
</blockquote>
</li>
</ul>
</li>
<li>
<p dir="auto">ClaudeCode 跨会话</p>
<ul>
<li>
<p dir="auto">先发，首轮用时 15s</p>
</li>
<li>
<p dir="auto">后发，首轮用时 4s</p>
<blockquote>
<p dir="auto">Prefix cache hit rate: 0.0%, External prefix cache hit rate: 77.1%</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p dir="auto"><strong>实战</strong></p>
<ul>
<li>
<p dir="auto">使用 ClaudeCode workflow 并行处理不同话题。数量：</p>
<ul>
<li>8个：350 tps</li>
<li>16个：400 tps，实际上最大并发只有 12，KVCache 就满了</li>
</ul>
</li>
</ul>
</li>
<li>
<p dir="auto">暂时只测了这些</p>
</li>
</ol>
]]></description><link>https://lcz.me/post/11853</link><guid isPermaLink="true">https://lcz.me/post/11853</guid><dc:creator><![CDATA[Che]]></dc:creator><pubDate>Mon, 10 Aug 2026 14:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to 4080S 32G + qwen3.6-27B + vllm 参数及踩坑 on Mon, 10 Aug 2026 05:05:56 GMT]]></title><description><![CDATA[<p dir="auto">哥，这个是说明书吗？发点你的实际使用截图，参数数据，这些命令行参数不需要解释，AI会去搞定的。</p>
]]></description><link>https://lcz.me/post/11826</link><guid isPermaLink="true">https://lcz.me/post/11826</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Mon, 10 Aug 2026 05:05:56 GMT</pubDate></item></channel></rss>