<?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[（1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s]]></title><description><![CDATA[<p dir="auto"><img src="https://upload.lcz.me/uploads/2f2cba51-43cc-4275-9670-d61142fc0862.png" alt="Screenshot from 2026-09-20 16-21-19.png" class=" img-fluid img-markdown" /><br />
先講結論：這是我 8/26 那篇《雙 5090 跑 Qwen3.8-27B BF16 140K 實測數據與優化心得》（tid 1350）的續篇。那篇的結語是「MTP、NCCL 兩個『理論上應該更快』的方向實測更慢，最後贏的是最樸素的 tensor split + q8_0 KV + 合身 ctx，decode ~48 t/s」。</p>
<p dir="auto">這一個月我把 NCCL 和 MTP 重新做了一遍，<strong>結論反轉了</strong>：把「NCCL 真正跑起來」這件事做對之後，MTP 的投機解碼收益終於蓋過跨卡同步成本，<strong>decode 從 ~48 t/s 拉到 ~90 t/s，約 1.9×</strong>。重點不是「我編了 NCCL」這麼簡單——1350 那篇已經實測過「編了 NCCL 沒更快」，真正的關鍵是 <strong>NCCL + GPU 間 P2P 同時到位</strong>，這才是當時缺的那一塊。下面把因果鏈和踩的坑寫清楚。</p>
<h2>1. 硬體與軟體</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>項目</th>
<th>配置</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPU</td>
<td>2× RTX 5090 32GB（SM120 Blackwell）</td>
</tr>
<tr>
<td>CPU</td>
<td>Ryzen 9 9950X3D（16C/32T）</td>
</tr>
<tr>
<td>記憶體</td>
<td>60GB DDR5</td>
</tr>
<tr>
<td>系統</td>
<td>Ubuntu 24.04.4 LTS（Kernel 7.0.0-31-generic）</td>
</tr>
<tr>
<td>驅動</td>
<td>615.71.09（P2P 已開通，見 §4.1）</td>
</tr>
<tr>
<td>引擎</td>
<td>llama.cpp <strong>自編 fork</strong>（build 10702, commit eaf937655，<code>GGML_CUDA_NCCL=ON</code>，連 shim NCCL 2.29.7）</td>
</tr>
<tr>
<td>模型</td>
<td>Qwen3.8-27B-BF16（兩片 GGUF 共 54.6GB）＋ mmproj-F16（928MB，啟用 Vision）</td>
</tr>
<tr>
<td>Context</td>
<td>95,000（100K 實測 OOM，95K 安全，見 §4.3）</td>
</tr>
<tr>
<td>KV</td>
<td>q4_0 / q4_0（原 1350 用 q8_0，改 q4_0 省 VRAM 給 MTP，見 §4.4）</td>
</tr>
<tr>
<td>Split</td>
<td>tensor 0.5,0.5</td>
</tr>
<tr>
<td>MTP</td>
<td><strong>開啟</strong>（<code>--spec-draft-n-max 5 --spec-draft-n-min 5</code>，接受率 ~48.5%，見 §3）</td>
</tr>
<tr>
<td>用途</td>
<td>Hermes Agent 主腦，長期單 slot 真實對話流量，非固定短 prompt benchmark</td>
</tr>
</tbody>
</table>
<h2>2. 生產啟動參數</h2>
<p dir="auto">以下從運行中進程（PID 6343）的 <code>/proc/&lt;pid&gt;/cmdline</code> 直接抓，不是我貼的範例：</p>
<pre><code class="language-bash"># 關鍵：shim NCCL 必須優先載入（/usr/lib 的 libnccl 在 Blackwell 會卡死，見 §4.1）
export LD_LIBRARY_PATH="/path/to/llama-nccl/nccl-shim/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"

llama-server \
  -m Qwen3.8-27B-BF16-00001-of-00002.gguf \
  --mmproj mmproj-F16.gguf \
  --n-gpu-layers 99 \
  --split-mode tensor --tensor-split 0.5,0.5 \
  --ctx-size 95000 -fa on \
  --batch-size 4096 --ubatch-size 4096 \
  --cache-type-k q4_0 --cache-type-v q4_0 \
  -np 1 --kv-unified \
  --jinja \
  --spec-type draft-mtp --spec-draft-n-max 5 --spec-draft-n-min 5 \
  --metrics --no-webui
</code></pre>
<p dir="auto">重點說明：</p>
<ul>
<li><code>--spec-type draft-mtp</code>：Qwen3.8-27B 的 MTP draft 層（blk.64）<strong>內嵌在主 GGUF</strong>，不需要 <code>--model-draft</code> 另載一個 head。這是跟 Qwen3.8-Flash-Next 不同（那個要另外載 mtp-*.gguf）。</li>
<li><code>--spec-draft-n-max 5</code>：每輪最多猜 5 個 token。這模型的 draft head 接受率偏低（~48.5%），拉太深會被低接受率拖垮，5 是實測平衡點。</li>
<li><code>-np 1 --kv-unified</code>：單 slot 長 context。MTP 只在單併發下賺，多併發會反虧（跟 1350 結論一致）。</li>
<li><code>LD_LIBRARY_PATH</code> 指 shim NCCL 是<strong>強制</strong>的：binary 用 <code>ldd</code> 確認連的是 <code>nccl-shim/lib/libnccl.so.2</code>，不是 <code>/usr/lib</code> 的系統版（原因見 §4.1）。</li>
</ul>
<h2>3. 實測數據（生產 log 為準）</h2>
<p dir="auto">以下全部取自 llama-server 自己的 <code>print_timing</code> 與 <code>/metrics</code>，<strong>不是</strong> client 端量測（client 端 burst 量測會偏高 ~30%，這坑 1350 就提過）。統計區間為本次啟動後真實 Agent 流量：</p>
<pre><code class="language-text"># /metrics（整體累計）
llamacpp:tokens_predicted_total       28499
llamacpp:tokens_predicted_seconds      314.384  → decode 平均 90.65 tok/s
llamacpp:prompt_tokens_total         330713   （非 cached）
llamacpp:prompt_seconds_total          113.879  → prefill 平均 2904 tok/s
llamacpp:spec_decode_num_accepted_tokens_total  20187
llamacpp:spec_decode_num_draft_tokens_total     41603  → MTP 接受率 48.5%
llamacpp:n_tokens_max               95231    → 單 task 最大 context
llamacpp:requests_deferred               0
</code></pre>
<p dir="auto">逐 task 抽樣（每 task 一個 session turn，decode 取該 task 的 <code>print_timing tg</code>，prefill 取 <code>prompt eval time</code> 終點行）：</p>
<pre><code class="language-text">task    prompt        prefill     decode (tg)
5998    ~2.0K         2496 t/s    85~94 t/s
7586    ~8.7K         2749 t/s    91~103 t/s
8478    ~5.1K         2476 t/s    95~107 t/s
8848    ~1.4K         1675 t/s    85~100 t/s
5902    ~94.7K *      2967 t/s    （長 context 邊界）
7307    ~36.7K        3410 t/s    ~96 t/s
3675    ~34.1K        2681 t/s    （大 prompt 一次性 prefill）
</code></pre>
<p dir="auto">MTP 接受率（<code>print_timing</code> 的 <code>draft acceptance</code>，23 筆抽樣）：</p>
<pre><code class="language-text">draft acceptance = 0.53438 (  342 /  640 generated), mean len =  3.67
draft acceptance = 0.76602 (  789 / 1030 generated), mean len =  4.83
draft acceptance = 0.49560 (  451 /  910 generated), mean len =  3.48
draft acceptance = 0.35262 (  573 / 1625 generated), mean len =  2.76
...
23 筆抽樣平均 0.5251，範圍 0.3526 ~ 0.7660
</code></pre>
<p dir="auto">觀察：</p>
<ul>
<li><strong>decode 整體 ~90 t/s（<code>/metrics</code> 90.65，逐 task <code>tg</code> 平均 90.40，範圍 65~113）</strong>，比 1350 那篇的 ~48 t/s 幾乎翻倍。</li>
<li><strong>長 context 幾乎不衰减</strong>：94.7K 的 task 5902 prefill 仍跑到 2967 t/s，n_tokens_max 95231，全程 0 OOM、0 deferred。</li>
<li><strong>prefill 也跟著上去</strong>：2600~3400 t/s（1350 那篇 ~1158 t/s），NCCL 對 prefill 的 batch 通訊同樣有效。</li>
<li><strong>MTP 接受率 48.5%</strong> 偏低（這模型的 draft head 偏弱，比 Qwen3.8-Flash-Next 那篇的 69% 低一截），但 mean len 穩定在 3.3~3.9，配合低同步成本的 NCCL，投機解碼淨收益是正的。</li>
<li>VRAM 打滿：GPU0 32121 / GPU1 30985 MiB（各 32607 MiB），headroom 只剩 0.5~1.6GB/卡——q4_0 KV + MTP draft 層 + 95K ctx 把空間吃得很緊。</li>
</ul>
<h2>4. 實測過的優化方向：這一次哪些真的翻轉了</h2>
<h3>4.1 NCCL——1350 說「編了沒更快」，真正缺的是 P2P</h3>
<p dir="auto">這是本篇核心。<strong>1350 那篇的結論是「雙 5090 走 PCIe 的 internal AllReduce，實測 NCCL 自編版沒有更快，維持現狀」。</strong> 我這次重新做，發現當時的判斷漏了一塊：</p>
<ul>
<li>編 NCCL 只是第一步。Blackwell SM120 上，<code>/usr/lib</code> 的系統 libnccl（2.18.3+cud12）init 會<strong>卡死</strong>，根本起不來——所以要用 shim 版 NCCL 2.29.7，<code>LD_LIBRARY_PATH</code> 強制讓 binary 連 shim，<code>ldd</code> 確認不是 <code>/usr/lib</code> 那支。</li>
<li><strong>真正讓 NCCL 跑快的，是 GPU 間 P2P 到位</strong>。雙 5090 沒有 NVLink，tensor split 的跨卡 all-reduce 原本走 host 記憶體（PCIe 繞路）。這次驅動升到 615.71.09 + P2P 開通後，<code>nvidia-smi topo -p2p r</code> 回 <strong>OK / OK</strong>（之前不是），跨卡通訊走 GPU 直連 P2P，不再繞 host。</li>
<li>因果鏈是：<strong>P2P 到位 → 跨卡 all-reduce 成本大降 → MTP 的同步放大陷阱被規避 → MTP 投機解碼的淨收益變正 → decode 翻倍。</strong> 1350 時 MTP 關掉的根因，正是「internal AllReduce 走 PCIe 太慢 + MTP 每輪多次串行 draft forward × 每次跨卡同步」的成本乘法放大。把 P2P 補上之後，這個乘法被拆掉了。</li>
</ul>
<p dir="auto">一句話：<strong>「編 NCCL」和「NCCL 跑快」是兩件事，中間隔著一個 P2P。</strong></p>
<h3>4.2 MTP——從「實測放棄」到「重開且賺」</h3>
<p dir="auto">1350 時 MTP 關掉的三個原因（接受率 ~40%、佔 VRAM、雙卡同步開銷吃掉收益）裡，<strong>前兩個沒變，變的是第三個</strong>：</p>
<ul>
<li>接受率還是偏低（48.5% vs 1350 那篇記的 ~40%，略有回升但本質還是弱 draft head）；</li>
<li>MTP draft 層確實佔 VRAM（這也是 KV 從 q8_0 降 q4_0 的原因之一，見 §4.4）；</li>
<li>但<strong>跨卡同步成本被 §4.1 的 P2P 拆掉之後，投機解碼從淨負變淨正</strong>，decode 48 → 90 t/s。</li>
</ul>
<p dir="auto">驗證 MTP 真在跑的方法（給同樣配置的人）：啟動 log 會有 <code>creating MTP draft context against the target model</code>，<code>/metrics</code> 的 <code>spec_decode_num_draft_tokens_total</code> 持續成長、<code>print_timing</code> 有 <code>draft acceptance = 0.48...</code> 這種行，三個都齊才是真的在跑。</p>
<h3>4.3 Context：140K → 95K，因為要給 MTP 讓位</h3>
<p dir="auto">1350 是 140K ctx + q8_0 KV，headroom 約 1~2.3GB/卡。開 MTP 之後 draft 層要吃 VRAM，140K 直接 OOM。實測 <strong>100K OOM、95K 安全</strong>，所以砍到 95K。對 Hermes 這種 context 通常吃不到 100K 的場景，95K 夠用；要更長 context 就得再降 KV 量化或砍 MTP。</p>
<h3>4.4 KV：q8_0 → q4_0</h3>
<p dir="auto">1350 用 q8_0，這次降 q4_0，原因純粹是 VRAM：MTP draft 層 + 95K ctx 把空間吃滿（GPU0 只剩 0.5GB headroom）。q4_0 對 decode 品質影響很小（KV 量化主要影響長 context 的檢索精度），用 1.5× 的 VRAM 空間換 MTP 能開，是划算的交換。</p>
<h2>5. 跟 1350 的對照（同一台機、同一個模型）</h2>
<pre><code class="language-text">            1350 (8/26)         本篇 (9/20)
engine      LM Studio 2.29.0    自編 fork build 10702 + shim NCCL 2.29.7
AllReduce   internal (PCIe)     真 NCCL + GPU P2P (topo -p2p r = OK/OK)
MTP         關                  開 (n-max 5, 接受率 48.5%)
KV          q8_0                q4_0
ctx         140K                95K (100K OOM)
decode      ~48 t/s             ~90 t/s  (約 1.9×)
prefill     ~1158 t/s           ~2904 t/s
</code></pre>
<p dir="auto">最大的翻轉：<strong>1350 那篇放棄的兩件事（NCCL、MTP），這次因為補上 P2P 這塊拼圖，全部重新變成有效的優化。</strong></p>
<h2>6. 給雙卡玩家的參數建議（單 slot 長 context + MTP）</h2>
<pre><code class="language-text">--split-mode tensor --tensor-split 0.5,0.5   # 同型號卡
-fa on                                        # 必開
-ctk q4_0 -ctv q4_0                           # 開 MTP 時 KV 降 q4_0 省 VRAM
-np 1                                         # 單 slot（MTP 只在此下賺）
--ctx-size &lt;合身值&gt;                           # 100K 實測 OOM，95K 安全
-b 4096 -ub 4096
--jinja --metrics
--spec-type draft-mtp --spec-draft-n-max 5    # MTP（接受率偏低別拉太深）
# 前置：NCCL + P2P 雙到位（topo -p2p r = OK/OK）才開 MTP，否則照 1350 關掉
</code></pre>
<h2>7. 結語</h2>
<p dir="auto">1350 那篇的「先測再優化」結論是對的，但當時測 NCCL 的樣本漏了 P2P 這塊——<strong>「編了 NCCL 沒更快」的真實原因不是 NCCL 沒用，而是 GPU 間 P2P 沒開通，跨卡通訊還在繞 host 記憶體。</strong> 補上驅動 + P2P 之後，NCCL 才真正發揮，MTP 投機解碼的淨收益跟著變正，decode 從 48 翻倍到 90 t/s。</p>
<p dir="auto">最大的心得還是那句：<strong>先測再優化</strong>——但測的時候要把變數拆乾淨。我 1350 把「NCCL 沒更快」歸結到 NCCL 本身，這次才發現真正的變數是 P2P。踩過的坑（shim NCCL、P2P、ctx OOM、MTP 接受率偏低）都寫在上面了，希望對同樣在雙卡上想開 MTP 的人有參考價值。</p>
<p dir="auto">數據全部可重現：引擎端 log（<code>print_timing</code>）+ <code>/metrics</code>，啟動參數如上。有問題歡迎直接問。</p>
<hr />
<p dir="auto"><em>附：所有數據以引擎端 log 為準；client 端量測（TTFT/burst）與引擎端 print_timing 計時窗不同，會偏高，引用時請註明口徑。本篇為 tid 1350 的續篇，硬體/模型/用途不變，差異集中在 §4。</em></p>
<hr />
<h2>技術來源</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>技術/模型</th>
<th>官方來源</th>
</tr>
</thead>
<tbody>
<tr>
<td>Qwen3.8-27B（模型）</td>
<td><a href="https://huggingface.co/Qwen/Qwen3.8-27B" rel="nofollow ugc">Hugging Face</a></td>
</tr>
<tr>
<td>llama.cpp（推理框架）</td>
<td><a href="https://github.com/ggml-org/llama.cpp" rel="nofollow ugc">GitHub</a></td>
</tr>
<tr>
<td>NCCL（多卡通訊）</td>
<td><a href="https://github.com/NVIDIA/nccl" rel="nofollow ugc">GitHub</a></td>
</tr>
</tbody>
</table>
]]></description><link>https://lcz.me/topic/1840</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 21:27:24 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1840.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Sep 2026 08:27:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 12:26:49 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johnnybegood" aria-label="Profile: johnnybegood">@<bdi>johnnybegood</bdi></a> 你一定是老人，或者你覺的Q8 就夠了，或者Q8 + AI雲端就夠了....而事實上....BF16在某些場景真的會有肉眼般的改善（相較於Q8）....礙於BF16效能在沒有P2P之前雙5090不彰(沒有實用性pp 1400 decode 50)....這次有P2P 直接把 prefill 跟decode拉一倍上去....我後續的微調prefill 3000-4000 t/s(P2P啟動) 與 decode 90-120 t/s(MTP啟動).....這實用性就很大了....同樣差不多代價下，當你有法拉利開，妳開什麼TOYOTA....妳說是吧..</p>
]]></description><link>https://lcz.me/post/19771</link><guid isPermaLink="true">https://lcz.me/post/19771</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Mon, 21 Sep 2026 12:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 12:07:48 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/david-chen" aria-label="Profile: David-Chen">@<bdi>David-Chen</bdi></a> 请问您老贵庚？感觉有代沟哈。。。</p>
]]></description><link>https://lcz.me/post/19761</link><guid isPermaLink="true">https://lcz.me/post/19761</guid><dc:creator><![CDATA[johnnybegood]]></dc:creator><pubDate>Mon, 21 Sep 2026 12:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 11:43:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johnnybegood" aria-label="Profile: johnnybegood">@<bdi>johnnybegood</bdi></a> Q8 跟 BF16 是數學，是統計學....水電風力這梗我發完文章，有想到，只是不覺的討論這種玄學有什麼意義？ 還是妳覺的Q8 BF16也是玄學? 那更進一步4K畫質跟1080P甚至480P是不是也是玄學?</p>
]]></description><link>https://lcz.me/post/19746</link><guid isPermaLink="true">https://lcz.me/post/19746</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Mon, 21 Sep 2026 11:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 11:40:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bunsei" aria-label="Profile: Bunsei">@<bdi>Bunsei</bdi></a> 這架構不是限於5090....記得是N牌都能實現....你可以弄自己家的兩張N卡做 P2P....我是拋磚引玉....希望有人照著做...大家一起來分享情報</p>
]]></description><link>https://lcz.me/post/19744</link><guid isPermaLink="true">https://lcz.me/post/19744</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Mon, 21 Sep 2026 11:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 11:39:04 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/david-chen" aria-label="Profile: David-Chen">@<bdi>David-Chen</bdi></a></p>
<p dir="auto">你有所不知了， 我还以为你也玩音响，才举音响的例子：</p>
<p dir="auto">“高端音响用风电、水电还是火电”是音响发烧圈（Hi-Fi圈）里最著名的“玄学段子”（或称梗）。</p>
<p dir="auto">这个段子纯属娱乐和调侃，在科学上是完全不存在的。这个网络著名段子的原文通常这样描述：“用火电的力度大点，声音偏暖；用水电的声底偏冷，但解析力很高；用风电的空气感强，但音底偏飘。真正资深的发烧友，只用雅鲁藏布江的水电……”</p>
<p dir="auto">为什么说这是个“梗”？（科学事实）电网的“大锅饭”属性：无论是风力、水力还是火力发电，电厂产生的电能都会统一并入国家电网。电网中的电能是混合在一起的，无法分辨某一度电具体来自哪个发电厂。音响设备内部的电能转化：音响并不会直接使用电网里的 220V 交流电（AC）来放大音频信号。</p>
<p dir="auto">音响内部的电源变压器和整流稳压电路，会将交流电转化为纯净的直流电（DC），并存储在电容中，最后供给功放芯片或电子管使用。</p>
<p dir="auto">这个段子映射了什么真实的音响技术？虽然“听出风电水电”是开玩笑，但“玩音响最后就是玩电源”这句话在 Hi-Fi 圈确实有一定道理。</p>
<p dir="auto">高端音响对电源质量（即电能的纯净度）非常敏感：电网杂讯（电噪）：电网中常常充斥着邻居家用微波炉、电冰箱、日光灯或充电器带来的高频电磁干扰（EMI/RFI）。这些杂讯如果进入音响系统，可能会导致音响发出“沙沙”或“嗡嗡”的底噪。电压波动：用电高峰期电压不稳，可能会影响部分功放设备的动态表现。</p>
]]></description><link>https://lcz.me/post/19743</link><guid isPermaLink="true">https://lcz.me/post/19743</guid><dc:creator><![CDATA[johnnybegood]]></dc:creator><pubDate>Mon, 21 Sep 2026 11:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 11:35:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johnnybegood" aria-label="Profile: johnnybegood">@<bdi>johnnybegood</bdi></a> 你這問題沒頭沒腦的....牛頭不對馬嘴，你該不會是AI假冒人，亂發文吧？</p>
]]></description><link>https://lcz.me/post/19741</link><guid isPermaLink="true">https://lcz.me/post/19741</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Mon, 21 Sep 2026 11:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 11:33:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/david-chen" aria-label="Profile: David-Chen">@<bdi>David-Chen</bdi></a> 哈哈， 那请问您用的是风电还是水电？</p>
]]></description><link>https://lcz.me/post/19739</link><guid isPermaLink="true">https://lcz.me/post/19739</guid><dc:creator><![CDATA[johnnybegood]]></dc:creator><pubDate>Mon, 21 Sep 2026 11:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 07:02:51 GMT]]></title><description><![CDATA[<p dir="auto">接着 Bunsei 的建议补一句，别把「换引擎」和「白拿 2×」当成一回事：</p>
<p dir="auto">1）SGLang/vLLM 的两块真收益是 continuous batching（多并发才吃得到）和 TP 通信 overlap。你现在是单请求，前者收益≈0；能不能到你手上的 2×，全看后者叠加它家 spec decode 是否比你手上这份 llama.cpp 更高效。<br />
2）llama.cpp 的 --spec-type draft-mtp 吃的是模型内建的 MTP 层；SGLang 的 EAGLE3、vLLM 的 spec decode 多数走外挂 draft 模型，两条路不等价。换之前先确认目标引擎对 Qwen3.8 的 MTP head 有没有等价实现，否则你是在换变量，不是在比引擎。<br />
3）要对比就同条件：同 BF16 权重、同 95K ctx、同 q4_0 KV、同 TP=2 + P2P，报 decode t/s + 接受长度分布 + step time。只有接受长度不掉、step time 更低，才算真提升。<br />
4）54.6GB 权重 + 95K KV 塞 2×32GB 本来就紧，新引擎的显存池还要留权重 + KV + 激活 + 通信 buffer；先算清楚再上，别为了跑起来把 ctx 砍到没有可比性。</p>
]]></description><link>https://lcz.me/post/19693</link><guid isPermaLink="true">https://lcz.me/post/19693</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Mon, 21 Sep 2026 07:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 06:54:16 GMT]]></title><description><![CDATA[<p dir="auto">老哥我感觉你这个预填充速度有点慢？ 既然现在5090能解锁P2P了，不如去尝试一下SGLang、或者是vLLM？我觉得至少能有2倍左右的提升。</p>
]]></description><link>https://lcz.me/post/19691</link><guid isPermaLink="true">https://lcz.me/post/19691</guid><dc:creator><![CDATA[Bunsei]]></dc:creator><pubDate>Mon, 21 Sep 2026 06:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 06:18:23 GMT]]></title><description><![CDATA[<p dir="auto">期待幾年後 中階卡 VRAM 起跳就是 32GB, 48GB, 10年後128G<br />
不過現在軟體科技的進步, 小模型變得更聰明也是有些幫助</p>
]]></description><link>https://lcz.me/post/19682</link><guid isPermaLink="true">https://lcz.me/post/19682</guid><dc:creator><![CDATA[kos or]]></dc:creator><pubDate>Mon, 21 Sep 2026 06:18:23 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 05:55:03 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johnnybegood" aria-label="Profile: johnnybegood">@<bdi>johnnybegood</bdi></a> 就跟聽音樂你會追求無損的聲音，一樣的感覺，而且有人比對過 Q8 跟 BF16 還是有差異</p>
]]></description><link>https://lcz.me/post/19677</link><guid isPermaLink="true">https://lcz.me/post/19677</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Mon, 21 Sep 2026 05:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Mon, 21 Sep 2026 04:38:42 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/david-chen" aria-label="Profile: David-Chen">@<bdi>David-Chen</bdi></a> 跑BF16全尺寸的意义是什么？</p>
]]></description><link>https://lcz.me/post/19670</link><guid isPermaLink="true">https://lcz.me/post/19670</guid><dc:creator><![CDATA[johnnybegood]]></dc:creator><pubDate>Mon, 21 Sep 2026 04:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Sun, 20 Sep 2026 16:38:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dardeaw-feng" aria-label="Profile: dardeaw-feng">@<bdi>dardeaw-feng</bdi></a> 這的確是下一個努力目標....畢竟P2P已經破解....選Qwen 3.8 27B BF16 主要是覺的這相對簡單可控</p>
]]></description><link>https://lcz.me/post/19592</link><guid isPermaLink="true">https://lcz.me/post/19592</guid><dc:creator><![CDATA[David Chen]]></dc:creator><pubDate>Sun, 20 Sep 2026 16:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Sun, 20 Sep 2026 16:05:48 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/david-chen" aria-label="Profile: David-Chen">@<bdi>David-Chen</bdi></a> 我認為雙卡5090 就別跑27B了，改用Qwen3.8 flash next吧，現在NVFP4下去擠看看系統RAM跟n-gram SSD，知識量跟思維鍊確實有落差，還更快，供參考</p>
]]></description><link>https://lcz.me/post/19588</link><guid isPermaLink="true">https://lcz.me/post/19588</guid><dc:creator><![CDATA[dardeaw feng]]></dc:creator><pubDate>Sun, 20 Sep 2026 16:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to （1350 續篇）雙 5090 跑 Qwen3.8-27B BF16全尺寸模型：把 NCCL 和 MTP 做對，decode 從 48 翻倍到 90 t/s on Sun, 20 Sep 2026 10:02:46 GMT]]></title><description><![CDATA[<p dir="auto">做得很干净，尤其是把「编了 NCCL」和「NCCL 跑快」拆成两件事、并定位到 P2P 这个变量——这才是这篇真正的方法论贡献，48→90（1.9x）和你的因果链自洽。</p>
<p dir="auto">补几点，可以让结论更硬、也方便别人复现：</p>
<ol>
<li>
<p dir="auto">想把「P2P」的贡献单独隔离出来，最干净的 A/B 是同一份 binary、同一个 shim NCCL，加 <code>NCCL_P2P_DISABLE=1</code>（或 <code>NCCL_P2P_LEVEL=LOC</code>）跑对照组。这样 decode 的差就只来自 P2P 开关，不用把驱动升级、KV q8_0→q4_0、ctx 140K→95K、MTP 开关这几个变量一起吞下去。你从 1350 到本篇同时动了 5 个变量，读者一定会问「到底几分是 P2P 的」。</p>
</li>
<li>
<p dir="auto">shim NCCL 那段是全文最值钱的坑，建议把「怎么确认 binary 连的是 shim」写成一个可复制检查：<code>ldd $(which llama-server) | grep nccl</code> 必须指向 shim 路径。LD_LIBRARY_PATH 很容易被后续 shell/容器覆盖，长跑进程最好用 rpath 或 wrapper 固定住。</p>
</li>
<li>
<p dir="auto">MTP 还有一个便宜的头顶空间：你现在 headroom 只剩 0.5–1.6 GB/卡，KV 已经 q4_0 不能再降。可以扫 <code>--spec-draft-n-max 3 / 5 / 7</code> 的净 t/s（接受率 48.5%、mean len 3.3–3.9 偏低，n 拉深多半会被低接受率吃回去，但值得用 <code>spec_decode_num_accepted_tokens_total / num_draft_tokens_total</code> 加 print_timing 的 tg 各扫一轮确认），把「5 是平衡点」从直觉变成数据。</p>
</li>
<li>
<p dir="auto">q4_0 KV 对 decode t/s 几乎无损这点是对的，但代价在长 context 的检索精度。你跑的是长对话 + 95K ctx，建议补一组 q4_0 vs q8_0 的同题长文检索对照（看答案命中率而不是 t/s），确认这个交换在你的真实负载上没有暗伤。</p>
</li>
</ol>
<p dir="auto">硬件事实那节（2×5090、sm120、P2P OK/OK、95K 安全）写得很清楚，其他双卡玩家可以直接抄参数。</p>
]]></description><link>https://lcz.me/post/19534</link><guid isPermaLink="true">https://lcz.me/post/19534</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Sun, 20 Sep 2026 10:02:46 GMT</pubDate></item></channel></rss>