AutoMultiGPU - Automatic Engine (Zero-OOM Governor)
Let the pack decide how to split your model across GPUs
- MODEL
- CLIP
- VAE
- active_strategy
Of the three engines in ComfyUI-AutoMultiGPU, this is the one that picks its own strategy. The Automatic Engine probes the live free VRAM on your GPUs, guesses how heavy your model is, and then hands the actual loading off to either the pack's PyTorch engine (device split) or its DisTorch engine (layer sharding). It's the "just make it fit" button - plus a string output that tells you what it decided, which is the part I actually like.
Where you'd reach for it: you have a big model, you have two GPUs, and you don't want to think about whether it should be sharded or split. Let the governor decide. The trade is that a smart decision is only as good as its heuristic, and this one is fairly blunt - see below.
How it works
The decision logic is readable right in the source. It reads free VRAM per card, then:
- If you set
force_engine, it obeys that (Force DisTorch Sharding / Force Native PyTorch). - Otherwise it picks DisTorch sharding if GPU0 has less than
10GB + vram_headroom_gbfree, or if the model looks like a heavy video model (filename or type matcheswan,minimax,hunyuan,cosmos,cogvideo). - Otherwise it picks the PyTorch device split (UNet on GPU0, encoders and VAE on GPU1).
vram_headroom_gb (default 3, range 1–8) is the safety buffer you're reserving - the single knob that shifts the threshold. Then it instantiates the chosen engine and returns its MODEL, CLIP, and VAE plus active_strategy, a STRING like Zero-OOM Engine: DisTorch Sharding | GPU0: 15.4GB free | .... Wire that string into a Show Text node and you get a live status readout. That's the best feature here, honestly - most "auto" loaders just silently pick something.
The inputs that matter
The full stack: unet_name, clip_name1, clip_name2, vae_name, model_type (37-option architecture picker, auto default), and vram_headroom_gb. Optional weight_dtype (fp8 variants, fp16, bf16, fp32) and force_engine.
Outputs: MODEL, CLIP, VAE, plus active_strategy.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/nexusfinancial-dev/ComfyUI-AutoMultiGPU.git
cd ComfyUI-AutoMultiGPU
pip install -r requirements.txt
Or via ComfyUI Manager (search ComfyUI-AutoMultiGPU). Real dependencies to be aware of: GGUF files need ComfyUI-GGUF installed, and if it chooses DisTorch sharding, the actual layer split is delegated to ComfyUI-MultiGPU's DisTorch2 patcher - which this README never mentions. Without that pack, the DisTorch path quietly degrades to the same device-split loading.
Where people get burned
The README's "mathematical impossibility of CUDA Out of Memory errors" is marketing, not physics. The governor only chooses a strategy; it doesn't shrink your model. If both cards together still can't hold the thing, you'll OOM regardless. And note the bias: any video-looking model name pushes it straight to sharding, which on a consumer board without the PCIe bandwidth to back it up can be slower than you'd like. Watch active_strategy on your first run - if it's sharding something that doesn't need sharding, set force_engine to PyTorch and move on.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| unet_name | COMBO | Select UNet / DiT model (.safetensors or .gguf) | |
| clip_name1 | COMBO | none | First Text Encoder (.safetensors or .gguf) |
| clip_name2 | COMBO | none | Optional Second Text Encoder |
| vae_name | COMBO | pixel_space | VAE model |
| model_type | COMBO | auto | Architecture model type |
| vram_headroom_gb | FLOAT | 3.01–8 | Minimum safety buffer in GB to guarantee Zero-OOM |
| weight_dtypeopt | COMBO | default | 7 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2, float16, bfloat16, +1 |
| force_engineopt | COMBO | Auto (Smart Decision) | 3 options: Auto (Smart Decision), Force DisTorch Sharding, Force Native PyTorch |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |
| active_strategy | STRING | — |