Reproducible notes and launch tooling for running the originally CUDA-oriented MiniMax H3 audio-video model on one or two Intel Arc Pro B70 GPUs.
This repository documents a working Linux port. We validated one-card ComfyUI inference, two independent one-card workers, and one SGLang tensor-parallel generation split across two B70s. It contains no model weights, prompts from production work, or generated media.
Practical recommendation: I found that 8 steps at 1344x768 for about five seconds is acceptable for quick drafts and candidate search, but 20-step, dual-B70 TP2 generation at the same resolution and duration should be used for higher-quality final generations.
Two 31.89 GiB B70s, 59 GiB usable host RAM, 24 fps, 124 output frames. Times are wall-clock measurements from August 8–9, 2026.
| Mode | Workload | Result | Best use |
|---|---|---|---|
| One B70, ComfyUI cached | 1344x768, 5.17 s, 8 steps | 464.27 s warm | Simple one-card drafts |
| Two independent B70 workers | Two 1344x768, 5.17 s, 8-step jobs | 696.95 s for both | Parallel candidate search |
| Two B70s, SGLang TP2 | 1344x768, 5.17 s, 8 steps | 329.61 s | Fastest single draft |
| Two B70s, SGLang TP2 | 1344x768, 5.17 s, 20 steps | 670.61 s | Final generation |
The independent pair delivered about 1.70x the measured serial baseline for two clips. The TP2 and ComfyUI numbers are not a pure topology comparison: they use different quantized checkpoints and sampling implementations.
See the benchmark report for methodology, memory minima, quality observations, and failed boundaries.
- Start with one B70: use the ComfyUI quickstart. It uses the official ComfyUI H3 nodes and the smaller official quantized model pack.
- Use both cards for throughput: start two isolated ComfyUI workers. Each process sees one physical device and runs a separate request.
- Use both cards for one clip: use the advanced SGLang TP2 path. This is the fastest measured single-generation route, but it requires local checkpoint conversion and the included SGLang patch.
Two cards do not become one transparent 64 GiB VRAM pool. Independent workers duplicate model state. TP2 explicitly shards supported layers and still needs careful component staging because activations and some components remain replicated.
| Path | GPUs | Host RAM | Working disk space |
|---|---|---|---|
| ComfyUI | One 32 GiB B70 | 64 GiB recommended | About 65 GiB |
| Independent workers | Two 32 GiB B70s | 64 GiB minimum for the tested low-VRAM profile | About 65 GiB |
| SGLang TP2 | Two 32 GiB B70s | 64 GiB plus swap | At least 220 GiB during conversion |
The tested host used Linux, Python 3.12, 59 GiB usable RAM, and 32 GiB swap. Start with the ComfyUI path unless you specifically need one request sharded across both cards.
Install an Intel XPU build of PyTorch in your environment, then run:
python scripts/xpu_preflight.py
ONEAPI_DEVICE_SELECTOR=level_zero:0 python scripts/xpu_preflight.py --stress
ONEAPI_DEVICE_SELECTOR=level_zero:1 python scripts/xpu_preflight.py --stressFor two-card TP2, also validate XCCL before loading H3:
python scripts/xccl_smoke.py --timeout 45A healthy result reports two matching B70 devices and validates the numerical
result of both all_reduce and all_to_all_single.
docs/ setup, architecture, benchmarks, and troubleshooting
examples/ minimal ComfyUI and SGLang API clients
patches/ tested SGLang XPU/H3 compatibility patch
results/ sanitized machine-readable measurements (no media)
scripts/ preflight, downloads, conversion, and launchers
tests/ offline safety and schema checks
The useful engineering work was not replacing cuda with xpu. The stable
configuration required:
- Intel runtime and PyTorch wheels from the same SYCL generation.
- Per-process Level Zero isolation for one-card ComfyUI workers.
- A tensor-parallel-safe INT4 Qwen3-VL text encoder plus FP8 DiT for TP2.
- Stage-by-stage component residency so a 59 GiB host never holds every large component and activation at once.
- Torch SDPA in place of CUDA-only attention kernels.
- Host-memory guards, explicit XPU synchronization, and kernel-log checks.
The exact tested software is recorded in environment.json.
- Five requested seconds was the safe TP2 boundary on this 59 GiB host. An eight-second TP2 request fell to 1.3 GiB available RAM and was aborted.
- One low-VRAM ComfyUI worker completed an eight-second clip, but took 1,132.62 seconds and relied heavily on shared/unified memory.
- Long 20-step TP2 sessions accumulated paging pressure. Restart the idle TP2 service after every two final-quality shots on a 64 GiB-class host.
- Do not terminate active XPU work unless necessary; forced termination can
cause
xecompute-engine resets. - This repository does not claim that these are universal settings or a topology-only benchmark.
Model weights and generated media are not included. Download MiniMax H3 from its official source and review the upstream terms for your location and use.
Official sources:
Original code and documentation in this repository are licensed under Apache-2.0. Upstream-derived patch hunks remain under SGLang's Apache-2.0 license.