<?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[X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战]]></title><description><![CDATA[<h1>X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战</h1>
<blockquote>
<p dir="auto">这篇主要解决一个问题：<strong>X99 / Broadwell-EP 上，两张位于不同 CPU Root Port 的 AMD Radeon AI PRO R9700，怎样真正跑通 Direct P2P，并确认它最终对 SGLang + Qwen3.8 有实际收益。</strong></p>
<p dir="auto">我把内容分成两部分：前半部分是“可以直接抄作业”的配置与验收流程；后半部分再解释 Huge BAR、44-bit DMA、Linux P2PDMA、RCCL PHB 等问题为什么会卡住。</p>
</blockquote>
<hr />
<h2>先看结果</h2>
<p dir="auto">硬件平台：</p>
<ul>
<li>CPU：Intel Xeon E5-2697A v4</li>
<li>主板：华南金牌 X99-TF GAMING V6.0</li>
<li>内存：128GB DDR4</li>
<li>GPU：2 × AMD Radeon AI PRO R9700 32GB</li>
<li>两张 GPU 位于不同 CPU Root Port</li>
<li>PCIe：Gen3 x16 ×2</li>
<li>系统：Ubuntu 24.04 Server</li>
<li>Kernel：<code>6.8.12-r9700-p2p-dma44</code></li>
<li>RCCL：2.27.7 + P2P level patch</li>
<li>SGLang：v0.5.18 系列</li>
<li>模型：Qwen3.8-27B-AWQ-MTP</li>
<li>Tensor Parallel：TP=2</li>
</ul>
<p dir="auto"><img src="https://upload.lcz.me/uploads/b21d89f3-ea88-4413-9e84-7fdcad54291e.jpeg" alt="image.jpeg" class=" img-fluid img-markdown" /></p>
<h3>P2P / RCCL</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>项目</th>
<th style="text-align:right">实测</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPU0 → GPU1 GFX Push</td>
<td style="text-align:right">≈10.29 GB/s</td>
</tr>
<tr>
<td>GPU1 → GPU0 GFX Push</td>
<td style="text-align:right">≈10.29 GB/s</td>
</tr>
<tr>
<td>DMA / SDMA P2P</td>
<td style="text-align:right">≈10.26–10.29 GB/s</td>
</tr>
<tr>
<td>双向同时 GFX aggregate</td>
<td style="text-align:right">≈19.76 GB/s</td>
</tr>
<tr>
<td>双向同时 DMA aggregate</td>
<td style="text-align:right">≈19.70 GB/s</td>
</tr>
<tr>
<td>RCCL SendRecv 1GB</td>
<td style="text-align:right">≈9.75 GB/s</td>
</tr>
<tr>
<td>RCCL AllReduce BusBW</td>
<td style="text-align:right">≈9.51 GB/s</td>
</tr>
<tr>
<td>RCCL AllGather BusBW</td>
<td style="text-align:right">≈9.16 GB/s</td>
</tr>
<tr>
<td>RCCL ReduceScatter BusBW</td>
<td style="text-align:right">≈8.92 GB/s</td>
</tr>
</tbody>
</table>
<p dir="auto">最终日志确认：</p>
<pre><code class="language-text">isAllDirectP2p 1
via P2P/IPC
</code></pre>
<p dir="auto">不是 SHM。</p>
<h3>SGLang + Qwen3.8 Cold Prefill</h3>
<p dir="auto"><code>cached_tokens=0</code>：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Context</th>
<th style="text-align:right">Prefill Throughput</th>
<th style="text-align:right">TTFT</th>
</tr>
</thead>
<tbody>
<tr>
<td>1K</td>
<td style="text-align:right"><strong>1566 tok/s</strong></td>
<td style="text-align:right"><strong>0.654 s</strong></td>
</tr>
<tr>
<td>64K</td>
<td style="text-align:right"><strong>1250 tok/s</strong></td>
<td style="text-align:right"><strong>52.42 s</strong></td>
</tr>
<tr>
<td>96K</td>
<td style="text-align:right"><strong>1104 tok/s</strong></td>
<td style="text-align:right"><strong>89.04 s</strong></td>
</tr>
<tr>
<td>128K</td>
<td style="text-align:right"><strong>988 tok/s</strong></td>
<td style="text-align:right"><strong>132.65 s</strong></td>
</tr>
<tr>
<td>192K</td>
<td style="text-align:right"><strong>816 tok/s</strong></td>
<td style="text-align:right"><strong>240.90 s</strong></td>
</tr>
<tr>
<td>224K</td>
<td style="text-align:right"><strong>751 tok/s</strong></td>
<td style="text-align:right"><strong>305.32 s</strong></td>
</tr>
<tr>
<td>Near256K / 251.5K</td>
<td style="text-align:right"><strong>712 tok/s</strong></td>
<td style="text-align:right"><strong>353.35 s</strong></td>
</tr>
</tbody>
</table>
<h3>Native Decode / MTP</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Context</th>
<th style="text-align:right">Native</th>
<th style="text-align:right">MTP</th>
<th style="text-align:right">MTP 相对 Native</th>
</tr>
</thead>
<tbody>
<tr>
<td>1K</td>
<td style="text-align:right">31.40 tok/s</td>
<td style="text-align:right"><strong>44.04 tok/s</strong></td>
<td style="text-align:right"><strong>+40.25%</strong></td>
</tr>
<tr>
<td>64K</td>
<td style="text-align:right">27.70 tok/s</td>
<td style="text-align:right"><strong>36.51 tok/s</strong></td>
<td style="text-align:right"><strong>+31.81%</strong></td>
</tr>
<tr>
<td>128K</td>
<td style="text-align:right">24.79 tok/s</td>
<td style="text-align:right"><strong>27.47 tok/s</strong></td>
<td style="text-align:right"><strong>+10.81%</strong></td>
</tr>
<tr>
<td>192K</td>
<td style="text-align:right">22.40 tok/s</td>
<td style="text-align:right"><strong>25.48 tok/s</strong></td>
<td style="text-align:right"><strong>+13.75%</strong></td>
</tr>
<tr>
<td>224K</td>
<td style="text-align:right">21.40 tok/s</td>
<td style="text-align:right">—</td>
<td style="text-align:right">—</td>
</tr>
<tr>
<td>Near256K / 251.5K</td>
<td style="text-align:right"><strong>20.76 tok/s</strong></td>
<td style="text-align:right">—</td>
<td style="text-align:right">—</td>
</tr>
</tbody>
</table>
<h3>真实 Agent 工作负载</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>场景</th>
<th style="text-align:right">Total Gain</th>
<th style="text-align:right">Warm Gain</th>
</tr>
</thead>
<tbody>
<tr>
<td>64K Coding Loop</td>
<td style="text-align:right">+3.31%</td>
<td style="text-align:right"><strong>+18.77%</strong></td>
</tr>
<tr>
<td>Tool Loop</td>
<td style="text-align:right"><strong>+32.49%</strong></td>
<td style="text-align:right"><strong>+31.39%</strong></td>
</tr>
<tr>
<td>Mixed Thinking + Code</td>
<td style="text-align:right"><strong>+51.68%</strong></td>
<td style="text-align:right">—</td>
</tr>
<tr>
<td>128K Multi-Turn</td>
<td style="text-align:right">-4.74%</td>
<td style="text-align:right">-16.22%</td>
</tr>
</tbody>
</table>
<p dir="auto">64K / 128K 多轮对话中 Prefix Cache 均正常命中，<code>REPEATED_FULL_PREFILL = NO</code>。</p>
<p dir="auto">另外，对比 Stock SHM 与 Direct P2P，长上下文 Prefill 提升约：</p>
<pre><code class="language-text">+30.6% ～ +36.7%
</code></pre>
<p dir="auto">TTFT 降低约：</p>
<pre><code class="language-text">23.4% ～ 26.9%
</code></pre>
<h3>一句话结论</h3>
<blockquote>
<p dir="auto"><strong>X99 的问题不是“PCIe 3.0 天生不能做双卡 AI 推理”，而是默认软件栈没有替你处理好跨 Root Port P2PDMA、Huge BAR、44-bit DMA 和 RCCL P2P level。</strong></p>
<p dir="auto">把这些层逐一跑通后，这套双 R9700 可以做到约 10.3GB/s 单向 P2P、约 19.7GB/s 双向聚合，并且能实际转化成 SGLang TP2 的长上下文 Prefill、Decode 和 MTP 收益。</p>
</blockquote>
<hr />
<h1>第一部分：直接抄作业</h1>
<h2>1. 最终稳定配置</h2>
<h3>BIOS</h3>
<pre><code class="language-text">Above 4G Decoding = ON
Resizable BAR     = ON
CSM               = OFF
</code></pre>
<h3>Linux / HIP</h3>
<pre><code class="language-text">Ubuntu 24.04 Server
Kernel: 6.8.12-r9700-p2p-dma44
</code></pre>
<p dir="auto">HIP IPC：</p>
<pre><code class="language-bash">export HSA_ENABLE_IPC_MODE_LEGACY=0
</code></pre>
<p dir="auto">我的最终稳定配置<strong>不需要</strong>：</p>
<pre><code class="language-bash">HSA_FORCE_FINE_GRAIN_PCIE=1
</code></pre>
<h3>RCCL</h3>
<pre><code class="language-bash">export NCCL_P2P_LEVEL=PHB
</code></pre>
<p dir="auto">并使用调整了 P2P level 优先级的 RCCL 2.27.7。</p>
<h3>SGLang Native</h3>
<pre><code class="language-text">TP=2
Graph ON
BF16 PV
BF16 KV
num_kv_splits=8
Direct P2P PHB
patched RCCL
</code></pre>
<h3>MTP</h3>
<pre><code class="language-text">steps=3
top_k=1
draft_tokens=4
RDNA4 Patch065
</code></pre>
<p dir="auto">当前生产路由：</p>
<pre><code class="language-text">&lt;=192K → MTP_FAST
&gt;192K  → NATIVE_SAFE
</code></pre>
<hr />
<h2>2. 推荐验收顺序</h2>
<p dir="auto">不要跳步骤，建议严格按下面顺序：</p>
<pre><code class="language-text">1. BIOS
   ↓
2. PCIe Topology / Link
   ↓
3. BAR / ReBAR / DMA Address
   ↓
4. Kernel P2PDMA
   ↓
5. HIP IPC
   ↓
6. TransferBench Push
   ↓
7. TransferBench DMA
   ↓
8. Bidirectional TransferBench
   ↓
9. RCCL SendRecv
   ↓
10. RCCL Collectives
   ↓
11. SGLang Direct P2P
   ↓
12. Native Model Benchmark
   ↓
13. Speculative Decode
   ↓
14. Real Agent Workload
</code></pre>
<p dir="auto">核心原则：</p>
<blockquote>
<p dir="auto"><strong>先证明底层链路，再证明通信库，再证明推理框架。不要用最终 tok/s 倒推 P2P 是否成功。</strong></p>
</blockquote>
<hr />
<h2>3. 每一层的 PASS 标准</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>层级</th>
<th>我使用的 PASS 标准</th>
</tr>
</thead>
<tbody>
<tr>
<td>PCIe</td>
<td>两张卡均为 Gen3 x16</td>
</tr>
<tr>
<td>HIP IPC</td>
<td>双向 IPC handle 可正常 open / access</td>
</tr>
<tr>
<td>TransferBench Push / DMA</td>
<td>约 9–10GB/s 级</td>
</tr>
<tr>
<td>双向 TransferBench</td>
<td>aggregate 明显高于单向；我的结果约 19.7GB/s</td>
</tr>
<tr>
<td>RCCL SendRecv</td>
<td>应尽量逼近 TransferBench；我的结果 9.75 vs 10.29GB/s</td>
</tr>
<tr>
<td>SGLang</td>
<td><code>isAllDirectP2p 1</code> + <code>via P2P/IPC</code></td>
</tr>
<tr>
<td>Qwen3.8 Native</td>
<td>251.5K Context 能稳定运行</td>
</tr>
<tr>
<td>MTP</td>
<td>1K–192K 相对 Native 保持正收益</td>
</tr>
</tbody>
</table>
<p dir="auto">如果 TransferBench Push / DMA 只有 2–3GB/s，不建议继续往上层调 RCCL。</p>
<hr />
<h2>4. 最短检查命令</h2>
<h3>检查 PCIe 链路</h3>
<pre><code class="language-bash">sudo lspci -vv -s &lt;GPU_BDF&gt; | grep -E "LnkCap|LnkSta"
</code></pre>
<p dir="auto">正常应看到类似：</p>
<pre><code class="language-text">LnkSta: Speed 8GT/s, Width x16
</code></pre>
<h3>看 PCIe 拓扑</h3>
<pre><code class="language-bash">lspci -tv
lspci -nn
</code></pre>
<p dir="auto">建议保存：</p>
<pre><code class="language-bash">lspci -tv &gt; pcie-topology.txt
sudo lspci -vv &gt; lspci-vv.txt
</code></pre>
<h3>HIP IPC</h3>
<pre><code class="language-bash">export HSA_ENABLE_IPC_MODE_LEGACY=0
</code></pre>
<p dir="auto">然后分别验证 GPU0 → GPU1 和 GPU1 → GPU0 的 IPC handle 打开与访问。</p>
<h3>RCCL</h3>
<pre><code class="language-bash">export NCCL_P2P_LEVEL=PHB
</code></pre>
<p dir="auto">最终必须从日志确认真正使用 P2P，而不是只看程序成功启动。</p>
<hr />
<h1>第二部分：P2P 是怎么跑通的</h1>
<h2>5. 先确认：PCIe x16 不等于 GPU P2P 已经可用</h2>
<p dir="auto">我的两张 R9700 都能看到：</p>
<pre><code class="language-text">LnkSta: Speed 8GT/s, Width x16
</code></pre>
<p dir="auto">但它们位于不同 CPU Root Port。</p>
<p dir="auto">因此真正要解决的是：</p>
<ol>
<li>Linux 是否允许跨 Root Port P2PDMA；</li>
<li>GPU BAR 是否落在 DMA 可以访问的地址范围；</li>
<li>HIP / RCCL 是否愿意真的使用 Direct P2P；</li>
<li>最终 SGLang 是否走 <code>P2P/IPC</code> 而不是 SHM。</li>
</ol>
<hr />
<h2>6. MPS / MRRS：不要先在这里浪费时间</h2>
<p dir="auto">Broadwell 这套平台 Root Port 和 endpoint 的最大 MPS 是 <strong>256B</strong>。</p>
<p dir="auto">因此不要照搬某些平台的：</p>
<pre><code class="language-text">MPS=512
MPS=1024
</code></pre>
<p dir="auto">调优。</p>
<p dir="auto">另外，即使 Root Port 看到 MRRS 128B，也不能直接得出“GPU DMA 只能低速”的结论。</p>
<p dir="auto">我的实测最终仍然有：</p>
<pre><code class="language-text">DMA / SDMA P2P ≈10.26–10.29 GB/s
</code></pre>
<hr />
<h2>7. 第一个核心问题：Huge BAR + 44-bit DMA</h2>
<p dir="auto">开启 Above 4G / ReBAR 后，R9700 会获得很大的 BAR。</p>
<p dir="auto">我的环境中曾出现约：</p>
<pre><code class="language-text">56 TiB
</code></pre>
<p dir="auto">区域的 BAR 映射。</p>
<p dir="auto">而相关 DMA 路径存在约：</p>
<pre><code class="language-text">44-bit DMA addressability
</code></pre>
<p dir="auto">44-bit 可直接表示的地址空间约为：</p>
<pre><code class="language-text">16 TiB
</code></pre>
<p dir="auto">这会导致一种非常迷惑的状态：</p>
<pre><code class="language-text">CPU 能访问 BAR
GPU 枚举正常
ReBAR 正常
PCIe x16 正常
但另一张 GPU 的 DMA engine 无法正确访问该 BAR 地址
</code></pre>
<p dir="auto">所以：</p>
<blockquote>
<p dir="auto"><strong><code>lspci</code> 看起来一切正常，不等于 GPU P2P 就已经正常。</strong></p>
</blockquote>
<hr />
<h2>8. 第二个核心问题：Linux 跨 Root Port P2PDMA</h2>
<p dir="auto">Linux P2PDMA 会根据：</p>
<ul>
<li>provider</li>
<li>client</li>
<li>PCI bridge</li>
<li>Root Port</li>
<li>topology</li>
</ul>
<p dir="auto">判断 P2P 是否允许。</p>
<p dir="auto">我的 Broadwell Root Port 属于：</p>
<pre><code class="language-text">8086:6f00
</code></pre>
<p dir="auto">最终使用的自定义内核：</p>
<pre><code class="language-text">6.8.12-r9700-p2p-dma44
</code></pre>
<p dir="auto">主要处理两个问题：</p>
<ol>
<li>Broadwell <code>8086:6f00</code> 跨 Root Port P2PDMA；</li>
<li>Huge BAR + 44-bit DMA 地址限制。</li>
</ol>
<p dir="auto">这里不建议使用“所有跨 Root Port 一律允许”的暴力 patch。</p>
<p dir="auto">更合理的方式是只针对已经确认、已经实测通过的拓扑处理。</p>
<hr />
<h2>9. 内核通过后先测 HIP IPC</h2>
<p dir="auto">不要直接进入 RCCL。</p>
<p dir="auto">测试逻辑应该是：</p>
<pre><code class="language-text">GPU0 分配显存
↓
生成 IPC handle
↓
GPU1 打开
↓
GPU1 访问
</code></pre>
<p dir="auto">然后反方向再做一次。</p>
<p dir="auto">我的环境：</p>
<pre><code class="language-bash">export HSA_ENABLE_IPC_MODE_LEGACY=0
</code></pre>
<p dir="auto">双向 HIP IPC 通过以后，才继续做 TransferBench。</p>
<hr />
<h2>10. TransferBench：底层 P2P 的关键验收</h2>
<p dir="auto">至少应该分别看：</p>
<ul>
<li>GFX Push</li>
<li>GFX Pull</li>
<li>DMA / SDMA</li>
<li>双向同时传输</li>
</ul>
<h3>GFX Push</h3>
<pre><code class="language-text">GPU0 -&gt; GPU1 ≈10.29 GB/s
GPU1 -&gt; GPU0 ≈10.29 GB/s
</code></pre>
<h3>DMA / SDMA</h3>
<pre><code class="language-text">≈10.26–10.29 GB/s
</code></pre>
<p dir="auto">这两项正常后，才能比较有把握地说：</p>
<blockquote>
<p dir="auto">跨 Root Port Direct P2P 数据路径已经跑通。</p>
</blockquote>
<h3>GFX Pull</h3>
<p dir="auto">我的结果：</p>
<pre><code class="language-text">GPU1 read GPU0 ≈3.13–3.16 GB/s
GPU0 read GPU1 ≈1.46–1.49 GB/s
</code></pre>
<p dir="auto">Pull 明显比 Push 慢，而且有方向差异。</p>
<p dir="auto">但因为 Push、DMA、RCCL 最终都正常，所以：</p>
<blockquote>
<p dir="auto"><strong>不要只看 GFX Pull 就判断 P2P 是否成功。</strong></p>
</blockquote>
<h3>双向同时传输</h3>
<pre><code class="language-text">GFX simultaneous bidirectional ≈19.759 GB/s aggregate
DMA simultaneous bidirectional ≈19.701 GB/s aggregate
</code></pre>
<p dir="auto">这证明两个方向可以同时接近 10GB/s，并不是“双卡共享一个总共 10GB/s 的瓶颈”。</p>
<hr />
<h2>11. TransferBench 正常，但 Stock RCCL 仍然慢</h2>
<p dir="auto">最初 Stock RCCL：</p>
<pre><code class="language-text">SendRecv 1GB ≈6.90 GB/s
</code></pre>
<p dir="auto">明显低于：</p>
<pre><code class="language-text">TransferBench Push ≈10.29 GB/s
</code></pre>
<p dir="auto">继续查日志后发现，RCCL 并没有按预期走跨 Root Port Direct P2P，而是退到了类似：</p>
<pre><code class="language-text">SHM / direct / direct
</code></pre>
<p dir="auto">这一步非常关键：</p>
<blockquote>
<p dir="auto"><strong>底层 PCIe P2P 已经跑通，不代表 RCCL 一定会选择 P2P。</strong></p>
</blockquote>
<hr />
<h2>12. RCCL 2.27.7：Intel P2P level 覆盖问题</h2>
<p dir="auto">最终问题定位到 RCCL 的路径选择逻辑。</p>
<p dir="auto">我在：</p>
<pre><code class="language-text">src/graph/paths.cc
</code></pre>
<p dir="auto">调整了 Intel 默认 P2P level 和：</p>
<pre><code class="language-text">ncclGetUserP2pLevel
</code></pre>
<p dir="auto">的处理顺序。</p>
<p dir="auto">核心原则：</p>
<blockquote>
<p dir="auto"><strong>用户显式设置的 <code>NCCL_P2P_LEVEL</code> 应该最后生效，而不是再被平台默认值覆盖。</strong></p>
</blockquote>
<p dir="auto">然后：</p>
<pre><code class="language-bash">export NCCL_P2P_LEVEL=PHB
</code></pre>
<p dir="auto">这里需要强调：</p>
<blockquote>
<p dir="auto"><strong>Patch + <code>NCCL_P2P_LEVEL=PHB</code> 两者都需要。</strong></p>
</blockquote>
<hr />
<h2>13. RCCL 最终验收</h2>
<p dir="auto">修复后：</p>
<pre><code class="language-text">SendRecv 1GB ≈9.75 GB/s
</code></pre>
<p dir="auto">其他 collective：</p>
<pre><code class="language-text">AllReduce BusBW     ≈9.51 GB/s

AllGather AlgBW     ≈18.31 GB/s
AllGather BusBW     ≈9.16 GB/s

ReduceScatter AlgBW ≈17.83 GB/s
ReduceScatter BusBW ≈8.92 GB/s
</code></pre>
<p dir="auto">TransferBench Push ≈10.29GB/s，RCCL SendRecv ≈9.75GB/s：</p>
<pre><code class="language-text">9.75 / 10.29 ≈94.7%
</code></pre>
<p dir="auto">测试期间：</p>
<pre><code class="language-text">AER error = 0
DMAR error = 0
GPU reset = 0
</code></pre>
<p dir="auto">到这里我才把底层 P2P 标记为真正通过。</p>
<hr />
<h2>14. 最后一层：SGLang 必须确认不是 SHM</h2>
<p dir="auto"><code>TP=2</code> 能启动，不代表 Direct P2P 已经工作。</p>
<p dir="auto">最终必须确认日志：</p>
<pre><code class="language-text">isAllDirectP2p 1
via P2P/IPC
</code></pre>
<p dir="auto">如果仍然看到 SHM，那么模型虽然能跑，但并没有进入前面验证好的 Direct P2P 路径。</p>
<hr />
<h1>第三部分：跑通 P2P 后，Qwen3.8 实际能到什么水平</h1>
<h2>15. Qwen3.8 测试配置</h2>
<pre><code class="language-text">SGLang v0.5.18
Qwen3.8-27B-AWQ-MTP
TP=2
Dual R9700 32GB
Direct P2P PHB
patched RCCL
Graph ON
BF16 PV ON
BF16 KV
num_kv_splits=8
</code></pre>
<hr />
<h2>16. Cold Prefill</h2>
<p dir="auto"><code>cached_tokens=0</code>：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Context</th>
<th style="text-align:right">Prefill Throughput</th>
<th style="text-align:right">TTFT</th>
</tr>
</thead>
<tbody>
<tr>
<td>1K</td>
<td style="text-align:right">1566 tok/s</td>
<td style="text-align:right">0.654 s</td>
</tr>
<tr>
<td>64K</td>
<td style="text-align:right">1250 tok/s</td>
<td style="text-align:right">52.42 s</td>
</tr>
<tr>
<td>96K</td>
<td style="text-align:right">1104 tok/s</td>
<td style="text-align:right">89.04 s</td>
</tr>
<tr>
<td>128K</td>
<td style="text-align:right">988 tok/s</td>
<td style="text-align:right">132.65 s</td>
</tr>
<tr>
<td>192K</td>
<td style="text-align:right">816 tok/s</td>
<td style="text-align:right">240.90 s</td>
</tr>
<tr>
<td>224K</td>
<td style="text-align:right">751 tok/s</td>
<td style="text-align:right">305.32 s</td>
</tr>
<tr>
<td>Near256K / 251,500 tokens</td>
<td style="text-align:right">712 tok/s</td>
<td style="text-align:right">353.35 s</td>
</tr>
</tbody>
</table>
<p dir="auto">Near256K 单卡 Peak VRAM：</p>
<pre><code class="language-text">≈28.1 GB / 31.9 GB
</code></pre>
<p dir="auto">余量约：</p>
<pre><code class="language-text">3.8 GB/card
</code></pre>
<p dir="auto">因此这套 X99 + 双 R9700 可以实际运行约 251.5K Context。</p>
<hr />
<h2>17. Direct P2P 对长上下文 Prefill 的收益</h2>
<p dir="auto">做过：</p>
<pre><code class="language-text">Stock SHM
vs
Direct P2P
</code></pre>
<p dir="auto">对照。</p>
<p dir="auto">长上下文 Prefill：</p>
<pre><code class="language-text">+30.6% ～ +36.7%
</code></pre>
<p dir="auto">TTFT：</p>
<pre><code class="language-text">降低约 23.4% ～ 26.9%
</code></pre>
<p dir="auto">所以 P2P 并不是只让通信 benchmark 好看，而是会直接影响长 Prompt 和 Agent 第一轮 TTFT。</p>
<hr />
<h2>18. Native Decode</h2>
<p dir="auto">最终 Native：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Context</th>
<th style="text-align:right">Decode</th>
<th style="text-align:right">TPOT</th>
</tr>
</thead>
<tbody>
<tr>
<td>1K</td>
<td style="text-align:right">31.40 tok/s</td>
<td style="text-align:right">≈31.85 ms</td>
</tr>
<tr>
<td>64K</td>
<td style="text-align:right">27.70 tok/s</td>
<td style="text-align:right">36.10 ms</td>
</tr>
<tr>
<td>128K</td>
<td style="text-align:right">24.79 tok/s</td>
<td style="text-align:right">40.34 ms</td>
</tr>
<tr>
<td>192K</td>
<td style="text-align:right">22.40 tok/s</td>
<td style="text-align:right">≈44.67 ms</td>
</tr>
<tr>
<td>224K</td>
<td style="text-align:right">21.40 tok/s</td>
<td style="text-align:right">≈46.73 ms</td>
</tr>
<tr>
<td>Near256K / 251.5K</td>
<td style="text-align:right">20.76 tok/s</td>
<td style="text-align:right">48.17 ms</td>
</tr>
</tbody>
</table>
<p dir="auto">Near256K 多轮：</p>
<pre><code class="language-text">CV ≈0.074%
</code></pre>
<hr />
<h2>19. MTP Decode</h2>
<p dir="auto">最终 MTP：</p>
<pre><code class="language-text">steps=3
top_k=1
draft_tokens=4
RDNA4 Patch065
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Context</th>
<th style="text-align:right">Native</th>
<th style="text-align:right">MTP</th>
<th style="text-align:right">提升</th>
</tr>
</thead>
<tbody>
<tr>
<td>1K</td>
<td style="text-align:right">31.40</td>
<td style="text-align:right"><strong>44.04 tok/s</strong></td>
<td style="text-align:right"><strong>+40.25%</strong></td>
</tr>
<tr>
<td>64K</td>
<td style="text-align:right">27.70</td>
<td style="text-align:right"><strong>36.51 tok/s</strong></td>
<td style="text-align:right"><strong>+31.81%</strong></td>
</tr>
<tr>
<td>128K</td>
<td style="text-align:right">24.79</td>
<td style="text-align:right"><strong>27.47 tok/s</strong></td>
<td style="text-align:right"><strong>+10.81%</strong></td>
</tr>
<tr>
<td>192K</td>
<td style="text-align:right">22.40</td>
<td style="text-align:right"><strong>25.48 tok/s</strong></td>
<td style="text-align:right"><strong>+13.75%</strong></td>
</tr>
</tbody>
</table>
<p dir="auto">64K：</p>
<pre><code class="language-text">accepted length ≈3.07
speculative cycle ≈83.81 ms
break-even ≈110.68 ms
</code></pre>
<p dir="auto">当前 BF16 KV MTP 配置：</p>
<pre><code class="language-text">max_total_num_tokens ≈203,558
</code></pre>
<p dir="auto">因此生产路由选择：</p>
<pre><code class="language-text">&lt;=192K → MTP_FAST
&gt;192K  → NATIVE_SAFE
</code></pre>
<p dir="auto">当前首先限制 MTP 深度的是 BF16 KV Token Pool，而不是 192K 已经出现性能 crossover。</p>
<hr />
<h2>20. 真实 Agent 工作负载</h2>
<h3>Coding Loop：64K Prefix，3 Turns</h3>
<p dir="auto">Cold 首轮完整 Prefill，后续 Radix Cache 命中：</p>
<pre><code class="language-text">TTFT 从约55s降到约1～2s
</code></pre>
<p dir="auto">结果：</p>
<pre><code class="language-text">Total Gain = +3.31%
Warm Gain  = +18.77%
</code></pre>
<h3>Tool Loop：3 Turns</h3>
<p dir="auto">流程：</p>
<pre><code class="language-text">Tool Call
→ Tool Result
→ 下一次 Tool Call
→ Final JSON
</code></pre>
<p dir="auto">Correctness 全部通过：</p>
<pre><code class="language-text">Total Gain = +32.49%
Warm Gain  = +31.39%
</code></pre>
<h3>Mixed Thinking + Code</h3>
<pre><code class="language-text">MTP    = 51.9 tok/s
Native = 31.5 tok/s
</code></pre>
<p dir="auto">任务总耗时：</p>
<pre><code class="language-text">+51.68%
</code></pre>
<p dir="auto">同时通过：</p>
<pre><code class="language-text">&lt;think&gt; 正常闭合
Python compile PASS
行为测试 PASS
</code></pre>
<h3>128K Multi-Turn</h3>
<p dir="auto">D1 Cold TTFT：</p>
<pre><code class="language-text">≈133～139s
</code></pre>
<p dir="auto">D2 / D3：</p>
<pre><code class="language-text">≈2～3s
</code></pre>
<p dir="auto">确认：</p>
<pre><code class="language-text">REPEATED_FULL_PREFILL = NO
</code></pre>
<p dir="auto">这一组 wall-clock：</p>
<pre><code class="language-text">Total Gain = -4.74%
Warm Gain  = -16.22%
</code></pre>
<p dir="auto">主要原因是某轮 MTP 生成了明显更长的 Thinking / 输出，而不是 Prefix Cache 失效或 Decode tok/s 低于 Native。</p>
<hr />
<h1>第四部分：P2P 跑通以后做的性能优化</h1>
<blockquote>
<p dir="auto">这一部分不是“跑通 P2P”的必要步骤。如果你的目标只是让双卡 Direct P2P 正常工作，到上一部分已经完成。下面是继续优化 Qwen3.8 时的结果。</p>
</blockquote>
<h2>21. BF16 P×V</h2>
<p dir="auto">Full Attention 的 P×V 改成：</p>
<pre><code class="language-text">BF16 WMMA
+
FP32 accumulator
</code></pre>
<p dir="auto">以后，192K Full Attention Stage1：</p>
<pre><code class="language-text">54.01 ms
↓
12.85 ms
</code></pre>
<p dir="auto">192K Native Decode：</p>
<pre><code class="language-text">11.83 tok/s
↓
22.42 tok/s
</code></pre>
<p dir="auto">224K：</p>
<pre><code class="language-text">10.71 tok/s
↓
21.41 tok/s
</code></pre>
<p dir="auto">说明在 RDNA4 上，软件 kernel 路径本身也可能是非常大的瓶颈。</p>
<hr />
<h2>22. num_kv_splits：8 vs 64</h2>
<p dir="auto">192K：</p>
<pre><code class="language-text">splits=8  → 22.42 tok/s
splits=64 → 22.43 tok/s
</code></pre>
<p dir="auto">差异：</p>
<pre><code class="language-text">+0.045%
</code></pre>
<p dir="auto">Stage1：</p>
<pre><code class="language-text">12.92 ms
vs
12.94 ms
</code></pre>
<p dir="auto">所以最终继续使用：</p>
<pre><code class="language-text">num_kv_splits=8
</code></pre>
<hr />
<h2>23. FP8 KV：更像容量模式，不是默认性能模式</h2>
<p dir="auto">192K：</p>
<pre><code class="language-text">BF16 KV → 22.41 tok/s
FP8 KV  → 23.12 tok/s
</code></pre>
<p dir="auto">提升：</p>
<pre><code class="language-text">+3.17%
</code></pre>
<p dir="auto">Token Pool：</p>
<pre><code class="language-text">BF16 → 261,096
FP8  → 520,145
</code></pre>
<p dir="auto">几乎翻倍。</p>
<p dir="auto">但 192K Prefill TTFT：</p>
<pre><code class="language-text">BF16 → 239.7s
FP8  → 335.6s
</code></pre>
<p dir="auto">恶化约：</p>
<pre><code class="language-text">+40%
</code></pre>
<p dir="auto">所以当前：</p>
<blockquote>
<p dir="auto">BF16 KV 用作默认性能模式，FP8 KV 只保留为超长上下文 / 容量模式候选。</p>
</blockquote>
<hr />
<h2>24. 为什么 MTP 一开始很慢，以及 Patch065 的作用</h2>
<p dir="auto">Qwen3.8 自带 MTP Head。</p>
<p dir="auto">一开始直接跑 MTP，64K：</p>
<pre><code class="language-text">Native ≈27.7 tok/s
错误 verify 路径只有个位数 tok/s
</code></pre>
<p dir="auto">后来定位到 gfx1201 上 Target Verify 走了低效的：</p>
<pre><code class="language-text">extend_attention_fwd
</code></pre>
<p dir="auto">最终采用 RDNA4 split-KV tree verify（Patch065）。</p>
<p dir="auto">核心调度思路：</p>
<pre><code class="language-text">KV Head + split
+
GRP × Draft Tokens
</code></pre>
<p dir="auto">让同一组 GQA Q heads 共享 KV tile，避免重复读取 Prefix KV。</p>
<p dir="auto">最终才得到前面列出的 1K–192K MTP 正收益。</p>
<hr />
<h1>第五部分：常见误区</h1>
<h2>25. 不要把 MPS 强行改到 512 / 1024</h2>
<p dir="auto">Broadwell 这里最大就是 256B。</p>
<hr />
<h2>26. 不要只看 GFX Pull</h2>
<p dir="auto">我的 Pull 只有约 1.5～3.2GB/s，但：</p>
<pre><code class="language-text">Push ≈10.29GB/s
DMA  ≈10.28GB/s
RCCL ≈9.75GB/s
</code></pre>
<p dir="auto">最终都正常。</p>
<hr />
<h2>27. <code>hipMemcpyPeer</code> 成功不等于高速 Direct P2P</h2>
<p dir="auto">必须实际测吞吐。</p>
<hr />
<h2>28. 不要只跑 RCCL</h2>
<p dir="auto">如果 RCCL 慢，应先通过 TransferBench 判断问题究竟在：</p>
<ul>
<li>PCIe</li>
<li>Kernel / P2PDMA</li>
<li>HIP IPC</li>
<li>RCCL</li>
</ul>
<p dir="auto">哪一层。</p>
<hr />
<h2>29. TP=2 能启动不代表 Direct P2P 已经成功</h2>
<p dir="auto">SHM 同样可以让 TP 工作。</p>
<p dir="auto">最后一定要确认：</p>
<pre><code class="language-text">isAllDirectP2p 1
via P2P/IPC
</code></pre>
<hr />
<h2>30. 社区参数不要机械照搬</h2>
<p dir="auto">例如：</p>
<pre><code class="language-text">num_kv_splits=64
</code></pre>
<p dir="auto">在我这套 Qwen3.8 + BF16 PV 上几乎没有收益。</p>
<p dir="auto">Speculative Decode 也一样：一定要确认真正使用的 verify path，否则很容易把一个本来有正收益的 MTP 跑成负优化。</p>
<hr />
<h1>第六部分：最终结论</h1>
<p dir="auto">这套机器最终证明：</p>
<pre><code class="language-text">X99 / Broadwell
+
E5-2697A v4
+
PCIe Gen3 x16 ×2
+
双 Radeon AI PRO R9700 32GB
</code></pre>
<p dir="auto">可以做到：</p>
<pre><code class="language-text">单向 GPU P2P      ≈10.3GB/s
双向 aggregate    ≈19.7GB/s
RCCL SendRecv     ≈9.75GB/s
</code></pre>
<p dir="auto">在 SGLang + Qwen3.8-27B 中：</p>
<pre><code class="language-text">Cold Prefill 128K ≈988 tok/s
Cold Prefill 251.5K ≈712 tok/s

Native Near256K ≈20.76 tok/s

MTP 64K  ≈36.51 tok/s
MTP 192K ≈25.48 tok/s
</code></pre>
<p dir="auto">并且 64K / 128K Agent 多轮 Prefix Cache 能稳定复用。</p>
<p dir="auto">所以如果手里已经有 X99 / Xeon E5 v4：</p>
<blockquote>
<p dir="auto"><strong>不要因为“PCIe 3.0”几个字就先入为主地认为必须换平台。</strong></p>
</blockquote>
<p dir="auto">先按照：</p>
<pre><code class="language-text">Topology
→ DMA Address
→ P2PDMA
→ HIP IPC
→ TransferBench
→ RCCL
→ SGLang
→ Model Benchmark
</code></pre>
<p dir="auto">把每一层分别验证清楚。</p>
<p dir="auto">如果 TransferBench 已经可以跑到接近链路的实际有效能力，而 RCCL 或模型仍然慢，那么问题大概率已经不在 PCIe 本身，而是在上层通信或 kernel 路径。</p>
]]></description><link>https://lcz.me/topic/1925</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:14:37 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1925.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Sep 2026 11:50:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 20:22:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%E5%BC%A0%E5%85%89%E7%92%9E" aria-label="Profile: 张光璞">@<bdi>张光璞</bdi></a> 单独更新个帖子可以，详细弄下数据。其实最主要的，我不希望大家总是发一大堆内容，就几个关键的，吐字速度，长上下文多并发的实际使用体验。然后再展开prefill，decode等具体数据，先给结论。这玩意能普及，也算是开了个新的玩法。</p>
]]></description><link>https://lcz.me/post/20763</link><guid isPermaLink="true">https://lcz.me/post/20763</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Fri, 25 Sep 2026 20:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 16:19:37 GMT]]></title><description><![CDATA[<p dir="auto">我已经跑起来了，4并发160k ，现在单会话在58t/s  双会话  就是55 x 2</p>
]]></description><link>https://lcz.me/post/20745</link><guid isPermaLink="true">https://lcz.me/post/20745</guid><dc:creator><![CDATA[张光璞]]></dc:creator><pubDate>Fri, 25 Sep 2026 16:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 20:20:21 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcme" aria-label="Profile: fcme">@<bdi>fcme</bdi></a> 弟人家这个帖子是的关键是速度吗？人家是打通P2P，第一这是个人实验项目，刚刚开始，以后还可以优化。解决的是有无问题，是原创，就算纯粹从炫技的角度来看，也很有意义。它不是我发现了某个插件，某个方案很牛逼，这种技能很多人都能掌握，并不特别值得炫耀。<br />
第二，PP在有SGLang的情况下，影响并不那么大，Agent场景只做增量Prefill，并不会一直做如此大的Prefill工作，所以可以接受。还是有应用价值的，不是所有场景都看测试数据的。<br />
第三，这个方案对24G的7900XTX意义很大，它没有mxfp4的红利，可以抄作业，只要用上SGLang，双卡TP的意义在过往的帖子中有过大量测试，很有意义。<br />
第四，VLLM有它的强项，也有弱项，Agent上它就是不如SGLang，不如NInfer，HaloGen，它没有硬核增量缓存计算，更没有跨会话缓存复用，并不是数字好看，体验就好的。<br />
第五，对VLLM的用户而言，在X99上打通P2P难道没意义？你怎么知道人家不会vLLM呢？</p>
<p dir="auto">论坛藏龙卧虎，低调交流。不能总学我，有点知识就吹牛逼，我都被打脸太多次，不太在乎了，不要学我。谦虚使人进步，骄傲使人落后。</p>
]]></description><link>https://lcz.me/post/20673</link><guid isPermaLink="true">https://lcz.me/post/20673</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Fri, 25 Sep 2026 20:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 07:02:15 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcme" aria-label="Profile: fcme">@<bdi>fcme</bdi></a> <a href="/post/20660">说</a>:</p>
<p dir="auto">但是看起来好像你这个运行速度也不是太好啊，Pp才1000左右。看看<a href="https://github.com/Eliovp-BV/paiton-vllm-plugin%E3%80%82" rel="nofollow ugc">https://github.com/Eliovp-BV/paiton-vllm-plugin。</a> 单卡运行速度就炸裂，昨天刚配置好的</p>
</blockquote>
<p dir="auto"><img src="https://upload.lcz.me/uploads/404022b4-1fbf-45c4-810b-035cd7857d9f.jpg" alt="Screenshot_20260925_081952_com_android_chrome_ChromeTabbedActivity.jpg" class=" img-fluid img-markdown" /></p>
<p dir="auto">Paiton 单卡确实很强，这个后面有时间我也会测。<br />
我这篇主要验证的是 X99 双 R9700 的 P2P 可行性和双卡 scaling，SGLang 只是目前先跑通的 serving stack。现在这些 PP/TG 数据主要看单卡→双卡提升，不是在做 SGLang vs vLLM 横评。<br />
后续会补 vLLM/Paiton，同模型同参数下再比较。</p>
]]></description><link>https://lcz.me/post/20671</link><guid isPermaLink="true">https://lcz.me/post/20671</guid><dc:creator><![CDATA[PhoenixRise2026]]></dc:creator><pubDate>Fri, 25 Sep 2026 07:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:53:09 GMT]]></title><description><![CDATA[<p dir="auto">对啊，2%不到的差距没啥可担心的，Agent时代验收一下就可以了，也就可能是有时候需要多做个一步两步的。我现在发现搭配的agent某种程度上更重要，dsh明显比Hermes干活的效率要高。</p>
]]></description><link>https://lcz.me/post/20668</link><guid isPermaLink="true">https://lcz.me/post/20668</guid><dc:creator><![CDATA[fcme]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:48:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcme" aria-label="Profile: fcme">@<bdi>fcme</bdi></a> 不是，搞本地模型不就是为了干大活，24小时推理着。不过精度差的不多。<br />
Qwen3.8 27B MXFP4 + DFlash2 比 Qwen3.8 27B FP8 精度，</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/d30c43a2-2d57-4eae-a16f-184621fba3e2.jpeg" alt="image.jpeg" class=" img-fluid img-markdown" /></p>
<p dir="auto">云端模型真心跑不起，每个月100亿token</p>
]]></description><link>https://lcz.me/post/20667</link><guid isPermaLink="true">https://lcz.me/post/20667</guid><dc:creator><![CDATA[suboyang]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:43:05 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/suboyang" aria-label="Profile: suboyang">@<bdi>suboyang</bdi></a><br />
精度差不了一半，估计也就百分之几吧。按你这个算法，原始精度32位量化到Q4就没法用了，事实上Q4也可以保留差不多95%以上的有用信息。而且真要是干啥大活，跑云端不是更靠谱么，本地模型毕竟是本地。</p>
]]></description><link>https://lcz.me/post/20666</link><guid isPermaLink="true">https://lcz.me/post/20666</guid><dc:creator><![CDATA[fcme]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:15:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcme" aria-label="Profile: fcme">@<bdi>fcme</bdi></a> 精度，精度，版主是FP8，官方精度。<br />
Qwen3.8 27B MXFP4 + DFlash2 比 Qwen3.8 27B FP8 精度少一半</p>
]]></description><link>https://lcz.me/post/20661</link><guid isPermaLink="true">https://lcz.me/post/20661</guid><dc:creator><![CDATA[suboyang]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:11:50 GMT]]></title><description><![CDATA[<p dir="auto">但是看起来好像你这个运行速度也不是太好啊，Pp才1000左右。看看<a href="https://github.com/Eliovp-BV/paiton-vllm-plugin%E3%80%82" rel="nofollow ugc">https://github.com/Eliovp-BV/paiton-vllm-plugin。</a> 单卡运行速度就炸裂，昨天刚配置好的<br />
<img src="https://upload.lcz.me/uploads/404022b4-1fbf-45c4-810b-035cd7857d9f.jpg" alt="Screenshot_20260925_081952_com_android_chrome_ChromeTabbedActivity.jpg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://lcz.me/post/20660</link><guid isPermaLink="true">https://lcz.me/post/20660</guid><dc:creator><![CDATA[fcme]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 06:09:08 GMT]]></title><description><![CDATA[<p dir="auto">内核应该用 kernel 7.2.7,</p>
<p dir="auto">还要使用Triton<br />
<img src="https://upload.lcz.me/uploads/ed455a35-c688-4f70-93db-04e1523cf2f2.jpeg" alt="image.jpeg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://lcz.me/post/20659</link><guid isPermaLink="true">https://lcz.me/post/20659</guid><dc:creator><![CDATA[suboyang]]></dc:creator><pubDate>Fri, 25 Sep 2026 06:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 05:24:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/phoenixrise2026" aria-label="Profile: PhoenixRise2026">@<bdi>PhoenixRise2026</bdi></a> 可以继续优化，或许可以出个github项目，这玩意还挺重要的。</p>
]]></description><link>https://lcz.me/post/20638</link><guid isPermaLink="true">https://lcz.me/post/20638</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Fri, 25 Sep 2026 05:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Fri, 25 Sep 2026 02:00:25 GMT]]></title><description><![CDATA[<p dir="auto">谢谢老特肯定。打通P2P和调试SGLang的过程都是Agent来操作的，包括内核编译、遇到问题寻找解决方法。5.5小时双卡几乎满功率推理测试，没有出现问题。</p>
]]></description><link>https://lcz.me/post/20599</link><guid isPermaLink="true">https://lcz.me/post/20599</guid><dc:creator><![CDATA[PhoenixRise2026]]></dc:creator><pubDate>Fri, 25 Sep 2026 02:00:25 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 20:40:19 GMT]]></title><description><![CDATA[<p dir="auto">如果都能抄作业，那么意义还是很大的，毕竟现在支持P2P的板子比较少，都是DDR4 DDR5，内存太贵了。</p>
]]></description><link>https://lcz.me/post/20572</link><guid isPermaLink="true">https://lcz.me/post/20572</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 24 Sep 2026 20:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 18:38:40 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2b50.png?v=ecb7c61779a" class="not-responsive emoji emoji-android emoji--star" style="height:23px;width:auto;vertical-align:middle" title="⭐" alt="⭐" /> 站长已核：本帖设为<strong>精华</strong>，作者 <strong>+5 积分</strong>奖励，希望再接再厉！</p>
<blockquote>
<p dir="auto">奖励凭证：精华 +5 分 · 编号 f1925-166-1（系统自动发放，只发一次）</p>
</blockquote>
]]></description><link>https://lcz.me/post/20555</link><guid isPermaLink="true">https://lcz.me/post/20555</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 18:26:03 GMT]]></title><description><![CDATA[<p dir="auto">牛逼啊老哥，本来还在纠结，这下可以直接抄作业了，感恩</p>
]]></description><link>https://lcz.me/post/20547</link><guid isPermaLink="true">https://lcz.me/post/20547</guid><dc:creator><![CDATA[Nero丶畅畅]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 18:14:58 GMT]]></title><description><![CDATA[<p dir="auto">正好在整理自己的服务器。这个帖子来的及时。周末就找这个帖子搞了</p>
]]></description><link>https://lcz.me/post/20541</link><guid isPermaLink="true">https://lcz.me/post/20541</guid><dc:creator><![CDATA[Thanaots]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 14:34:22 GMT]]></title><description><![CDATA[<p dir="auto">更正一下原帖里的一个表述：<br />
我之前写“不同 CPU Root Port”不够准确。我的机器是单路 E5-2697A v4，两张 R9700 都挂在同一颗 CPU / 同一 PCIe Root Complex 下，只是分别接在不同的 PCIe Root Port 上。<br />
所以文中“跨 Root Port P2P”应理解为：<br />
同一 CPU、同一 Root Complex 下，不同 Root Port 之间的 P2P，并不是跨 CPU / 跨 Socket。<br />
原帖已不能编辑，这里补充更正，避免误导。</p>
]]></description><link>https://lcz.me/post/20508</link><guid isPermaLink="true">https://lcz.me/post/20508</guid><dc:creator><![CDATA[PhoenixRise2026]]></dc:creator><pubDate>Thu, 24 Sep 2026 14:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to X99 + 双 AMD Radeon AI PRO R9700 跑通跨 Root Port P2P：从内核、RCCL 到 SGLang Qwen3.8 实战 on Thu, 24 Sep 2026 13:02:11 GMT]]></title><description><![CDATA[<p dir="auto">这份作业含金量很高。跨 Root Port 直连 P2P 能在 X99 / Broadwell-EP 上跑通，卡点基本就是你说的那几处（Above 4G、44-bit DMA、P2PDMA、RCCL PHB）；能拿到 <code>isAllDirectP2p 1 via P2P/IPC</code> 就说明不是 SHM 兜底，后面都是调优问题。</p>
<p dir="auto">几个对表口径：</p>
<p dir="auto">1）单向 10.29 GB/s 合理：Gen3 x16 理论约 15.75 GB/s，P2P/NTB 实跑一般落 9–12 GB/s；双向 aggregate 19.76 接近 2×10.29 的线性，看不出明显半双工瓶颈。</p>
<p dir="auto">2）RCCL busBW 9.5 GB/s 已经贴着链路，TP=2 的 AllReduce 是带宽限制，不是拓扑没起来。batch=1 场景多为延迟敏感，建议再补一张「通信暴露占比 vs batch」的曲线，确认放大 batch 后扩展比是否还线性。</p>
<p dir="auto">3）MTP 收益随 ctx 衰减（1K +40% → 128K +10.8%）在预期内：长 ctx 时 decode 由 KV 读带宽主导，draft 头那点算力占比被稀释。建议把 acceptance length 和 draft head 耗时占比一起画，区分是接受率掉了、还是 draft 头变贵了。</p>
<p dir="auto">4）最该记的运维坑：这套依赖自定义内核（44-bit DMA patch）。内核一升级，P2PDMA 路径可能静默失效、退回 host-staged——不报错，只是变慢。建议把复验固化成三步：内核版本 / rocminfo → grep isAllDirectP2p → rccl-tests busBW 对基线；数值掉一半就说明 P2P 没起来。</p>
<p dir="auto">补充观察：251.5K native decode 20.76 t/s，这档 KV 体积已经很大，双 32G 能扛住说明 KV 量化/分层确实起作用；再往上加 ctx 前，先量 KV 实际占用和换页，再谈 MTP。</p>
]]></description><link>https://lcz.me/post/20496</link><guid isPermaLink="true">https://lcz.me/post/20496</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Thu, 24 Sep 2026 13:02:11 GMT</pubDate></item></channel></rss>