-
-
@fcys 能跑通那就牛逼了,这两个卡就是同一张卡,只是显存区别。你48G不需要TP吧,那就是说原理上是通的,我看你这效果也不错啊。双卡XTX主要是为了高分辨率和时长突破,处理一些特殊情况,平时分开跑,24G能跑还不错的分辨率。
如果每步耗时快这么多,其他部分是可以优化的,最终可以做到很不错的效果。这个和显卡架构无关,可能要改软件。
@terry 需要配合内存调度,才能补上单卡 24G 的短板。
在本次测试里,通过多次实验发现,锁定主机内存能在不拖慢速度的前提下提高分辨率和时长。
把部分 DiT 权重放在锁定的主机内存里,算当前层的同时异步搬运下一层。视频序列很长,1MP、226 帧大约有 6.7 万个 token,每层的计算时间远长于搬运时间,所以搬运基本被计算掩盖。
这次在 R9700 上实测,每步搬十几 GB,步时只增加 1–4%。权重腾出来的显存可以留给激活,而分辨率和时长受限的正是激活,所以能跑的规模就上去了。我把每卡主机池从 12G 加到 20G 后,双卡跑通了 1920×1088、158 帧,1MP 的帧数上限也从 260 提到 328,没有换显卡。
GPU 只保留正在计算的 2–3 层,再加上激活分块。XTX 的算力比 R9700 低,每层算得更久,所以内存的搬运反而更容易被隐藏,这套方法理论上更适合 XTX。
至于每步速度,还要靠 gfx11 的注意力内核来优化,这部分和架构有关。
-
@terry 需要配合内存调度,才能补上单卡 24G 的短板。
在本次测试里,通过多次实验发现,锁定主机内存能在不拖慢速度的前提下提高分辨率和时长。
把部分 DiT 权重放在锁定的主机内存里,算当前层的同时异步搬运下一层。视频序列很长,1MP、226 帧大约有 6.7 万个 token,每层的计算时间远长于搬运时间,所以搬运基本被计算掩盖。
这次在 R9700 上实测,每步搬十几 GB,步时只增加 1–4%。权重腾出来的显存可以留给激活,而分辨率和时长受限的正是激活,所以能跑的规模就上去了。我把每卡主机池从 12G 加到 20G 后,双卡跑通了 1920×1088、158 帧,1MP 的帧数上限也从 260 提到 328,没有换显卡。
GPU 只保留正在计算的 2–3 层,再加上激活分块。XTX 的算力比 R9700 低,每层算得更久,所以内存的搬运反而更容易被隐藏,这套方法理论上更适合 XTX。
至于每步速度,还要靠 gfx11 的注意力内核来优化,这部分和架构有关。
-
@Bunsei 它的测试过程,峰值显存24G是安全的,到时候让AI Agent也参考你的意见合理调度下,问题应该不大。就是不知道对主板PCIE,内存带宽的要求如何,是否要上DDR4/DDR5平台,DDR3是否可行。因为XTX这一代是PCIE4的,X99平台是否可行有待验证。内存带宽肯定不是问题,问题在PCIE,需要确认,我估计问题不大。
XTX算力和带宽都比R9700强,你搞反了。
-
@fcys 能跑通那就牛逼了,这两个卡就是同一张卡,只是显存区别。你48G不需要TP吧,那就是说原理上是通的,我看你这效果也不错啊。双卡XTX主要是为了高分辨率和时长突破,处理一些特殊情况,平时分开跑,24G能跑还不错的分辨率。
如果每步耗时快这么多,其他部分是可以优化的,最终可以做到很不错的效果。这个和显卡架构无关,可能要改软件。
-
-
-
-
-
-
-
@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的卡,如果后面咱们方便的话能不能在咱们的设备上测试一下?
-

