Nodes/ComfyUI AutoMultiGPU Engine/AutoMultiGPU - Automatic Engine (Zero-OOM Governor)
ComfyUI Node

AutoMultiGPU - Automatic Engine (Zero-OOM Governor)

Let the pack decide how to split your model across GPUs

By nexusfinancial-dev·Created 25 days ago·Updated 24 days ago· 6
AutoMultiGPU - Automatic Engine (Zero-OOM Governor)
    • MODEL
    • CLIP
    • VAE
    • active_strategy
    unet_name
    clip_name1none
    clip_name2none
    vae_namepixel_space
    model_typeauto
    vram_headroom_gb3.0
    weight_dtypedefault
    force_engineAuto (Smart Decision)

    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_gb free, or if the model looks like a heavy video model (filename or type matches wan, 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.

    CategoryAutoMultiGPU/Engines

    Inputs (8)

    NameTypeDefaultDescription
    unet_nameCOMBOSelect UNet / DiT model (.safetensors or .gguf)
    clip_name1COMBOnoneFirst Text Encoder (.safetensors or .gguf)
    clip_name2COMBOnoneOptional Second Text Encoder
    vae_nameCOMBOpixel_spaceVAE model
    model_typeCOMBOautoArchitecture model type
    vram_headroom_gbFLOAT3.01–8Minimum safety buffer in GB to guarantee Zero-OOM
    weight_dtypeoptCOMBOdefault7 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2, float16, bfloat16, +1
    force_engineoptCOMBOAuto (Smart Decision)3 options: Auto (Smart Decision), Force DisTorch Sharding, Force Native PyTorch

    Outputs (4)

    NameTypeDescription
    MODELMODEL
    CLIPCLIP
    VAEVAE
    active_strategySTRING