Nodes/multiGPU Upscaler/multiGPU_upscaler: Multi-GPU Batch Parallel
ComfyUI Node

multiGPU_upscaler: Multi-GPU Batch Parallel

Two GPUs, one idle while the other upscales? This node splits the batch and uses both

By alludus·Created 10 months ago·Updated 10 months ago· 1
multiGPU_upscaler: Multi-GPU Batch Parallel
  • upscale_model
  • image
  • IMAGE
device_listauto
auto_max_devices2
primary_share0.50
tile_size512
min_tile_size128
overlap32

Here's the situation this node exists for: you generate a batch of eight SDXL images, hit the upscale step, and one card is suddenly doing all the work while the other sits idle. ComfyUI keeps the whole pipeline on one GPU by default, so your second card is only a spectator during the slow part. multiGPU_upscaler: Multi-GPU Batch Parallel is the main act of the multiGPU Upscaler pack, and its whole job is to take that upscale pass and spread it across two - or up to ten - NVIDIA GPUs.

Let's be clear about which job it's doing. This is the "more pixels" kind of upscaling, not the "more detail" kind. It's the ESRGAN-family path - RealESRGAN_4xplus, 4x-UltraSharp, Remacri - fast, deterministic, incapable of hallucinating detail that wasn't there. What it adds on top of the stock Upscale Image (using Model) node is parallelism: when your batch is big enough, your upscale runs on multiple cards at once and the results come back in the same order.

How it works

On execution the node picks its GPUs, splits the batch, and fires a worker thread per card. Each worker instantiates its own copy of the upscale model on its GPU and runs ComfyUI's own tiled_scale with OOM-safe tiling - if a card runs out of VRAM mid-run, the tile size halves automatically and it retries, down to the floor you set.

  • Device selection. device_list defaults to "auto", which sorts your cards by free VRAM and takes the top auto_max_devices (default 2). Or pin it explicitly with "cuda:0,cuda:1" or "0,1,2".
  • Batch split. The first (best) GPU gets roughly primary_share of the images (default 0.5); the rest are shared across the remaining cards.
  • Merge. Outputs are concatenated back in the original batch order.

It's honest about when it can't help: batch smaller than 2, no CUDA, or a single selected GPU all silently fall back to the single-GPU tiled path. You're not going to break anything by feeding it one image - it just won't parallelize.

The inputs that matter

  • upscale_model - an UPSCALE_MODEL from the pack's own loader or ComfyUI's standard Load Upscale Model. Both work; they output the same type.
  • image - your batched image tensor.
  • device_list / auto_max_devices - leave on auto unless you have a reason to pin specific cards.
  • primary_share - if one card is stronger or has more free VRAM, nudge this up toward 0.7–0.8 so it pulls its weight.
  • tile_size (512), min_tile_size (128), overlap (32) - the tuning knobs you only touch when you OOM: drop tile_size to 256 first.

Output: a single IMAGE tensor, batch order preserved, wired straight into Preview, Save, or whatever you have after the upscale.

The honest verdict

The author's own numbers on dual RTX 3060s - SDXL generation + 4x RealESRGAN to 4096px, batch of 8 - show about 10–14% wall-clock speedup over single-GPU. Real, but modest. This pays off only if you routinely upscale batches of four or more on a multi-GPU box. If you've got the hardware and do that, it's free speed and a no-brainer. If you're on one GPU, skip it and use the pack's Single GPU Tiled node instead.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/alludus/ComfyUI-multiGPU-upscaler

Then restart ComfyUI. Or install via ComfyUI Manager by searching multiGPU Upscaler. No requirements.txt in the repo - the only real deps are spandrel and typing-extensions, and spandrel already ships with ComfyUI, so there's usually nothing extra to install. Models are not bundled: drop a RealESRGAN .pth into ComfyUI/models/upscale_models.

Gotchas

NVIDIA only - this leans on CUDA for device management, so AMD users get the single-GPU fallback at best. And note the failure mode: if any worker thread errors or OOMs even at the minimum tile, the whole thing falls back to re-running the full upscale on one card. That can cost more than multi-GPU ever saved. If upscales feel slower than they should, watch the ComfyUI console for [multiGPU] lines - the node logs which path it actually took.

CategorymultiGPU_upscaler

Inputs (8)

NameTypeDefaultDescription
upscale_modelUPSCALE_MODEL
imageIMAGE
device_listSTRINGauto
auto_max_devicesINT21–10
primary_shareFLOAT0.500.1–0.9
tile_sizeINT51264–2048
min_tile_sizeINT12832–1024
overlapINT320–256

Outputs (1)

NameTypeDescription
IMAGEIMAGE