UniRL
Getting Started

First Run

Compose and launch a UniRL experiment recipe.

Start by composing a recipe before launching Ray work. --cfg job --resolve checks Hydra composition, override syntax, and interpolation/environment resolution. It does not instantiate runtime dataclasses or run trainer and cross-component validation.

python -m unirl.train_diffusion --config-name=diffusion/sd3/sd3_trainside --cfg job --resolve

Single Node

Use the generic single-node launcher when you want the scripts to prepare local Ray runtime defaults. The first argument is the recipe path below examples/ (<path-under-examples>, without .yaml):

bash examples/run_experiment_single_node.sh diffusion/sd3/sd3_trainside

The diffusion entrypoint is the default; select another with ENTRY:

ENTRY=train_ar      bash examples/run_experiment_single_node.sh ar/qwen_vl_grpo_geo3k_mc_4x8
ENTRY=train_sft     bash examples/run_experiment_single_node.sh sft/qwen3_sft
ENTRY=train_pe      bash examples/run_experiment_single_node.sh pe/pe_trainside_pickscore
ENTRY=train_agentic bash examples/run_experiment_single_node.sh deep_research/deep_research_search_judge

For a dry run:

DRY_RUN=1 bash examples/run_experiment_single_node.sh diffusion/sd3/sd3_trainside

Async AR and diffusion use dedicated train/rollout slabs:

ENTRY=train_async_ar bash examples/run_experiment_single_node.sh \
  ar/qwen3_grpo_4b_base_dapo_sglang_async
ENTRY=train_async_diffusion bash examples/run_experiment_single_node.sh \
  diffusion/bagel/bagel_vllmomni_async

Multi Node

Use the role-aware launcher for multinode jobs:

bash examples/run_experiment_multinode.sh diffusion/sd3/sd3_sglang_rollout_colocate

Direct Hydra Invocation

You can invoke an entrypoint directly and override fields inline:

python -m unirl.train_diffusion \
  --config-name=diffusion/sd3/sd3_trainside \
  num_devices=8

Hydra override precedence is:

CLI Hydra override > launcher env var > YAML default

Sample Prompts

Committed prompt lists live under datasets/, for example datasets/pickscore/train.txt (one prompt per line) and datasets/pickscore/test.txt. Recipes point their data_source at these by default.

For real runs, use the environment interpolation or Hydra field exposed by the selected recipe. For example, the WAN recipe's prompt file is:

bash examples/run_experiment_single_node.sh diffusion/wan21/wan21_t2v \
  data_source.args.run.data_path=/abs/path/train.json

On this page