-
-
-
-
@bunsei 了解了, 我问了AI,
下面是AI的回答:
关于“显存够用时,双卡 TP 为什么还能实现每步提速(2.27x)”的核心逻辑可以总结为以下三点:
- 算力与矩阵乘法并行(空间换时间):虽然扩散模型的时间步(采样步数)必须串行迭代,但在单个时间步内部,双卡 TP(张量并行)将原本由单卡独扛的 DiT 模型层计算拆分到了两张卡上,实现了算力叠加,单步耗时直接腰斩。
- 规避“显存边缘化”引发的性能惩罚:从实测数据看,单卡时峰值显存被压榨到了 24016 MiB(逼近物理极限),容易导致硬件内部调度开销增大;双卡分摊后峰值降至 13G 左右,彻底释放了计算单元的潜能。
- 极高的“计算掩盖通信”效率:像 MiniMax 这样的大视频序列(数万 token 级别),每一层的矩阵计算极其庞大,通过 PCIe 搬运中间结果的开销相比之下非常小(步时增幅仅 1-4% 左右),因此 PCIe 完全不会成为拖后腿的瓶颈。
简单来说:虽然采样步数不能并行,但单步内的矩阵计算和算力被双卡并行解放了!
-
@bunsei 了解了, 我问了AI,
下面是AI的回答:
关于“显存够用时,双卡 TP 为什么还能实现每步提速(2.27x)”的核心逻辑可以总结为以下三点:
- 算力与矩阵乘法并行(空间换时间):虽然扩散模型的时间步(采样步数)必须串行迭代,但在单个时间步内部,双卡 TP(张量并行)将原本由单卡独扛的 DiT 模型层计算拆分到了两张卡上,实现了算力叠加,单步耗时直接腰斩。
- 规避“显存边缘化”引发的性能惩罚:从实测数据看,单卡时峰值显存被压榨到了 24016 MiB(逼近物理极限),容易导致硬件内部调度开销增大;双卡分摊后峰值降至 13G 左右,彻底释放了计算单元的潜能。
- 极高的“计算掩盖通信”效率:像 MiniMax 这样的大视频序列(数万 token 级别),每一层的矩阵计算极其庞大,通过 PCIe 搬运中间结果的开销相比之下非常小(步时增幅仅 1-4% 左右),因此 PCIe 完全不会成为拖后腿的瓶颈。
简单来说:虽然采样步数不能并行,但单步内的矩阵计算和算力被双卡并行解放了!
-
-
-
-
,
T terry 引用了 此主题
-
抄 2582 的第二组:同一套"宇宙公交站"素材,双 7900XTX(自建 TP2)和单张 4080S 各跑一遍全程
0x00 缘起
楼主第二组用的"宇宙公交站"素材包(5 张角色图 + 一段动作参考视频 + 原声),我们拿过来按同口径重跑了全程:832×480(0.399MP)、124 帧、20 步 Euler、seed 145、不用加速 LoRA、参考条件与初始噪声共享。手上正好有两台机器,一台 AMD 双卡、一台 N 卡单卡,分段计时都记下来了。
先说结论:单张 4080S 比我们的双 7900XTX 快 2.04 倍(10 分 36 秒 vs 5 分 12 秒)。
0x01 两台机器的配置
机器 A(AMD 双卡,自建 TP2):
项目 配置 主板 / CPU ASRock X570 ACE / Ryzen 5 3500X(6C6T,无 SMT) 内存 94 GB GPU 2 × RX 7900 XTX 24G,拆 x8/x8(实测各 14.2 GB/s,不因第二张卡掉速) P2P 开(BIOS 开 IOMMU + 内核 iommu=pt)系统 / 内核 Ubuntu 24.04.5 / 7.0.0-38-generic ROCm / torch ROCm 7.2.3 / torch 2.12.1+rocm7.2(hip 7.2.53211) ComfyUI 0.39.0 跑法 自建 TP2 脚本:每卡装半宽模型,100 个行并行层自己做 int8( _int_mm),列并行保留 ck 算子,--use-ck-attention机器 B(N 卡单卡,标准路径):
项目 配置 CPU Ryzen 7 9700X(8C16T) 内存 92 GB GPU RTX 4080 SUPER 32G 驱动 / 内核 595.99.02 / 7.0.0-38-generic CUDA / torch CUDA 13.0 / torch 2.13.0+cu130 ComfyUI 0.39.0 跑法 上游 h3_comfy_benchmark.py,标准单卡路径,不加任何补丁两边用的是同一个 checkpoint 文件:
minimax_h3_ref2va_pruned_fp8_scaled.safetensors,20,958,205,608 字节,日期都一样。0x02 成绩
段 双 7900XTX(TP2) 单张 4080S 楼主(双 R9700,Radiance 原生) 预处理(VAE 编码 + Qwen3-VL-32B 条件) 141 s 38 s ~5 分钟 采样 20 步 438.3 s(20.4 → 22.8 s/步) 255.8 s(12.40 s/步) — VAE 解码 + 合成 33 s 12.0 s — 合计 636 s = 10 分 36 秒 312 s = 5 分 12 秒 15 分 35 秒 预处理这一段两台差了近 4 倍(141s vs 38s),跟楼主账上"预处理走单卡 PyTorch 路径"那个观察是同一件事,只是 N 卡那边明显更不吃这一项。
0x03 逐步曲线(这个差别挺有意思)
机器 A(双 XTX)20 步,单位秒:
23.05, 20.39, 20.58, 20.69, 20.84, 20.89, 21.12, 21.38, 21.56, 21.73, 21.86, 22.03, 22.11, 22.18, 22.29, 22.37, 22.49, 22.56, 22.64, 22.81首步之后单调上升,到第 20 步涨了 12%,不是随机抖动,是热/功耗漂移。
机器 B(4080S)20 步全在 12.399 ~ 12.408 之间,基本一条直线。
0x04 一个必须说清的事:同 seed 不跨后端复现
两台出来的不是同一个画面——两段成片对拍 PSNR 只有 15.6 dB。seed 一样、素材一样、checkpoint 一样,但采样路径的数值实现不同(我们 TP2 是自建 int8 行并行,N 卡是标准 fp8 路径),20 步下来就分叉了。
所以上面那张表只能比时间,不能比画质;两台各自的效果请各自看成片。
0x05 为什么单卡 4080S 反而快(推断,没逐项隔离)
按可能的贡献排序:
- FP8:checkpoint 是
fp8_scaled。Ada 有 FP8 Tensor Core,gfx1100 没有 FP8 硬件,只能反量化成 fp16/bf16 再算。 - TP 通信:我们每个 block 一次 all_reduce(100 个行并行层),走 PCIe x8/x8(各 14.2 GB/s)。单卡完全没有这笔开销。
- 主机差一档:3500X 6C6T 对 9700X 8C16T。
- 热漂移:XTX 这对 +12%,4080S 全程死平。
要坐实的话,下一步是在 8.147 上把 TP2 的 all_reduce 单独计时,再用同一份 int8 版 ref2va 跑一遍,把"FP8"和"通信"两项拆开。现在这版结论请当测量结果 + 未验证的解释看。
0x06 顺手踩到的两个坑,抄的人可以直接避开
第一个:VAE 解码 OOM,根因不是显存不够,是没带
--use-ck-attention。 24G 卡上解 832×480×148 帧会炸,PyTorch 只报了 4.87GB 但卡上只剩 30MB——VAE 解码器里的注意力块用朴素实现,256×256 的 tile 就是 6.5 万 token 的注意力矩阵,20GB 是它吃掉的。带上 ck-attention 之后解码 19.4 秒。我们试过小 tile(256→128)、时间块切小、按时间/空间切两半、MIOpen FIND_MODE、expandable_segments、强制/不强制全载入——全部无效,别浪费时间。第二个:跑过被 OOM 杀掉的 GPU 进程之后,amdgpu 会扣住主机内存不还。 我们这边连续几个解码进程被杀之后,空载 37GB 不在任何进程、不在缓存、不在 slab、不在 GTT 里,模型加载直接开始疯狂换页(302 秒还没起来)。
modprobe -r amdgpu的瞬间 MemFree 从 62.2GB 跳到 97.4GB,重新起就是 42 秒。双卡跑完 GPU 任务,起模型之前先看一眼MemAvailable,不够就把驱动卸了重载(前提是别让桌面会话占着卡,否则卸不掉)。 - FP8:checkpoint 是
-
抄 2582 的第二组:同一套"宇宙公交站"素材,双 7900XTX(自建 TP2)和单张 4080S 各跑一遍全程
0x00 缘起
楼主第二组用的"宇宙公交站"素材包(5 张角色图 + 一段动作参考视频 + 原声),我们拿过来按同口径重跑了全程:832×480(0.399MP)、124 帧、20 步 Euler、seed 145、不用加速 LoRA、参考条件与初始噪声共享。手上正好有两台机器,一台 AMD 双卡、一台 N 卡单卡,分段计时都记下来了。
先说结论:单张 4080S 比我们的双 7900XTX 快 2.04 倍(10 分 36 秒 vs 5 分 12 秒)。
0x01 两台机器的配置
机器 A(AMD 双卡,自建 TP2):
项目 配置 主板 / CPU ASRock X570 ACE / Ryzen 5 3500X(6C6T,无 SMT) 内存 94 GB GPU 2 × RX 7900 XTX 24G,拆 x8/x8(实测各 14.2 GB/s,不因第二张卡掉速) P2P 开(BIOS 开 IOMMU + 内核 iommu=pt)系统 / 内核 Ubuntu 24.04.5 / 7.0.0-38-generic ROCm / torch ROCm 7.2.3 / torch 2.12.1+rocm7.2(hip 7.2.53211) ComfyUI 0.39.0 跑法 自建 TP2 脚本:每卡装半宽模型,100 个行并行层自己做 int8( _int_mm),列并行保留 ck 算子,--use-ck-attention机器 B(N 卡单卡,标准路径):
项目 配置 CPU Ryzen 7 9700X(8C16T) 内存 92 GB GPU RTX 4080 SUPER 32G 驱动 / 内核 595.99.02 / 7.0.0-38-generic CUDA / torch CUDA 13.0 / torch 2.13.0+cu130 ComfyUI 0.39.0 跑法 上游 h3_comfy_benchmark.py,标准单卡路径,不加任何补丁两边用的是同一个 checkpoint 文件:
minimax_h3_ref2va_pruned_fp8_scaled.safetensors,20,958,205,608 字节,日期都一样。0x02 成绩
段 双 7900XTX(TP2) 单张 4080S 楼主(双 R9700,Radiance 原生) 预处理(VAE 编码 + Qwen3-VL-32B 条件) 141 s 38 s ~5 分钟 采样 20 步 438.3 s(20.4 → 22.8 s/步) 255.8 s(12.40 s/步) — VAE 解码 + 合成 33 s 12.0 s — 合计 636 s = 10 分 36 秒 312 s = 5 分 12 秒 15 分 35 秒 预处理这一段两台差了近 4 倍(141s vs 38s),跟楼主账上"预处理走单卡 PyTorch 路径"那个观察是同一件事,只是 N 卡那边明显更不吃这一项。
0x03 逐步曲线(这个差别挺有意思)
机器 A(双 XTX)20 步,单位秒:
23.05, 20.39, 20.58, 20.69, 20.84, 20.89, 21.12, 21.38, 21.56, 21.73, 21.86, 22.03, 22.11, 22.18, 22.29, 22.37, 22.49, 22.56, 22.64, 22.81首步之后单调上升,到第 20 步涨了 12%,不是随机抖动,是热/功耗漂移。
机器 B(4080S)20 步全在 12.399 ~ 12.408 之间,基本一条直线。
0x04 一个必须说清的事:同 seed 不跨后端复现
两台出来的不是同一个画面——两段成片对拍 PSNR 只有 15.6 dB。seed 一样、素材一样、checkpoint 一样,但采样路径的数值实现不同(我们 TP2 是自建 int8 行并行,N 卡是标准 fp8 路径),20 步下来就分叉了。
所以上面那张表只能比时间,不能比画质;两台各自的效果请各自看成片。
0x05 为什么单卡 4080S 反而快(推断,没逐项隔离)
按可能的贡献排序:
- FP8:checkpoint 是
fp8_scaled。Ada 有 FP8 Tensor Core,gfx1100 没有 FP8 硬件,只能反量化成 fp16/bf16 再算。 - TP 通信:我们每个 block 一次 all_reduce(100 个行并行层),走 PCIe x8/x8(各 14.2 GB/s)。单卡完全没有这笔开销。
- 主机差一档:3500X 6C6T 对 9700X 8C16T。
- 热漂移:XTX 这对 +12%,4080S 全程死平。
要坐实的话,下一步是在 8.147 上把 TP2 的 all_reduce 单独计时,再用同一份 int8 版 ref2va 跑一遍,把"FP8"和"通信"两项拆开。现在这版结论请当测量结果 + 未验证的解释看。
0x06 顺手踩到的两个坑,抄的人可以直接避开
第一个:VAE 解码 OOM,根因不是显存不够,是没带
--use-ck-attention。 24G 卡上解 832×480×148 帧会炸,PyTorch 只报了 4.87GB 但卡上只剩 30MB——VAE 解码器里的注意力块用朴素实现,256×256 的 tile 就是 6.5 万 token 的注意力矩阵,20GB 是它吃掉的。带上 ck-attention 之后解码 19.4 秒。我们试过小 tile(256→128)、时间块切小、按时间/空间切两半、MIOpen FIND_MODE、expandable_segments、强制/不强制全载入——全部无效,别浪费时间。第二个:跑过被 OOM 杀掉的 GPU 进程之后,amdgpu 会扣住主机内存不还。 我们这边连续几个解码进程被杀之后,空载 37GB 不在任何进程、不在缓存、不在 slab、不在 GTT 里,模型加载直接开始疯狂换页(302 秒还没起来)。
modprobe -r amdgpu的瞬间 MemFree 从 62.2GB 跳到 97.4GB,重新起就是 42 秒。双卡跑完 GPU 任务,起模型之前先看一眼MemAvailable,不够就把驱动卸了重载(前提是别让桌面会话占着卡,否则卸不掉)。 - FP8:checkpoint 是
-
@Enigma 提速的关键是合理的内存调度,我针对这个设计了一个新的针对MINIMAX H3的引擎,ComfyUI 自定义节点+IPC方式工作,内部集成了Open-H3-Regenerate-2K 和 SeedVR2的加速。目前vibe了一半,但手头上没有RDNA3的卡,如果后面咱们方便的话能不能在咱们的设备上测试一下?
-
-
-
@shawn-shen 7k prefill 吗?
@applejuice 8300pf,200de

-
-
@applejuice 8300pf,200de

@shawn-shen amd 卡完爆 nvidia 卡
-
@bunsei 大佬,今天我用radiance更新的ref2va模式测试r9700 TP2和朋友的一张5090对比,有点震惊了,速度竟然是5090的将近两倍,同样的素材包/分辨率/时常,这有点离谱了。我不知道是这引擎的功劳,还是卡的能力,但是这个结果确实有点意外了。而且双r9700用480p最多能生成14.38秒的长度,768p是13.67秒。5090只有10秒左右显存就占满了,再长要用卸载方案,时常应该会大增,我还没试。
但是目前raidance的生成质量感觉不如comfyui,有的时候会重复多个主体,有的时候会有重影,这类小问题不知道会不会修复完善,毕竟社区基础比comfyui弱的多 -
@bunsei 大佬,今天我用radiance更新的ref2va模式测试r9700 TP2和朋友的一张5090对比,有点震惊了,速度竟然是5090的将近两倍,同样的素材包/分辨率/时常,这有点离谱了。我不知道是这引擎的功劳,还是卡的能力,但是这个结果确实有点意外了。而且双r9700用480p最多能生成14.38秒的长度,768p是13.67秒。5090只有10秒左右显存就占满了,再长要用卸载方案,时常应该会大增,我还没试。
但是目前raidance的生成质量感觉不如comfyui,有的时候会重复多个主体,有的时候会有重影,这类小问题不知道会不会修复完善,毕竟社区基础比comfyui弱的多 -
@bunsei 大佬,今天我用radiance更新的ref2va模式测试r9700 TP2和朋友的一张5090对比,有点震惊了,速度竟然是5090的将近两倍,同样的素材包/分辨率/时常,这有点离谱了。我不知道是这引擎的功劳,还是卡的能力,但是这个结果确实有点意外了。而且双r9700用480p最多能生成14.38秒的长度,768p是13.67秒。5090只有10秒左右显存就占满了,再长要用卸载方案,时常应该会大增,我还没试。
但是目前raidance的生成质量感觉不如comfyui,有的时候会重复多个主体,有的时候会有重影,这类小问题不知道会不会修复完善,毕竟社区基础比comfyui弱的多 -
@hanber121 你让你的AI把加速LoRA去掉,使用官方的20步 +res_multistep+simple 再试试看?



