English | 中文
面向 AMD ROCm 的 MiniMax H3 ComfyUI 多 GPU 推理扩展。
当前版本专门优化并验证了双 GPU。它把同一个视频任务中的 H3 Transformer 序列和 attention heads 分配到两张 GPU,不增加 CFG 分支、不减少采样步数、 不跳过 Transformer block,也不使用近似缓存。
设计思路参考公开的 DeepSpeed Ulysses 论文。代码基于 ComfyUI 官方 MiniMax H3 模型结构独立实现,没有复制其他 H3 多卡插件代码。
测试日期:2026-09-08。
- 2 × AMD Radeon AI PRO R9700 32 GB
- GPU 之间为 PCIe,两跳连接
- ROCm 7.2.4
- PyTorch 2.10.0
- ComfyUI 0.30.0
- MiniMax H3 INT8 ConvRot
- 864 × 480,124 帧,20 steps
res_multistep+BasicGuider
| 模式 | 去噪时间 | 端到端时间 |
|---|---|---|
| 单卡 | 约 240.6 秒 | 262.34 秒 |
| 双卡 | 约 129.0 秒 | 149.16 秒 |
| 加速比 | 1.87x | 1.76x |
连续三次双卡热运行:
150.170 秒
148.161 秒
149.160 秒
中位数为 149.160 秒,相对同版本单卡降低 43.1% 延迟。
rank 1 加载裁剪和分片后的模型时约占 15.46 GiB。连续生成 124 帧视频时, 两张卡均保持在约 26 GiB 以下。
表格不包含冷启动。首次加载 32B 文本编码器和两份 DiT 在测试机上可能超过 20 分钟。
- Linux
- ROCm 可见的两张 AMD GPU
- 带 RCCL 的 PyTorch
- ComfyUI 0.30.0
- 以下 MiniMax H3 模型:
ComfyUI/models/
├── diffusion_models/
│ └── minimax_h3_fl2va_pruned_int8_convrot.safetensors
├── text_encoders/
│ └── qwen3vl_32b_minimax_h3_int8_convrot.safetensors
└── vae/
├── minimax_h3_video_vae_fp16.safetensors
└── minimax_h3_audio_vae_fp32.safetensors
目前公开节点只开放经过完整模型验证的双卡模式。
cd ComfyUI/custom_nodes
git clone https://github.com/Kaihui-AMD/ComfyUI-MiniMaxH3-MultiGPU.git除可正常运行 MiniMax H3 的 ComfyUI 环境外,不需要额外 Python 依赖。
- AMD GPU 免费云平台: Kaihui-AMD/AMD_YES_Cloud
- RC 云平台复现教程: minimax-h3-multigpu.md
建议使用 GPU UUID,并且只暴露目标两张卡:
env -u HIP_VISIBLE_DEVICES -u CUDA_VISIBLE_DEVICES \
ROCR_VISIBLE_DEVICES=GPU-UUID-0,GPU-UUID-1 \
python main.py \
--listen 0.0.0.0 \
--port 8188 \
--highvram不要同时设置互相冲突的 HIP_VISIBLE_DEVICES、ROCR_VISIBLE_DEVICES 和
CUDA_VISIBLE_DEVICES,否则两个 rank 可能被映射到同一张物理 GPU。
- 将 GUI 工作流 拖入 ComfyUI。
- 找到
AMDMinimaxH3SequenceParallelLoader。 - 选择 MiniMax H3 diffusion checkpoint。
- 保持
weight_dtype=default。 - 如果启动时只暴露了两张卡,保持
devices=auto。 - 视频和音频继续使用官方
VAEDecode、VAEDecodeAudio。 - 第一次 Queue 会加载两份模型,之后会复用常驻权重。
节点参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
unet_name |
必填 | MiniMax H3 diffusion checkpoint |
weight_dtype |
default |
与 ComfyUI 官方加载器一致 |
devices |
auto |
两张物理 GPU 的序号/UUID,或读取可见设备环境变量 |
port |
29541 |
本机分布式 rendezvous 端口 |
API 调用可使用 API 工作流。
MiniMaxH3ImageToVideo 的 length 是 24 FPS 帧数,并会对齐到 17n + 5:
| 目标时长 | length |
|---|---|
| 约 1 秒 | 22 |
| 约 3 秒 | 73 |
| 约 5 秒 | 124 |
| 约 8 秒 | 192 |
| 约 10 秒 | 243 |
CreateVideo.fps 保持 24,避免音画不同步。
MiniMax H3 把文本、视觉条件、音频和视频 token 打包成一条序列,并使用 56-head DiT 统一处理。
每个 Transformer block 的双卡流程:
- token 序列分成两半,逐 token 运算和 MLP 各自在本地执行。
- QKV 权重和 per-output-channel INT8 scale 永久分成每卡 28 heads。
- 本地 QKV 投影和 peer token 传输重叠执行。
- 每张卡为自己的 28 heads 计算完整序列 attention。
- 通过 head-to-sequence 交换,只接收本地 token 所需的另一半 heads。
- 每张卡对本地 token 执行原始完整
out_proj。
rank 0 负责输入打包、文本 refinement 和最终视频/音频输出层;rank 1 只保留 50 个主 Transformer blocks。
完整保留 out_proj 对 INT8 ConvRot 很重要。若在动态 activation quantization
之前把它按列拆分,两张卡会分别计算不同的逐行 scale,结果不再数值等价。
节点默认预留 8 GiB 作为序列并行激活空间,确保去噪前卸载文本编码器或 VAE:
AMD_H3_SP_ACTIVATION_RESERVE_GB=8每个新 prompt 开始时,rank 1 会释放上一轮残留的 allocator cache,但保留模型 权重。
普通单元测试:
python -m pytest -q双卡 RCCL 传输测试:
torchrun --standalone --nproc_per_node=2 tests/distributed_smoke.py真实 INT8 ConvRot attention parity:
python tests/quantized_attention_parity.py \
--comfy-root /path/to/ComfyUI \
--model /path/to/minimax_h3_fl2va_pruned_int8_convrot.safetensors实测结果:
max_abs=0
mean_abs=0
max_rel=0
ComfyUI 启动后执行:
python scripts/benchmark.py \
--server http://127.0.0.1:8188 \
--workflow examples/workflow_api_2gpu.json \
--length 124 \
--steps 20 \
--runs 3第一轮包含模型加载时间,稳态性能应取后续运行。
- 目前只支持并验证两张 GPU。
- 依赖 NCCL/RCCL,不支持原生 Windows。
- 视频和音频 VAE 仍在主卡执行。
- 尚未验证 ComfyUI 0.30.0 之后的版本。
MIT