When To Use
Use this skill when a user wants to scale an Isaac Lab RL job across several GPUs or nodes, or when a distributed run hangs, deadlocks, or fails inside NCCL.
Do not use this skill for single-GPU training setup, framework selection, or agent config wiring. Use
isaaclab-training-rl-agents for those. Use isaaclab-debugging-rl-training when the job runs to
completion but the reward curves or metrics look wrong.
Workflow
- Confirm the job trains correctly on a single GPU first. Do not debug a distributed failure before the same task, backend, and preset combination is known to work with one rank.
- Launch with
uv run isaaclab train_multigpu, which wrapstorchrunand injects--distributedfor you. Pass all training arguments exactly as foruv run isaaclab train. - Select the rank count with
--num_gpus. The defaultgpuuses every visible device. Use--dry_runto print the resolved launcher command without running it. - For skrl with JAX,
--num_gpusmust be an integer and the torchrun-only options are rejected. Use--coordinator_addressinstead. - Expect console output from local rank 0 on each node only. The launcher filters the other ranks by
default because each one repeats the same startup and warning output. Use
--log_all_rankswhen ranks may disagree with each other, or--tee 3 --log_dir <dir>to keep per-rank logs on disk. - Separate a launcher problem from a communication problem before changing training code. A hang with all participating GPUs at 100% utilization and no error is a NCCL stall, not a task bug.
- When a run hangs, reproduce it at a different world size and with the standalone NCCL probe in Reference before touching Isaac Lab code. World size 2 is the most common failure point on systems without NVLink.
- Apply NCCL environment workarounds one at a time, and confirm each one against the probe before applying it to training. Record which variable was needed and why.
- Treat NCCL workarounds as machine-specific. Do not bake them into committed configs or scripts without noting the affected hardware.
- For multi-node jobs, establish rendezvous with
--nnodes,--node_rank, and either--master_addr/--master_portor the--rdzv_*options, and verify a two-node job before scaling further.
Validation
Use this checklist:
- Confirm the same command trains on a single GPU.
- Confirm every rank reaches parameter synchronization in the logs, not just rank 0.
- Confirm the run reports a training time and exits with status 0.
- Confirm scaling changes throughput rather than silently running one rank.
- When a NCCL workaround is applied, confirm the run also fails without it, so the workaround is known to be the cause of the fix.
For skill changes, run:
uv run --no-project python tools/skills/cli.py check
Maintenance
Keep this skill synchronized with docs/source/features/multi_gpu.rst,
docs/source/refs/troubleshooting.rst, and the launcher at
scripts/reinforcement_learning/train_multigpu.py. The NCCL workaround list is maintained in the
multi-GPU feature doc. Add new workarounds there first and keep this skill as a router.