<?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 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB]]></title><description><![CDATA[<p dir="auto">昨天看到老特的视频，就特意试了一下。刚好广东家里的机器插了 3 张卡，其中两张是<br />
Navi 31 的 W7900（gfx1100）——所以这组能跑通，<strong>7900 XTX 也就能跑</strong>：同一颗 Navi 31、<br />
同一个 gfx1100，我们这套里没有任何 W7900 专属分支。区别只在显存（24 G vs 48 G），<br />
XTX 上要跟着降分辨率/帧数，或者把 26 G 的文本编码器换成 int4 版。<br />
（我手上只有 W7900，XTX 是推断，没实测。）</p>
<p dir="auto">机器在广东家里，我人在青岛，全程远程。两张 W7900 的上行桥现在只能跑 <strong>PCIe 4.0 x8</strong>，<br />
all_reduce 实测 12.93 GB/s；要等 11 月中旬秋假结束回去才能动平台。所以下面所有数字<br />
都是 <strong>x8 条件下的下限</strong>，链路放开只会更好。</p>
<p dir="auto">还要先说清一件事：<strong>7900 上用不了现成的 Radiance</strong>（那套内核是 RDNA4 专用，见下文），<br />
我们是自行实现的一套同类方案——ComfyUI + int8 量化 + 自己写的 TP2，全程没有 FP8。</p>
<h2>结果</h2>
<p dir="auto">同一张图、同 seed（145）、同 8 步、同一张工作流，只把 DiT 从 1 卡换到 2 卡：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>指标</th>
<th>单卡 W7900</th>
<th>TP2（双 W7900）</th>
<th>变化</th>
</tr>
</thead>
<tbody>
<tr>
<td>每步耗时</td>
<td>18.6 s</td>
<td><strong>8.3 s</strong></td>
<td><strong>2.24×</strong></td>
</tr>
<tr>
<td>端到端（832×480 / 124 帧 / 8 步）</td>
<td>201.3 s</td>
<td>134.1 s</td>
<td>1.50×</td>
</tr>
<tr>
<td>采样期显存（每卡）</td>
<td>23.5 GiB</td>
<td><strong>12.9 / 13.2 GiB</strong></td>
<td><strong>−10.6 / −10.3 GiB</strong></td>
</tr>
<tr>
<td>DiT 权重</td>
<td>20 G</td>
<td>10 G / 卡</td>
<td>半宽切分</td>
</tr>
<tr>
<td>两卡产出</td>
<td>—</td>
<td>MD5 完全相同</td>
<td>逐位一致</td>
</tr>
<tr>
<td>与单卡画面（同 seed）</td>
<td>—</td>
<td>PSNR 25.5 dB</td>
<td>构图/人物/运镜一致，细节不同</td>
</tr>
</tbody>
</table>
<p dir="auto">三句话读完：</p>
<ul>
<li>加速是真的：<strong>每步 2.24×</strong>；端到端只有 1.50×，因为文本编码（26 G Qwen3-VL）和<br />
VAE 解码不参与并行。</li>
<li>显存也是真的：每卡少 10 GiB 左右，DiT 权重直接砍半。</li>
<li>两个实例各自存的 mp4 <strong>字节一致</strong>，说明锁步、通信、拼接没有一处错位。</li>
</ul>
<p dir="auto"><img src="https://upload.lcz.me/uploads/84900ba7-20eb-4a36-83f9-a3df4f1a0148.png" alt="01-显存对比-单卡vs双卡.png" class="img-markdown  img-fluid" /><br />
<img src="https://upload.lcz.me/uploads/fe17c944-e106-432d-93cb-2ff4e099ca6e.png" alt="04-每步耗时柱状图.png" class="img-markdown  img-fluid" /></p>
<h3>换个更快的 attention 后端，比例会变</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>后端</th>
<th>单卡</th>
<th>TP2</th>
<th>提速</th>
</tr>
</thead>
<tbody>
<tr>
<td>SDPA（默认）</td>
<td>18.6 s/步</td>
<td>8.3 s/步</td>
<td><strong>2.24×</strong></td>
</tr>
<tr>
<td><code>--use-ck-attention</code></td>
<td>12.8 s/步</td>
<td><strong>7.7 s/步</strong></td>
<td><strong>1.66×</strong></td>
</tr>
</tbody>
</table>
<p dir="auto">CK 让单卡自己就快了 1.45×，所以 TP2 的<strong>相对</strong>收益降到 1.66×；但<strong>绝对</strong>速度最快的是<br />
TP2 + CK（7.7 s/步、端到端 128 s、每卡 13 GiB 上下）。显存收益和后端无关。<br />
两个表都是同后端自比，不跨后端混比。</p>
<h2>为什么原帖那套抄不了</h2>
<p dir="auto">原帖是 2× Radeon AI PRO R9700（RDNA4 / gfx1201）跑 AMD 的 <strong>Radiance</strong> 推理引擎做 TP2。</p>
<ul>
<li>Radiance 的内核库 <strong>libr4d 只编了 gfx1200 / gfx1201</strong>，而且用到 wmma-128b、fp8 转换<br />
这类 <strong>RDNA4 才有的硬件指令</strong>；</li>
<li>W7900 是 RDNA3 / gfx1100：<strong>没有 FP8 矩阵单元</strong>。我们试过编 libr4d，18 处编译错误，<br />
这条路是死的。</li>
</ul>
<p dir="auto">所以不是"参数没调对"，是硬件指令集里没这东西。原帖的 FP8 权重 + Radiance 内核，<br />
在 RDNA3 上没有对应实现。</p>
<h2>我们怎么做的</h2>
<p dir="auto">既然没有 FP8，就走 RDNA3 能跑的 INT8：</p>
<ul>
<li>权重格式：int8，<strong>per-output-row 的 weight scale + Hadamard convrot（group 256）</strong>；</li>
<li>gfx1100 有可用的 WMMA / hipBLASLt INT8 GEMM，所以 int8 走的是硬件矩阵指令，<br />
代价只是每层多一步反量化/旋转。</li>
</ul>
<p dir="auto">模型是 H3 的 DiT：50 层、hidden 5376、56 头 × 128、ffn 14336，int8 权重 20 G。<br />
切分照 Megatron 那一套，只切 DiT：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>层</th>
<th>切法</th>
<th>通信</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>qkv_proj</code></td>
<td>列并行（56 头 → 每卡 28 头）</td>
<td>无</td>
</tr>
<tr>
<td><code>out_proj</code></td>
<td>行并行（K 轴 3584）</td>
<td>all_reduce</td>
</tr>
<tr>
<td><code>fc1</code></td>
<td>列并行（<code>[gate\|up]</code> 各 7168）</td>
<td>无</td>
</tr>
<tr>
<td><code>fc2</code></td>
<td>行并行（K 轴 7168）</td>
<td>all_reduce</td>
</tr>
</tbody>
</table>
<p dir="auto">三个必须解决的细节：</p>
<ol>
<li><strong>int8 是 per-row 动态量化 → 行并行必须跨卡共享激活 scale。</strong> 两卡各算各的行 scale，<br />
量化点就不同，每层约 1% 误差，50 层能累到 40%+。做法：每行 <code>|x|</code> 最大值做<br />
all_reduce(MAX)，通信量只有 S×4 字节。</li>
<li><strong>部分和必须 fp32 累加</strong>再转回 bf16，否则每层约 2e-3。</li>
<li><strong>半宽模型不改一行源码</strong>：在 <code>load_diffusion_model_state_dict</code> 之前把 state_dict 切半，<br />
ComfyUI 会从张量形状自动推出 <code>heads=28 / ffn=7168</code>。</li>
</ol>
<p dir="auto">运行时是两个 ComfyUI 实例跑同一张工作流，DiT 里的 all_reduce 天然锁步，后端 RCCL；<br />
每个实例只暴露自己那张卡（否则 ComfyUI 会把 current device 设回 0，RCCL 报 same GPU）。</p>
<h2>踩过的坑</h2>
<ol>
<li><strong>没有 FP8</strong>：见上一节，别照着 FP8 教程折腾。</li>
<li><strong>激活 scale 不共享 = 白干</strong>：一开始两卡各量化各的，出片和单卡完全对不上，<br />
算子级误差是每层百分级，根因就是量化点不一致。</li>
<li><strong>部分和用 bf16 = 精度崩</strong>：内核默认输出 bf16，两半各自舍入再相加，每层 2e-3；<br />
改成 fp32 累加后，算子级误差降到 1e-7 量级。</li>
<li><strong>attention 后端</strong>：一直用默认的 <code>--use-pytorch-cross-attention</code>（SDPA），长序列上很慢——<br />
同一张 832×480/124 帧的图、同配置跑 1 步：<strong>SDPA 495 s，换 CK 后 97 s（5.08×）</strong>，<br />
显存还低（32.3 → 18.0 G/卡）。一开始还误以为是显卡不行。<br />
改法很简单，<strong>不动代码，只换启动参数</strong>：把 <code>--use-pytorch-cross-attention</code> 换成<br />
<code>--use-ck-attention</code>（Comfy Kitchen 的 int8 attention），单卡实例和 TP2 的两个 rank<br />
一起换；工作流侧也可以用 <code>ModelAttentionBackend</code> 节点设成 <code>comfy kitchen attention</code>。</li>
<li><strong><code>--disable-smart-memory</code> 是"激进卸载到普通内存"</strong>，不是"强制常驻"，别当显存开关用。</li>
</ol>
<h2>测试条件</h2>
<ul>
<li>素材：自建（一张 832×480 的首帧图，I2V），与任何人的素材无关；</li>
<li>832×480 / 124 帧 / 24 fps；8 步（PDD 蒸馏），seed 145；</li>
<li>每步 = 日志里第 2–7 步的均值（首步含模型初始化、末条是进度条汇总行，都不计）；</li>
<li>端到端 = 提交 → 两个 rank 都出片（含文本编码与 VAE 解码）；</li>
<li>显存按 0.5 s 采 <code>/sys/bus/pci/devices/*/mem_info_vram_used</code>，峰值/均值取自采样期。</li>
</ul>
<h2>还没做好的地方</h2>
<ul>
<li><strong>TP 切的是权重和算力，不是激活</strong>：文本编码器和 VAE 不参与并行，所以端到端只快 1.5×；</li>
<li><strong>激活不切</strong>：序列越长激活越大，想装更长的视频得靠序列并行（我们另一套 SP 实验，<br />
显存能摊，但速度不划算，暂时没上）；</li>
<li>只测了 2 卡、只测了 H3 这一个模型；两实例锁步是实验性做法，不做稳定性承诺；</li>
<li><strong>和单卡不是逐像素一致</strong>：PSNR 25.5 dB，差异在细节。这不是 bug——int8 量化点在这个<br />
栈上没法完全对齐（单卡自己换个分块都有 2e-2 的 latent 差），我们只保证两卡彼此一致。</li>
</ul>
<p dir="auto">最后说实话：<strong>效果现在还不理想</strong>。按行耗时归一，原帖 Radiance + FP8 的双卡仍比我们快<br />
不少，差距主要在 int8 软件路径 vs FP8 硬件。这篇先抛砖引玉——有在 RDNA3 上折腾过的<br />
朋友，欢迎一起把 attention 后端、量化方式和通信再往下压。</p>
]]></description><link>https://lcz.me/topic/2643</link><generator>RSS for Node</generator><lastBuildDate>Mon, 09 Nov 2026 09:13:59 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/2643.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Oct 2026 02:12:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Sat, 31 Oct 2026 16:51:39 GMT]]></title><description><![CDATA[<p dir="auto">感谢贴主的信息，我在我的2*2080ti 22g，x99洋垃圾平台上也做了一遍，与你帖子的对比数据如下：</p>
<p dir="auto"><img src="https://upload.lcz.me/uploads/7a69c214-7eac-4ce3-aeb8-8e0783d56258.jpeg" alt="image.jpeg" class="img-markdown  img-fluid" /></p>
]]></description><link>https://lcz.me/post/29949</link><guid isPermaLink="true">https://lcz.me/post/29949</guid><dc:creator><![CDATA[用包子丢狗]]></dc:creator><pubDate>Sat, 31 Oct 2026 16:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Thu, 29 Oct 2026 12:51:57 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> 确实，两张7900xtx跑足够了，而且速度也能接受</p>
]]></description><link>https://lcz.me/post/29177</link><guid isPermaLink="true">https://lcz.me/post/29177</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Thu, 29 Oct 2026 12:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Thu, 29 Oct 2026 11:33:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcys" aria-label="Profile: fcys">@<bdi>fcys</bdi></a> 你这双卡TP一般人没办法复制，双48G。其他人的24G 7900XTX测试的上限好像是1600*896</p>
]]></description><link>https://lcz.me/post/29154</link><guid isPermaLink="true">https://lcz.me/post/29154</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 29 Oct 2026 11:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Thu, 29 Oct 2026 10:59:35 GMT]]></title><description><![CDATA[<p dir="auto">补一组 <strong>48G 卡</strong>（双 W7900，TP=2）的边界实测，供后来人参考。</p>
<p dir="auto"><strong>条件</strong>：TP=2（rank0/rank1 两个 ComfyUI 实例，<code>--use-ck-attention</code>），PDD 8 步蒸馏，CK 注意力，单镜单段，24fps 容器。显存都是<strong>单卡</strong>（48 GiB）占用。</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>分辨率</th>
<th>帧数</th>
<th>时长@24fps</th>
<th>单步稳态</th>
<th>采样总时长(8步)</th>
<th>采样期显存/卡</th>
<th>解码峰值/卡</th>
<th>余量</th>
<th>单镜耗时</th>
</tr>
</thead>
<tbody>
<tr>
<td>832×480</td>
<td>124</td>
<td>5.17s</td>
<td>7.68 s</td>
<td>61 s</td>
<td>12.9 GiB</td>
<td>13.3 GiB</td>
<td>35.1 GiB</td>
<td>128 s</td>
</tr>
<tr>
<td><strong>1344×768</strong></td>
<td>124</td>
<td>5.17s</td>
<td><strong>28.3 s</strong></td>
<td><strong>170 s</strong></td>
<td><strong>16.1 GiB</strong></td>
<td><strong>28.5 GiB</strong></td>
<td>31.9 GiB</td>
<td><strong>297 s</strong></td>
</tr>
<tr>
<td><strong>1344×768</strong></td>
<td>175</td>
<td>7.29s</td>
<td><strong>46.6 s</strong></td>
<td><strong>279 s</strong></td>
<td><strong>17.6 GiB</strong></td>
<td><strong>28.7 GiB</strong></td>
<td>30.4 GiB</td>
<td><strong>466 s</strong></td>
</tr>
<tr>
<td>1600×896</td>
<td>124</td>
<td>5.17s</td>
<td>46.9 s</td>
<td>281 s</td>
<td>17.6 GiB</td>
<td>28.8 GiB</td>
<td>30.4 GiB</td>
<td>472 s</td>
</tr>
<tr>
<td>1920×1088</td>
<td>124</td>
<td>5.17s</td>
<td>86.7 s</td>
<td>520 s</td>
<td>21.3 GiB</td>
<td>29.3 GiB</td>
<td>26.7 GiB</td>
<td>835 s</td>
</tr>
<tr>
<td>1920×1088</td>
<td><strong>362</strong></td>
<td><strong>15.08s</strong></td>
<td><strong>534.9 s</strong></td>
<td><strong>3208 s</strong></td>
<td><strong>37.4 GiB</strong></td>
<td>—</td>
<td>10.6 GiB</td>
<td><strong>76 min</strong></td>
</tr>
</tbody>
</table>
]]></description><link>https://lcz.me/post/29139</link><guid isPermaLink="true">https://lcz.me/post/29139</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Thu, 29 Oct 2026 10:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Thu, 29 Oct 2026 01:29:24 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%E6%9D%8E%E6%AF%85" aria-label="Profile: 李毅">@<bdi>李毅</bdi></a> 可以啊，大家感兴趣的测试，不过24G显存最好，就是单卡也能玩，双卡只是提升。公共开支比较大，显存太小怕不划算。16G的尤其是5060Ti可以尝试下。</p>
]]></description><link>https://lcz.me/post/28922</link><guid isPermaLink="true">https://lcz.me/post/28922</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Thu, 29 Oct 2026 01:29:24 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 23:58:54 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f525.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--fire" style="height:1.4em;width:auto;vertical-align:middle" title="🔥" alt="🔥" /> 本帖参与讨论人数已达 <strong>10+</strong>，入选<strong>热议</strong>，作者 <strong>+3 积分</strong>奖励！</p>
<blockquote>
<p dir="auto">奖励凭证：热议 +3 分 · 编号 h2643-1915-1</p>
</blockquote>
]]></description><link>https://lcz.me/post/28895</link><guid isPermaLink="true">https://lcz.me/post/28895</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Wed, 28 Oct 2026 23:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 23:57:50 GMT]]></title><description><![CDATA[<p dir="auto">这个方式理论上也能用到其他卡上吧</p>
]]></description><link>https://lcz.me/post/28894</link><guid isPermaLink="true">https://lcz.me/post/28894</guid><dc:creator><![CDATA[李毅]]></dc:creator><pubDate>Wed, 28 Oct 2026 23:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 22:57:43 GMT]]></title><description><![CDATA[<p dir="auto">专门去修改了加分限制，此贴的意义在于开创性，7900 上用不了现成的 Radiance，突破了Navi31的局限，这是后续帖子能够成功的关键。奖励15分理所当然。</p>
]]></description><link>https://lcz.me/post/28890</link><guid isPermaLink="true">https://lcz.me/post/28890</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Wed, 28 Oct 2026 22:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 22:55:56 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2b50.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--star" style="height:1.4em;width:auto;vertical-align:middle" title="⭐" alt="⭐" /> <strong>版主追加</strong>：奖励太少，再次追加 <strong>+10 积分</strong>。希望发挥你的技术特长，为 A 卡用户再提供更多的福利。</p>
]]></description><link>https://lcz.me/post/28889</link><guid isPermaLink="true">https://lcz.me/post/28889</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Wed, 28 Oct 2026 22:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 22:49:05 GMT]]></title><description><![CDATA[<p dir="auto">其实奖励给少了，这个帖子的意义很高，以后有机会再补吧，奖励发出就不好修改，同类奖励限定了1次。</p>
]]></description><link>https://lcz.me/post/28888</link><guid isPermaLink="true">https://lcz.me/post/28888</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Wed, 28 Oct 2026 22:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 22:42:10 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2b50.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--star" style="height:1.4em;width:auto;vertical-align:middle" title="⭐" alt="⭐" /> <strong>版主认可</strong>：感谢对<strong>双卡 TP 跑 H3</strong> 的实测验证，每步 18.6s → 8.3s 的数据很有说服力，对想上双卡的锤友帮助很大。</p>
<p dir="auto">奖励 <strong>+5 积分</strong>。</p>
]]></description><link>https://lcz.me/post/28886</link><guid isPermaLink="true">https://lcz.me/post/28886</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Wed, 28 Oct 2026 22:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 14:53:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcys" aria-label="Profile: fcys">@<bdi>fcys</bdi></a> 谢谢啦，可能我用那gpt有些傻，没有搞不来，后续要抄作业：）</p>
]]></description><link>https://lcz.me/post/28833</link><guid isPermaLink="true">https://lcz.me/post/28833</guid><dc:creator><![CDATA[懒人烘培]]></dc:creator><pubDate>Wed, 28 Oct 2026 14:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 14:23:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/%E6%87%92%E4%BA%BA%E7%83%98%E5%9F%B9" aria-label="Profile: 懒人烘培">@<bdi>懒人烘培</bdi></a><br />
说实话优化空间依然很大，我就是抛砖引玉，后面劳烦大家群策群力</p>
<h1>TP2 代码全文（tp2-comfy v1.0.0）</h1>
<blockquote>
<p dir="auto">直接可跑的最小实现；完整说明/排查清单见 <code>README.md</code>，包见 <code>tp2-comfy-v1.0.0.zip</code>。</p>
</blockquote>
<p dir="auto">依赖：ComfyUI + ComfyUI-INT8-Fast-ROCM（int8_convrot）+ comfy-kitchen（CK attention）；<br />
模型需为 <code>minimax_h3_*_pruned_int8_convrot</code>（qkv 行数 21504、56 头 × 128、ffn 14336）。</p>
<h2>tp/core.py —— 权重重切 + 块级 all_reduce</h2>
<pre><code class="language-python">"""TP2 共用：int8 权重切分 + 块级 all_reduce 补丁。

所属：tp2-comfy v1.0.0（双卡张量并行，ComfyUI + MiniMax-H3 int8_convrot）
环境变量：
  COMFY_ROOT  ComfyUI 根目录（默认 /home/ly/ComfyUI-ROCm）
  TP_UNET     仅 build_model() 独立探针用；生产路径从工作流里读模型
"""
import os
import sys
import importlib

import torch
import torch.distributed as dist

APP_VERSION = "1.0.0"
TP_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, TP_DIR)
import tp_linear

ROC = os.environ.get("COMFY_ROOT", "/home/ly/ComfyUI-ROCm")
UNET = os.environ.get(
    "TP_UNET",
    "/home/ly/ComfyUI Tools/comfyui/models/diffusion_models/"
    "minimax_h3_fl2va_pruned_int8_convrot.safetensors")


def build_model():
    """独立探针：不起 ComfyUI，直接加载模型看结构（可选调试入口）。"""
    os.chdir(ROC)
    sys.path.insert(0, ROC)
    sys.path.insert(0, os.path.join(ROC, "custom_nodes"))
    import comfy.sd
    import comfy.model_management as mm
    q = importlib.import_module("ComfyUI-INT8-Fast-ROCM.int8_quant")
    mp = comfy.sd.load_diffusion_model(UNET, model_options={"custom_operations": q.Int8TensorwiseOps})
    mm.load_models_gpu([mp])
    return mp.model.diffusion_model


def _slice_rows(lin, idx):
    """沿输出轴（行）取分片；tensorwise scale 不变，per-row scale 同步切。"""
    w = lin.weight.data
    lin.weight.data = w[idx].contiguous()
    lin.out_features = lin.weight.data.shape[0]
    sc = getattr(lin, "weight_scale", None)
    if sc is not None and torch.is_tensor(sc) and sc.numel() == w.shape[0]:
        lin.weight_scale = sc[idx].contiguous()
    return lin


def _slice_cols(lin, idx):
    w = lin.weight.data
    lin.weight.data = w[:, idx].contiguous()
    lin.in_features = lin.weight.data.shape[1]
    return lin


def apply_tp(net, rank, world=2, which="both", slice_weights=True):
    """按 head 切 attention、按 ffn 切 MLP；返回每层的切分信息供反向检查。

    只支持 world=2：heads=56 → 每卡 28；ffn=14336 → 每卡 7168。
    """
    assert world == 2, "本实现只支持 2 卡（半宽切分）"
    info = []
    for bi, blk in enumerate(net.blocks):
        attn, mlp = blk.attn, blk.mlp
        heads, hd = attn.heads, attn.head_dim
        inner = heads * hd
        half = heads // world
        lo, hi = rank * half, (rank + 1) * half
        hsel = torch.arange(lo * hd, hi * hd)

        if which in ("both", "attn", "ref"):
            # qkv：q/k/v 三段各取本 rank 的 head 行
            idx = torch.cat([hsel, inner + hsel, 2 * inner + hsel])
            attn.heads = half
            if which != "ref" and slice_weights:
                _slice_rows(attn.qkv_proj, idx)
                _slice_cols(attn.out_proj, hsel)
            tp_linear.install_row_parallel(attn.out_proj)   # 行并行：全局行 scale + 由调用方 all_reduce
        else:
            attn.heads = heads

        # MLP：fc1 输出是 [gate(ffn) | up(ffn)]，两半各取 ffn/2
        ffn = mlp.fc1.out_features // 2
        fh = ffn // world
        f_lo, f_hi = rank * fh, (rank + 1) * fh
        if which in ("both", "mlp", "ref"):
            gidx = torch.cat([torch.arange(f_lo, f_hi), torch.arange(ffn + f_lo, ffn + f_hi)])
            if which != "ref" and slice_weights:
                _slice_rows(mlp.fc1, gidx)
                _slice_cols(mlp.fc2, torch.arange(f_lo, f_hi))
            tp_linear.install_row_parallel(mlp.fc2)          # 行并行
        info.append((bi, half, (f_lo, f_hi)))
    return info


def patch_blocks(net, which="both"):
    """在 attn/mlp 输出后插入 all_reduce（Megatron 行并行语义：部分和相加）。"""
    import comfy.ldm.minimax.model as M

    def block_forward(self, x, t_emb, mod_segments, rope_freqs, transformer_options={}, attention=None):
        attention = self.attn if attention is None else attention
        shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.adaln_proj(t_emb)
        h = M._mod_scale_shift(self.norm1(x), shift_msa, scale_msa, mod_segments)
        a = attention(h, rope_freqs=rope_freqs, transformer_options=transformer_options)
        if which in ("both", "attn"):
            dist.all_reduce(a)
            if a.dtype != x.dtype:
                a = a.to(x.dtype)
        x = M._mod_gate(x, gate_msa, a, mod_segments)
        h = M._mod_scale_shift(self.norm2(x), shift_mlp, scale_mlp, mod_segments)
        m = self.mlp(h)
        if which in ("both", "mlp"):
            dist.all_reduce(m)
            if m.dtype != x.dtype:
                m = m.to(x.dtype)
        return M._mod_gate(x, gate_mlp, m, mod_segments)

    for b in net.blocks:
        b.forward = block_forward.__get__(b, type(b))


def _head_rows(attn_heads, head_dim, inner, rank, world=2):
    half = attn_heads // world
    lo, hi = rank * half, (rank + 1) * half
    hsel = torch.arange(lo * head_dim, hi * head_dim)
    return hsel, torch.cat([hsel, inner + hsel, 2 * inner + hsel]), half


def slice_state_dict(sd, rank, world=2):
    """在模型构造前从 state_dict 切分，避免"先装全量再切"的显存峰值。

    H3 配置固定：hidden=5376、56 头 × head_dim 128 → inner=7168、qkv 行数 21504。
    形状守卫：qkv 行数不是 21504 就认为已切过（PDD 节点会二次加载，不能切两遍）。
    """
    HIDDEN, QKV_ROWS, HEAD_DIM, HEADS = 5376, 21504, 128, 56
    k0 = "blocks.0.attn.qkv_proj.weight"
    if k0 not in sd or sd[k0].shape != (QKV_ROWS, HIDDEN):
        return sd
    inner = HEADS * HEAD_DIM
    half = HEADS // world
    hsel = torch.arange(rank * half * HEAD_DIM, (rank + 1) * half * HEAD_DIM)
    qkv_idx = torch.cat([hsel, inner + hsel, 2 * inner + hsel])
    n = 0
    for k in list(sd.keys()):
        t = sd[k]
        if k.endswith(".attn.qkv_proj.weight") and t.shape[0] == QKV_ROWS:
            sd[k] = t[qkv_idx].contiguous(); n += 1
        elif k.endswith(".attn.qkv_proj.weight_scale") and t.shape[0] == QKV_ROWS:
            sd[k] = t[qkv_idx].contiguous(); n += 1
        elif k.endswith(".attn.out_proj.weight") and t.shape[1] == inner:
            sd[k] = t[:, hsel].contiguous(); n += 1
        elif k.endswith(".mlp.fc1.weight") and t.shape[1] == HIDDEN:
            ffn = t.shape[0] // 2
            fh = ffn // world
            gidx = torch.cat([torch.arange(rank * fh, (rank + 1) * fh),
                              torch.arange(ffn + rank * fh, ffn + (rank + 1) * fh)])
            sd[k] = t[gidx].contiguous(); n += 1
            ks = k[:-len("weight")] + "weight_scale"
            if ks in sd and sd[ks].shape[0] == 2 * ffn:
                sd[ks] = sd[ks][gidx].contiguous(); n += 1
        elif k.endswith(".mlp.fc2.weight") and t.shape[0] == HIDDEN:
            ffn = t.shape[1]
            fh = ffn // world
            sd[k] = t[:, rank * fh:(rank + 1) * fh].contiguous(); n += 1
    print(f"[tp] state_dict 已切分 {n} 个张量（rank{rank}）", flush=True)
    return sd


def finalize_tp(net, rank):
    """模型已按半宽构造（state_dict 预切）时调用：只装行并行前向、不切权重。"""
    n = 0
    for blk in net.blocks:
        tp_linear.install_row_parallel(blk.attn.out_proj)
        tp_linear.install_row_parallel(blk.mlp.fc2)
        n += 1
    b0 = net.blocks[0]
    print(f"[tp] rank{rank} 半宽模型已确认：heads={b0.attn.heads} qkv_out={b0.attn.qkv_proj.weight.shape[0]} "
          f"fc1_out={b0.mlp.fc1.out_features} 行并行层={n}", flush=True)
    return n
</code></pre>
<h2>tp/tp_boot.py —— RCCL 初始化 + 加载钩子</h2>
<pre><code class="language-python">"""TP2 启动引导：在 ComfyUI 外面套一层，挂 RCCL + 模型加载钩子。

教训（照抄会炸）：不能在 ComfyUI 之前 import torch / comfy.sd —— 会破坏 AIMDO 初始化
（报 'NoneType' object has no attribute 'hostbuf_allocate'）。
做法：只提前打开参数解析（comfy.options 很轻），其余工作交给后台线程，
等 main.py 自己把 comfy.sd 导入完之后再 init RCCL 并挂载模型加载钩子。

用法（每个 rank 一个进程，各只暴露一张卡）：
  TP_RANK=1 ROCR_VISIBLE_DEVICES=&lt;GPU1&gt; python tp_boot.py --port 8191 ...
  TP_RANK=0 ROCR_VISIBLE_DEVICES=&lt;GPU0&gt; python tp_boot.py --port 8190 ...
环境变量：
  COMFY_ROOT     ComfyUI 根目录（默认 /home/ly/ComfyUI-ROCm）
  TP_RANK        0 / 1
  MASTER_ADDR    RCCL 地址（默认 127.0.0.1）
  MASTER_PORT    RCCL 端口（默认 29670）
"""
import os
import sys
import threading
import time

APP_VERSION = "1.0.0"
TP_DIR = os.path.dirname(os.path.abspath(__file__))
ROC = os.environ.get("COMFY_ROOT", "/home/ly/ComfyUI-ROCm")
sys.path.insert(0, ROC)
sys.path.insert(0, TP_DIR)

import comfy.options as _co  # 只定义开关，不拉 torch/cli_args
_co.enable_args_parsing()

rank = int(os.environ["TP_RANK"])
os.environ.setdefault("MASTER_ADDR", "127.0.0.1")
os.environ.setdefault("MASTER_PORT", "29670")
READY = threading.Event()


def _on_model(mp):
    # 注意：PDD 加速节点会重建一次模型（adaln rebase），每次加载都要切，不能只切一次
    if mp is None:
        return mp
    try:
        net = getattr(mp.model, "diffusion_model", None)
        if net is None or not hasattr(net, "blocks"):
            return mp
    except Exception:
        return mp
    if getattr(net, "_tp_done", False):
        return mp
    import core
    try:
        rows = int(net.blocks[0].attn.qkv_proj.weight.shape[0])
    except Exception:
        rows = 0
    if rows == 10752:      # 已经是半宽模型（预切路径）
        core.finalize_tp(net, rank)
    elif rows == 21504:    # 全宽模型：现场切
        core.apply_tp(net, rank)
    else:
        raise RuntimeError(f"未预期的 qkv 行数 {rows}（期望 21504 或 10752）")
    core.patch_blocks(net)
    net._tp_done = True
    b0 = net.blocks[0]
    print(f"[tp] rank{rank} 已切分 DiT：heads={b0.attn.heads} "
          f"qkv_out={b0.attn.qkv_proj.weight.shape[0]} out_proj_in={b0.attn.out_proj.weight.shape[1]} "
          f"fc1_out={b0.mlp.fc1.out_features} fc2_in={b0.mlp.fc2.weight.shape[1]}", flush=True)
    return mp


def _boot():
    # 等 main.py 把 comfy.sd 导入完，保证 torch 的导入顺序由 ComfyUI 自己决定
    for _ in range(12000):
        if "comfy.sd" in sys.modules:
            break
        time.sleep(0.05)
    import torch
    import torch.distributed as dist
    # 每个进程只暴露自己那张卡（ROCR_VISIBLE_DEVICES 单卡）→ 本地 index 恒为 0，
    # 这样 ComfyUI 主线程怎么设 current device 都不会和别的 rank 撞同一张卡。
    torch.cuda.set_device(0)
    dist.init_process_group("nccl", rank=rank, world_size=2)
    bus = getattr(torch.cuda.get_device_properties(0), "pci_bus_id", "?")
    print(f"[tp] rank{rank} 已加入 RCCL，device={torch.cuda.current_device()} bus={bus}", flush=True)
    READY.set()

    import comfy.sd as sd
    orig = sd.load_diffusion_model_state_dict

    def wrapped(sd=None, *a, **k):
        READY.wait()
        import core
        presliced = False
        if isinstance(sd, dict):
            n0 = sd.get("blocks.0.attn.qkv_proj.weight")
            if n0 is not None and tuple(n0.shape) == (21504, 5376):
                sd = core.slice_state_dict(sd, rank)   # 预切：模型按半宽构造
                presliced = True
        try:
            import comfy.model_management as _mm
            _mm.unload_all_models()                    # 先腾出 26G 文本编码器
            import torch as _t
            _t.cuda.empty_cache()
        except Exception as e:
            print(f"[tp] 预卸载失败: {e}", flush=True)
        mp = orig(sd, *a, **k)
        if presliced and mp is not None:
            net = getattr(getattr(mp, "model", None), "diffusion_model", None)
            if net is not None:
                net._tp_presliced = True
        return _on_model(mp)

    sd.load_diffusion_model_state_dict = wrapped
    print(f"[tp] rank{rank} 已挂载模型加载钩子", flush=True)


print(f"[tp] tp2-comfy v{APP_VERSION} rank{rank} 启动（COMFY_ROOT={ROC}）", flush=True)
threading.Thread(target=_boot, daemon=True).start()
import runpy
runpy.run_path(os.path.join(ROC, "main.py"), run_name="__main__")
</code></pre>
<h2>tp/tp_linear.py —— int8 行并行：共享激活 scale</h2>
<pre><code class="language-python">"""TP 行并行层：只替换激活量化 scale，其余完全走 ComfyUI-INT8 原生路径。

背景：int8 权重按输出行切好（列并行）后，行并行（K 轴切半）的问题在于
原生 per-row 动态量化会给每半各算一个 scale，量化点不同 → 每层 ~1% 误差。

做法：把各行 |x| 最大值跨卡 all_reduce(MAX)，得到整行原本会用的 scale，
注入 triton_quantize_rowwise；其余（int8 GEMM、反量化、convrot、LoRA、
cast_weight 分支）全部走原生，不做任何重写。
"""
import torch
import torch.distributed as dist

_SHARED = {"scale": None}
_PATCHED = {"ok": False}


def _patch_once():
    if _PATCHED["ok"]:
        return
    import importlib
    fk = importlib.import_module("ComfyUI-INT8-Fast-ROCM.int8_fused_kernel")
    orig = fk.triton_quantize_rowwise

    def qr(x):
        y, s = orig(x)
        sh = _SHARED["scale"]
        if sh is None:
            return y, s
        xf = x.float()
        y = torch.floor(xf / sh + 0.5).clamp_(-128, 127).to(torch.int8)
        return y, sh

    fk.triton_quantize_rowwise = qr
    _PATCHED["ok"] = True


def install_row_parallel(lin):
    """权重需已按列（K 轴）切好；安装带全局 scale 的原生前向。"""
    _patch_once()
    if getattr(lin, "_tp_row_installed", False):
        return
    orig_forward = lin.__class__.forward

    def fwd(x):
        # 注意：只在"算 scale"时旋转一份副本，传进原生 forward 的仍是未旋转的 x，
        # 否则原生路径会再旋转一次（H 不是幂等）。
        x2d = x.reshape(-1, x.shape[-1])
        xr = x2d
        if getattr(lin, "_use_convrot", False):
            import importlib
            cr = importlib.import_module("ComfyUI-INT8-Fast-ROCM.convrot")
            gs = getattr(lin, "_convrot_groupsize", 256)
            if x2d.shape[1] % gs == 0:
                H = cr.build_hadamard(gs, device=x2d.device, dtype=x2d.dtype)
                xr = cr.rotate_activation(x2d, H, group_size=gs)
        forced = getattr(lin, "_tp_force_scale", None)
        if forced is not None:
            s = forced
        else:
            s = (xr.float().abs().amax(dim=1, keepdim=True) / 127.0).clamp_min(1e-30)
        if dist.is_initialized():
            dist.all_reduce(s, op=dist.ReduceOp.MAX)
            s = s.clamp_min(1e-30)
        # TP_WIRE=bf16（默认，对齐 Radiance 的 exact 线）| fp32（更精确但通信翻倍）
        import importlib
        import os
        ops = importlib.import_module("ComfyUI-INT8-Fast-ROCM.int8_quant").Int8TensorwiseOps
        prev = ops.compute_dtype
        if os.environ.get("TP_WIRE", "bf16") == "bf16":
            out_dtype_keep = prev
        _SHARED["scale"] = s
        if os.environ.get("TP_WIRE", "bf16") != "bf16":
            ops.compute_dtype = torch.float32
        try:
            out = orig_forward(lin, x)
        finally:
            _SHARED["scale"] = None
            ops.compute_dtype = prev
        return out

    lin.forward = fwd
    lin._tp_row_installed = True
</code></pre>
<h2>start_tp2.sh —— 启动器（默认 CK）</h2>
<pre><code class="language-bash">#!/usr/bin/env bash
# start_tp2.sh —— 起两个 ComfyUI 实例做 H3 张量并行（rank0 / rank1），各只看见一张卡。
#
# 必须带 --use-ck-attention：PyTorch SDPA 在长序列上会崩速（见 README「四个必须」）。
#
# 可用环境变量覆盖：
#   COMFY_ROOT   ComfyUI 根目录            （默认 /home/ly/ComfyUI-ROCm）
#   GPU0/GPU1    两张卡的 unique_id        （rocm-smi --showuniqueid 查）
#   PORT0/PORT1  两个实例的 HTTP 端口      （默认 8190 / 8191）
#   BASE0/BASE1  两个实例的 output/input 目录
#   MASTER_PORT  RCCL 会合端口             （默认 29670）
#   ATTN         attention 后端参数        （默认 --use-ck-attention）
set -euo pipefail

COMFY_ROOT=${COMFY_ROOT:-/home/ly/ComfyUI-ROCm}
TP_DIR=$(cd "$(dirname "$0")" &amp;&amp; pwd)/tp
GPU0=${GPU0:-GPU-3c99737f13093cd0}
GPU1=${GPU1:-GPU-3ce42265b99a6c53}
PORT0=${PORT0:-8190}
PORT1=${PORT1:-8191}
BASE0=${BASE0:-/home/ly/ComfyUI Tools/comfyui/w7900}
BASE1=${BASE1:-/home/ly/ComfyUI Tools/comfyui/w7900-4a}
MASTER_PORT=${MASTER_PORT:-29670}
ATTN=${ATTN:---use-ck-attention}
LOGD=${LOGD:-$COMFY_ROOT/logs}

mkdir -p "$BASE0"/{output,input,temp} "$BASE1"/{output,input,temp} "$LOGD"
export TRITON_DEFAULT_BACKEND=amd COMFYUI_ENABLE_MIOPEN=1 MIOPEN_FIND_MODE=FAST
export MALLOC_MMAP_THRESHOLD_=65536 MALLOC_TRIM_THRESHOLD_=65536
export TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 SAFETENSORS_FAST_GPU=1 PYTHONUTF8=1
export PYTORCH_TUNABLEOP_ENABLED=0
export MASTER_ADDR=127.0.0.1 MASTER_PORT
export COMFY_ROOT

# rank1（第二张卡）先起：它会 block 在 init_process_group 等 rank0
TP_RANK=1 ROCR_VISIBLE_DEVICES="$GPU1" nohup "$COMFY_ROOT/venv/bin/python" "$TP_DIR/tp_boot.py" \
  --listen 127.0.0.1 --port "$PORT1" \
  --output-directory "$BASE1/output" --input-directory "$BASE1/input" \
  $ATTN --disable-smart-memory --disable-pinned-memory --disable-async-offload --reserve-vram 2 \
  &gt;&gt; "$LOGD/tp_rank1_$(date +%Y%m%d).log" 2&gt;&amp;1 &amp;
echo "rank1 pid=$! port=$PORT1 gpu=$GPU1"

sleep 3
TP_RANK=0 ROCR_VISIBLE_DEVICES="$GPU0" nohup "$COMFY_ROOT/venv/bin/python" "$TP_DIR/tp_boot.py" \
  --listen 127.0.0.1 --port "$PORT0" \
  --output-directory "$BASE0/output" --input-directory "$BASE0/input" \
  $ATTN --disable-smart-memory --disable-pinned-memory --disable-async-offload --reserve-vram 2 \
  &gt;&gt; "$LOGD/tp_rank0_$(date +%Y%m%d).log" 2&gt;&amp;1 &amp;
echo "rank0 pid=$! port=$PORT0 gpu=$GPU0"

echo "已拉起 TP2：$PORT0(rank0) + $PORT1(rank1)，日志 $LOGD/tp_rank{0,1}_$(date +%Y%m%d).log"
</code></pre>
]]></description><link>https://lcz.me/post/28819</link><guid isPermaLink="true">https://lcz.me/post/28819</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Wed, 28 Oct 2026 14:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 14:06:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcys" aria-label="Profile: fcys">@<bdi>fcys</bdi></a> 你这个自己写的tp2代码，由于没有公布，AI自己写了个速度不理想</p>
]]></description><link>https://lcz.me/post/28806</link><guid isPermaLink="true">https://lcz.me/post/28806</guid><dc:creator><![CDATA[懒人烘培]]></dc:creator><pubDate>Wed, 28 Oct 2026 14:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 11:24:15 GMT]]></title><description><![CDATA[<p dir="auto">新卡已经到了，今晚作业太多了，要抄晕了<br />
<img src="https://upload.lcz.me/uploads/f180175d-172f-48ef-bd40-4c559eabbd4a.jpeg" alt="image.jpeg" class="img-markdown  img-fluid" /><br />
<img src="https://upload.lcz.me/uploads/152cab2b-c6ac-4d5a-9684-2c6cadc2a263.jpeg" alt="image.jpeg" class="img-markdown  img-fluid" /><br />
<img src="https://upload.lcz.me/uploads/15c51964-0821-4208-8f3c-830e75c9c049.jpeg" alt="image.jpeg" class="img-markdown  img-fluid" /></p>
]]></description><link>https://lcz.me/post/28744</link><guid isPermaLink="true">https://lcz.me/post/28744</guid><dc:creator><![CDATA[Enigma]]></dc:creator><pubDate>Wed, 28 Oct 2026 11:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 11:14:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/hippo" aria-label="Profile: hippo">@<bdi>hippo</bdi></a> 您把帖子直接丢给agent就行了啊</p>
]]></description><link>https://lcz.me/post/28740</link><guid isPermaLink="true">https://lcz.me/post/28740</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Wed, 28 Oct 2026 11:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 10:49:59 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcys" aria-label="Profile: fcys">@<bdi>fcys</bdi></a> 代码方便分享看看吗？存到网盘之类的</p>
]]></description><link>https://lcz.me/post/28737</link><guid isPermaLink="true">https://lcz.me/post/28737</guid><dc:creator><![CDATA[hippo]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 10:13:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/hippo" aria-label="Profile: hippo">@<bdi>hippo</bdi></a> 冇啊</p>
]]></description><link>https://lcz.me/post/28725</link><guid isPermaLink="true">https://lcz.me/post/28725</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 10:12:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/alex-liu" aria-label="Profile: Alex-Liu">@<bdi>Alex-Liu</bdi></a> intel的卡，我归入了稀奇古怪里面了</p>
]]></description><link>https://lcz.me/post/28724</link><guid isPermaLink="true">https://lcz.me/post/28724</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 06:49:06 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/fcys" aria-label="Profile: fcys">@<bdi>fcys</bdi></a> 专业啊，一看就是懂行的，下次发个帖子让锤友们看看稀奇古怪的卡还有哪些。</p>
]]></description><link>https://lcz.me/post/28648</link><guid isPermaLink="true">https://lcz.me/post/28648</guid><dc:creator><![CDATA[Alex Liu]]></dc:creator><pubDate>Wed, 28 Oct 2026 06:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 04:24:53 GMT]]></title><description><![CDATA[<p dir="auto">有github地址吗</p>
]]></description><link>https://lcz.me/post/28603</link><guid isPermaLink="true">https://lcz.me/post/28603</guid><dc:creator><![CDATA[hippo]]></dc:creator><pubDate>Wed, 28 Oct 2026 04:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 03:06:46 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> 我确实是一上来就让走的int8，发出来是做个提醒，跟Radiance注意区分。卡是刚好手里有，家里有不少稀奇古怪的卡<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f632.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--astonished" style="height:1.4em;width:auto;vertical-align:middle" title=":astonished:" alt="😲" /> ，只是给同核心的7900xtx做个参考。</p>
]]></description><link>https://lcz.me/post/28576</link><guid isPermaLink="true">https://lcz.me/post/28576</guid><dc:creator><![CDATA[fcys]]></dc:creator><pubDate>Wed, 28 Oct 2026 03:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 02:56:46 GMT]]></title><description><![CDATA[<p dir="auto">哥们这不像个新手啊，FP8不行直接转INT8，一看就懂啊。两张W7900，这玩意可不便宜，比4090 48G还贵。</p>
]]></description><link>https://lcz.me/post/28572</link><guid isPermaLink="true">https://lcz.me/post/28572</guid><dc:creator><![CDATA[terry]]></dc:creator><pubDate>Wed, 28 Oct 2026 02:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to 两张 7900 跑 MiniMax-H3 张量并行：每步 18.6 s → 8.3 s，每卡省 10 GiB on Wed, 28 Oct 2026 02:54:35 GMT]]></title><description><![CDATA[<p dir="auto"><img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/2b50.png?v=5be5614064c" class="not-responsive emoji emoji-android emoji--star" style="height:1.4em;width:auto;vertical-align:middle" title="⭐" alt="⭐" /> 版主审定：本帖设为<strong>精华</strong>，作者 <strong>+6 积分</strong>奖励，希望再接再厉！</p>
<blockquote>
<p dir="auto">奖励凭证：精华 +6 分 · 编号 f2643-1915-1</p>
</blockquote>
]]></description><link>https://lcz.me/post/28571</link><guid isPermaLink="true">https://lcz.me/post/28571</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Wed, 28 Oct 2026 02:54:35 GMT</pubDate></item></channel></rss>