Skip to content

Latest commit

 

History

History
223 lines (161 loc) · 6.06 KB

README_zh.md

File metadata and controls

223 lines (161 loc) · 6.06 KB

ComfyUI-MiniMaxH3-MultiGPU

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 依赖。

云平台复现

启动

建议使用 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。

使用方法

  1. 将 GUI 工作流 拖入 ComfyUI。
  2. 找到 AMDMinimaxH3SequenceParallelLoader。
  3. 选择 MiniMax H3 diffusion checkpoint。
  4. 保持 weight_dtype=default。
  5. 如果启动时只暴露了两张卡,保持 devices=auto。
  6. 视频和音频继续使用官方 VAEDecode、VAEDecodeAudio。
  7. 第一次 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 的双卡流程:

  1. token 序列分成两半,逐 token 运算和 MLP 各自在本地执行。
  2. QKV 权重和 per-output-channel INT8 scale 永久分成每卡 28 heads。
  3. 本地 QKV 投影和 peer token 传输重叠执行。
  4. 每张卡为自己的 28 heads 计算完整序列 attention。
  5. 通过 head-to-sequence 交换,只接收本地 token 所需的另一半 heads。
  6. 每张卡对本地 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 之后的版本。

License

MIT