Unified Parallel Sampler (Advance)
Raylight's everything-at-once sampler
- ray_actors
- noise_list
- positive
- negative
- latent_image
- latent
- ray_actors
Here's the node that made the README's changelog claim "now all parallel types can be used at the same time." Unified Parallel Sampler (Advance) is Raylight's flagship: one sampler that can run USP (sequence parallel), FSDP (weight sharding), CFG parallelism, and Data Parallel (multiple prompts/seeds per GPU) simultaneously - and its inputs are lists, so you can give each data-parallel group its own prompt and seed. If you've got more than two GPUs and want every one of them busy doing something different, this is the node.
Raylight is Komikndr's multi-GPU pack for ComfyUI - "why buy a 5090 when two 5070s." The Unified sampler is its crown piece, and it's the one the README's "Unified Parallel" mode diagram points at. You still configure the mix in Ray Init Actor (Ulysses degree, ring degree, CFG degree, DP degree, FSDP toggle); this node just runs whatever that config describes.
How it works
Mechanically it's a KSampler Advanced that fans out to every worker with a common_ksampler remote call - but the inputs are lists. It reads each worker's data-parallel group info, then normalizes your positive, negative, latent_image, and noise_list against the DP degree so each group gets the right item. The noise_list input is the one that feels alien at first: it's a list of seeds, one per DP group, produced by Raylight's "Data Parallel Noise List" node. One item = same seed everywhere; several items = each group generates something different.
The rest of the inputs are the familiar KSampler Advanced set - add_noise, steps, cfg, sampler_name, scheduler, start_at_step, end_at_step, return_with_leftover_noise, denoise - plus ray_actors. Outputs are latent (as a list, one per DP group - pick one with a list-index node if you only want a single result) and the ray_actors passthrough for your decoder.
When to reach for it
- More GPUs than you need for pure USP, and you want the leftovers doing DP with different prompts - this is the only sampler that handles that in one node.
- You want to combine, say, Ulysses 2 + CFG 2 on 4 GPUs:
4 = 2 × 2, and the Unified sampler validates that your parallel config multiplies out to your worker count. - DP with per-GPU prompts - build the conditioning lists with "Data Parallel Conditioning List."
If you're only doing plain sequence parallel with a single seed, the simpler XFuser KSampler (Advanced) does the job with less ceremony.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/komikndr/raylight
cd raylight
<your_python> -m pip install -r requirements.txt
or ComfyUI Manager → search raylight. The list inputs come from Raylight's own DP nodes, so nothing extra to install.
Common issues
The trap is the config math: the sampler validates the parallel setup, and if Ulysses × Ring × CFG × DP doesn't equal your GPU count, it refuses to run with a loud error. That's a feature - read the error and fix the degrees in Ray Init Actor. Second, the latent output is a list; wire a list-extraction node or you'll feed a list into a decoder expecting a single latent. And as with all Raylight nodes, the model chain must come from the loader's RAY_ACTORS, not the init's RAY_ACTORS_INIT.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| add_noise | COMBO | 2 options: enable, disable | |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| ray_actors | RAY_ACTORS | Ray Actor to submit the model into | |
| noise_list | NOISE | List of noise seeds for each xFuser data-parallel group. Use one item to share the same seed across all groups. | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| start_at_step | INT | 00–10000 | — |
| end_at_step | INT | 100000–10000 | — |
| return_with_leftover_noise | COMBO | 2 options: disable, enable | |
| denoise | FLOAT | 1.000–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| ray_actors | RAY_ACTORS | — |