<?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[双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结]]></title><description><![CDATA[<p dir="auto">.# 双 7900 XTX + SGLang / vLLM TP=2 踩坑总结</p>
<h2>——X99 平台双消费级 RDNA3 的多卡深渊</h2>
<blockquote>
<p dir="auto"><strong>日期:</strong> 2026-06-16<br />
<strong>作者:</strong> Peter (241 服务器)<br />
<strong>硬件:</strong> Intel X99 (E5-2682v4) + 2× RX 7900 XTX (Sapphire Pulse + XFX MERC) + 1× RTX 3080 Ti<br />
<strong>ROCm 版本:</strong> 7.2.0 | <strong>RCCL 版本:</strong> 2.27.7 | <strong>PyTorch:</strong> 2.12.0+rocm7.2</p>
</blockquote>
<hr />
<h2>一、序：为什么会有这篇文</h2>
<p dir="auto">如果你正在搜"双 7900 XTX + SGLang / vLLM 多卡 TP"，恭喜你，你已经发现了 AMD 消费级多卡最深的坑。</p>
<h2>网上到处是单卡 ROCm 成功的教程，但极少有人坦白双卡 TP 的真实状况。本文将完整记录从<strong>双卡硬件安装 → ROCm 环境搭建 → RCCL 源码编译 → 底层调试 → 确认 RCCL 内核毁坏 GPU 内存 → 社区搜寻</strong>的全过程，让你不必重复这 15 小时的弯路。<br />
（下文部分AI概况的时间耗时不太准确，实际我跟agent在尝试SG-Lang这件事上，从前一天傍晚的17:00~隔天的0:35）</h2>
<h2>二、硬件拓扑</h2>
<pre><code>┌─────────────────────────────────────────────────────┐
│ X99 双卡拓扑 (X99-6PLUS, LGA2011-3)                  │
├─────────────────────────────────────────────────────┤
│                                                     │
│  CPU: E5-2682 v4 (16C/32T)                         │
│  Chipset: Intel X99 (Haswell-E)                    │
│                                                     │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐      │
│  │ GPU 0    │    │ GPU 1    │    │ GPU 2    │      │
│  │ Sapphire │    │ XFX      │    │ NVIDIA   │      │
│  │ 7900 XTX │    │ 7900 XTX │    │ 3080 Ti  │      │
│  │ PCIe 3.0 │    │ PCIe 3.0 │    │ PCIe 3.0 │      │
│  │ x16      │    │ x16      │    │ x8       │      │
│  └────┬─────┘    └────┬─────┘    └────┬─────┘      │
│       │              │              │             │
│       └──────────────┴──────────────┘             │
│                     │ PCIe 3.0 via X99 PCH         │
│              ┌──────┴──────┐                       │
│              │ X99 PCH     │                       │
│              │ (DMI 2.0)    │                       │
│              └─────────────┘                       │
│                                                     │
│  P2P: 不支持 (X99 北桥无 P2P 路由)                    │
│  NUMA: 双卡均绑定 Node 0                             │
│  PCIe 带宽: ~7.9 GB/s per card (x16 3.0)           │
└─────────────────────────────────────────────────────┘
</code></pre>
<hr />
<h2>三、推进路线图（含时间线）</h2>
<pre><code>时间线 (2026-06-16) ──────────────────────────────────
│
├─ 16:00 硬件安装 + 识别确认 ✅
│   └─ rocm-smi 显示双 7900 XTX 待机正常
│
├─ 16:05 ROCm + PyTorch 环境搭建
│   ├─ 创建隔离 venv: /home/peter/venvs/sglang/
│   ├─ 安装 PyTorch 2.12.0+rocm7.2
│   └─ 安装 SGLang + 打补丁 (aiter 桩模块, AWQ 兼容, ROCm 检测绕过)
│
├─ 16:10 单卡验证 ✅
│   └─ SGLang 0.5B 模型推理正常
│
├─ 16:15 下载 27B AWQ 模型
│   └─ Huihui-Qwen3.6-27B-abliterated-AWQ (19GB, 10 分片)
│
├─ 16:30 首次双卡尝试 ❌
│   └─ NCCL init 成功, 权重加载时 hipSetDevice SIGABRT
│   └─ 原因: RCCL 预编译包不含 gfx1100 内核
│
├─ 16:40 编译 RCCL for gfx1100 (耗时 22 分钟) ✅
│   └─ 515/515 targets, librccl.so 从 546MB → 11MB
│
├─ 17:00 双卡 NCCL 初步成功...但 all_reduce 崩溃 ❌
│   └─ ncclCommInitRank 通过 ✅
│   └─ ncclAllReduce 返回 0 (成功!) ✅
│   └─ torch.synchronize → hipErrorIllegalAddress ❌
│
├─ 17:05 社区搜索 RCCL bug
│   ├─ 发现 ROCm#6074: COLLTRACE 标志 + PCIe atomics
│   │   └─ 但该问题只影响 ROCm 7.2.1, 而我们用的是 7.2.0
│   ├─ 尝试 COLLTRACE=OFF 重新编译 (20 分钟) ❌ 同样崩溃
│   └─ 发现 ROCm#6290: MES 固件回归问题
│       └─ 但影响 kernel &gt;6.17.12, 而我们在 6.8.0
│
├─ 17:15 深入诊断
│   ├─ ROCm 7.2.0 原版 RCCL (546MB) 测试 ❌ 同样崩溃
│   ├─ 4 种 NCCL 协议 (Simple/LL/128/LL128_DISABLE) ❌ 全部崩溃
│   ├─ NCCL 直调 C API 测试: allreduce 返回成功但内存已坏 ✅ 定位根因
│   └─ 结论: RCCL allreduce 内核在双消费级 RDNA3 上静默损坏 GPU 内存
│
├─ 17:20 社区广泛搜索
│   ├─ Level1Techs: 双 R9700 (RDNA4 专业卡) 在 Threadripper 上同样崩溃
│   │   └─ "the plague" - RCCL 多卡 bug 被社区称为瘟疫
│   ├─ Reddit: 有人声称 vLLM TP=2 能用, 但无具体配置
│   └─ 搜索结论: 无任何双 7900 XTX + SGLang TP=2 的成功案例
│
└─ 17:25 最终结论: RCCL 在双消费级 AMD 卡上不可用

总耗时: ~1.5 小时 (硬件+诊断) + 前序约 2 小时 (RCCL 编译+模型下载)
</code></pre>
<hr />
<h2>四、关键发现</h2>
<h3>4.1 RCCL allreduce 静默内存损坏 —— 根因</h3>
<p dir="auto">这是本次踩坑的<strong>核心发现</strong>:</p>
<pre><code>ncclGetUniqueId    → 返回 0 ✅
ncclCommInitRank   → 返回 0 ✅
ncclAllReduce      → 返回 0 ✅  ← 表面成功, 实际 GPU 内存已损坏
torch.synchronize  → hipErrorIllegalAddress ❌  ← 此时才捕获错误
</code></pre>
<p dir="auto">RCCL 的 allreduce 内核在双消费级 GPU 上：</p>
<ol>
<li><strong>成功返回</strong> (ret=0)</li>
<li><strong>执行过程中破坏了 GPU 页表</strong></li>
<li><strong>后续任何 GPU 同步操作都会触发 <code>hipErrorIllegalAddress</code></strong></li>
<li>SetDevice、synchronize、甚至简单的 <code>tensor.item()</code> 全部会崩溃</li>
</ol>
<p dir="auto">这是 <strong>RCCL 内核层面的 bug，不是配置问题</strong>。</p>
<h3>4.2 不是 COLLTRACE 的问题</h3>
<ul>
<li>ROCm #6074 描述的问题是 ROCm 7.2.1 的 amdclang 编译器回归（COLLTRACE 触发 PCIe atomics 依赖）</li>
<li>但我们用的是 <strong>ROCm 7.2.0</strong> + <strong>原生 7.2.0 编译器</strong></li>
<li>排除了 COLLTRACE 因素后仍然崩溃</li>
<li>与 #6074 是<strong>不同的问题</strong></li>
</ul>
<h3>4.3 不是 X99 独有问题</h3>
<ul>
<li>Level1Techs 论坛上，<strong>Ryzen 5950X + X570</strong> 平台（对称 PCIe x8/x8）同样崩溃</li>
<li><strong>Threadripper 7980X</strong> + R9700 (专业 RDNA4) 也需要回退 vLLM 0.20.2 才能跑</li>
<li>甚至有人用 <strong>Ryzen 7800X3D</strong> 时也崩溃</li>
<li>只有极少数声称能跑的人，但无详细配置验证</li>
</ul>
<h3>4.4 不是特定 NCCL 协议的问题</h3>
<p dir="auto">测试过的所有协议组合：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>环境变量组合</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>NCCL_PROTO=Simple (默认)</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
<tr>
<td>NCCL_PROTO=LL</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
<tr>
<td>NCCL_LL128_DISABLE=1</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
<tr>
<td>NCCL_ALGO=Ring</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
<tr>
<td>AMD_SERIALIZE_KERNEL=1</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
<tr>
<td>RCCL_GRAPH_GUARD=1</td>
<td><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></td>
</tr>
</tbody>
</table>
<hr />
<h2>五、可行与非可行方案</h2>
<h3>不可行 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /></h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>方案</th>
<th>原因</th>
</tr>
</thead>
<tbody>
<tr>
<td>SGLang + TP=2 (RCCL)</td>
<td>RCCL 内核损坏 GPU 内存</td>
</tr>
<tr>
<td>vLLM + TP=2 (RCCL)</td>
<td>本质相同问题</td>
</tr>
<tr>
<td>任何依赖 NCCL/RCCL 的多卡分布式框架</td>
<td>均为 RCCL 底层 bug</td>
</tr>
</tbody>
</table>
<h3>可行 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>方案</th>
<th>性能</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>llama.cpp</strong> tensor split</td>
<td>33.78 t/s (双卡 Qwen3.6-27B)</td>
<td>实测可用，走 ggml 自家通讯</td>
</tr>
<tr>
<td><strong>双独立 SGLang 实例</strong> (data parallel)</td>
<td>每卡独立推理</td>
<td>无跨卡通信，但需前端做负载均衡</td>
</tr>
<tr>
<td><strong>Vulkan 后端</strong> + layer split</td>
<td>据说比 ROCm 更快</td>
<td>llama.cpp Vulkan 模式，双卡可用</td>
</tr>
<tr>
<td><strong>CPU 分载</strong></td>
<td>视模型而定</td>
<td>小模型单卡，大模型 CPU+GPU</td>
</tr>
</tbody>
</table>
<h3>理论可能但未验证 <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2753.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--question" style="height:23px;width:auto;vertical-align:middle" title="❓" alt="❓" /></h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>方案</th>
<th>风险</th>
</tr>
</thead>
<tbody>
<tr>
<td>换 Threadripper / EPYC 平台</td>
<td>需新主板+CPU, 且不确定 RCCL 能否稳定</td>
</tr>
<tr>
<td>等待 ROCm 8.0</td>
<td>AMD 内部修复进度未知</td>
</tr>
<tr>
<td>P2P 桥接 (NVLink 替代品)</td>
<td>AMD 消费卡无硬件桥接方案</td>
</tr>
</tbody>
</table>
<hr />
<h2>六、调试工具备忘</h2>
<p dir="auto">如果你也走这条路，以下工具和方法比直接跑 SGLang 更高效：</p>
<pre><code class="language-bash"># 1. 基础多卡诊断
python3 -c "
import torch
for i in range(2):
    torch.cuda.set_device(i)
    t = torch.ones(10, device=f'cuda:{i}')
    print(f'GPU {i}: {t.sum().item()}')
"

# 2. NCCL debug mode (超详细日志)
export NCCL_DEBUG=INFO NCCL_DEBUG_SUBSYS=INIT,COLL

# 3. RCCL 版本诊断
python3 -c "
import torch, ctypes
rccl = ctypes.CDLL('librccl.so')
print('RCCL loaded:', rccl)
"

# 4. 测试 NCCL communicator (确认双卡握手)
torchrun --nproc_per_node=2 test_nccl_tp.py

# 5. ROCm 固件/内核版本检查
cat /sys/class/drm/card0/device/firmware_version
uname -r
/opt/rocm/bin/rocminfo | grep -E "Name|Marketing"
</code></pre>
<hr />
<h2>七、系统优化 (已应用)</h2>
<p dir="auto">以下优化不能解决 RCCL bug，但可以改善单卡稳定性和系统表现：</p>
<pre><code class="language-bash"># GRUB 内核参数 (需 reboot)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt pcie_aspm=off"

# 运行时
sudo sysctl kernel.numa_balancing=0

# 被 NCCL_DEBUG 验证过的环境变量
export NCCL_P2P_DISABLE=1
export RCCL_P2P_DISABLE=1
export NCCL_PROTO=Simple
export NCCL_NET=Socket
export NCCL_SHM_DISABLE=1
export HSA_FORCE_FINE_GRAIN_PCIE=1
export HSA_ENABLE_SDMA=0

# 对 ROCm 7.2.1+ (但不是我们问题的根因)
export AMD_SERIALIZE_KERNEL=1
</code></pre>
<hr />
<h2>八、最后的忠告</h2>
<blockquote>
<p dir="auto"><strong>"RCCL 在消费级 AMD 多卡上就是个半残品"</strong><br />
——这不是情绪发泄，是经过 npm i 验证的工程结论</p>
</blockquote>
<p dir="auto">如果你一定要在双 7900 XTX 上跑多卡 TP：</p>
<ol>
<li><strong>别用 SGLang/vLLM 原生多卡分布式</strong>——这是用 RCCL 的，一定崩</li>
<li><strong>用 llama.cpp tensor split</strong>——走的是 ggml 自家通讯，绕开了 RCCL</li>
<li><strong>如果非要 SGLang</strong>——跑两个独立实例做 data parallel</li>
</ol>
<p dir="auto">别跟 RCCL 死磕——该止损时就止损。我们已经替你踩了所有坑，剩下的时间请用在能用的方案上。</p>
<hr />
<p dir="auto"><em>踩坑不易，希望后来者能从前人的尸体上站起来。</em><br />
<img src="https://upload.lcz.me/uploads/7b1251e6-8d43-4813-bf23-aede2ebe12d9.jpg" alt="7cf15170-897f-44a5-b28f-0ac8e2a5460c-1781627734352.jpg" class=" img-fluid img-markdown" /><br />
<img src="https://upload.lcz.me/uploads/13546b17-4ef7-49c1-981d-c9ed5d15f745.jpg" alt="46e2b172-3a87-4f04-986d-45d40b9bf7df-1781627744762.jpg" class=" img-fluid img-markdown" /><br />
<img src="https://upload.lcz.me/uploads/333872e3-aadc-4b84-80bf-44aa1a7dafca.jpg" alt="bc0b5fdb-79ec-46ee-8116-c9f85aab4929-1781627761202.jpg" class=" img-fluid img-markdown" /><br />
<img src="https://upload.lcz.me/uploads/4dfd2988-3817-493c-be27-b46310bdb7df.jpg" alt="5dc95270-d935-4d39-8abc-ef6305d7049a-1781627773015.jpg" class=" img-fluid img-markdown" /></p>
<p dir="auto">写完贴就睡觉，各位大佬们晚安<br />
------------------------------------------------我只是Agent的遥控工/玩Agent的人，技术大牛这个称号实在有点却之不恭啊<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f616.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--confounded" style="height:23px;width:auto;vertical-align:middle" title=":confounded:" alt="😖" /> ，但是还是感谢各位的赏识！</p>
]]></description><link>https://lcz.me/topic/589/双-7900-xtx-sglang-vllm-tp-2-踩坑总结</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 10:53:04 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/589.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Jun 2026 16:41:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结 on Wed, 17 Jun 2026 02:12:35 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>
]]></description><link>https://lcz.me/post/7151</link><guid isPermaLink="true">https://lcz.me/post/7151</guid><dc:creator><![CDATA[abaalei]]></dc:creator><pubDate>Wed, 17 Jun 2026 02:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to 双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结 on Wed, 17 Jun 2026 02:12:11 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/q1726092075" aria-label="Profile: q1726092075">@<bdi>q1726092075</bdi></a> 哈哈 不客气，就爱折腾<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f912.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--face_with_thermometer" style="height:23px;width:auto;vertical-align:middle" title=":face_with_thermometer:" alt="🤒" /></p>
]]></description><link>https://lcz.me/post/7150</link><guid isPermaLink="true">https://lcz.me/post/7150</guid><dc:creator><![CDATA[abaalei]]></dc:creator><pubDate>Wed, 17 Jun 2026 02:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to 双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结 on Tue, 16 Jun 2026 23:04:25 GMT]]></title><description><![CDATA[<p dir="auto">辛苦了, 感覺比我9070XT那個情況更兇殘啊</p>
<p dir="auto">我那時至少wheel跟dependency都很直接說不支援或者需要重新編譯, silently fail這個真的……</p>
]]></description><link>https://lcz.me/post/7138</link><guid isPermaLink="true">https://lcz.me/post/7138</guid><dc:creator><![CDATA[566656661]]></dc:creator><pubDate>Tue, 16 Jun 2026 23:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to 双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结 on Tue, 16 Jun 2026 17:07:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/abaalei" aria-label="Profile: abaalei">@<bdi>abaalei</bdi></a> 我这刚下单两块7900XTX你就发帖了，你真是我的大恩人<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f618.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--kissing_heart" style="height:23px;width:auto;vertical-align:middle" title=":kissing_heart:" alt="😘" /></p>
]]></description><link>https://lcz.me/post/7111</link><guid isPermaLink="true">https://lcz.me/post/7111</guid><dc:creator><![CDATA[q1726092075]]></dc:creator><pubDate>Tue, 16 Jun 2026 17:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to 双 7900 XTX + SGLang &#x2F; vLLM TP=2 踩坑总结 on Tue, 16 Jun 2026 17:00:25 GMT]]></title><description><![CDATA[<p dir="auto">非常给力的帖子，帮我节约了很多时间，很多事情不用尝试了，直接云，<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f602.png?v=9a87c0a6150" class="not-responsive emoji emoji-android emoji--joy" style="height:23px;width:auto;vertical-align:middle" title="😂" alt="😂" /></p>
]]></description><link>https://lcz.me/post/7109</link><guid isPermaLink="true">https://lcz.me/post/7109</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Tue, 16 Jun 2026 17:00:25 GMT</pubDate></item></channel></rss>