配置
实验配方
分桶的 examples/ 目录树下的 recipe,以及每个入口如何选择 recipe。
recipe 是 examples/ 下按训练域分桶的自包含 YAML 文件(diffusion/、vlm/、llm/、pe/、unified_model/)。每个都是 model、algorithm、rollout engine、placement、reward、sync 和 batch geometry 的 source of truth。用 --config-name=<domain>/<recipe>(不含 .yaml)选择。
每个领域的入口
recipe 所属家族决定用哪个入口运行:
| 入口 | bucket | recipe 家族 |
|---|---|---|
python -m unirl.train_diffusion | diffusion/ | sd3_*、qwen_image_*、flux2_klein_*、wan21_*、wan22_*、hunyuan_video* |
python -m unirl.train_vlm | vlm/、llm/ | qwen_vl_argrpo_*、qwen3_ar_drpo_* |
python -m unirl.train_pe | pe/ | pe_* |
python -m unirl.train_unified_model | unified_model/ | hi3_* |
维护中的家族
| 家族 | recipe |
|---|---|
| SD3(GRPO) | sd3_trainside、sd3_trainside_tq_mooncake、sd3_dancegrpo、sd3_mixgrpo |
| SD3 NFT | sd3_nft、sd3_nft_reward_service、sd3_nft_sglang |
| SD3 Flow-DPPO | sd3_flowdppo、sd3_flowdppo_vllmomni |
| SD3 SGLang | sd3_sglang_native_colocate、sd3_sglang_replay_colocate、sd3_sglang_full_nccl_separate、sd3_sglang_full_tensor、sd3_sglang_lora_separate |
| SD3 vLLM-Omni | sd3_vllmomni、sd3_vllmomni_full_ipc、sd3_vllmomni_full_nccl_separate、sd3_vllmomni_full_tensor、sd3_vllmomni_lora_separate |
| Qwen-Image | qwen_image_trainside、qwen_image_dancegrpo、qwen_image_mixgrpo、qwen_image_nft |
| Flux.2-Klein | flux2_klein_trainside、flux2_klein_sglang |
| WAN 2.1 | wan21_t2v、wan21_t2v_dancegrpo、wan21_t2v_mixgrpo、wan21_i2v |
| WAN 2.2 | wan22_t2v_14b、wan22_t2v_14b_dancegrpo、wan22_t2v_14b_mixgrpo、wan22_i2v |
| HunyuanVideo | hunyuan_video_t2v_trainside、hunyuan_video15_t2v_dancegrpo_trainside、hunyuan_video15_t2v_vllmomni_nccl_separate |
| HunyuanImage3 | hi3_vllmomni |
| Qwen-VL ARGRPO(VLM) | qwen_vl_argrpo_geo3k_mc_4x8、qwen_vl_argrpo_geo3k_mc_4x8_lora、qwen_vl_argrpo_geo3k_mc_sglang_4x8、qwen_vl_argrpo_geo3k_mc_sglang_4x8_lora |
| Qwen3 DRPO(LLM) | qwen3_ar_drpo_4b_base_dpao_sglang |
| PE(prompt enhancer,AR + diffusion) | pe_trainside_pickscore、pe_sglang_full_pickscore、pe_sglang_full_wise、pe_sglang_lora_pickscore |
选择 Recipe
python -m unirl.train_diffusion --config-name=diffusion/sd3_trainside启动器传入同样的 bucket 化 recipe 名(ENTRY 选择非 diffusion 入口):
bash examples/run_experiment_single_node.sh diffusion/sd3_trainside
ENTRY=train_vlm bash examples/run_experiment_single_node.sh vlm/qwen_vl_argrpo_geo3k_mc_4x8
bash examples/run_experiment_multinode_taiji.sh diffusion/sd3_sglang_native_colocate如何选择 Recipe
当任务没有指定具体 recipe 时,按此顺序决定:
- 先选模态和模型:图像用 SD3 或 Qwen-Image;视频用 WAN 2.1 / 2.2;AR + diffusion 混合用 HunyuanImage3;VLM / LLM 用 Qwen-VL / Qwen3;prompt-enhancer 用 PE。
- 再选 rollout topology:
trainside是 direct sampling;SGLang/vLLM-Omni 是 dedicated rollout;colocate表示 train 和 rollout 共享 GPU bundle(相对separate)。 - 再选算法:GRPO / DanceGRPO / MixGRPO 是 on-policy ratio loss,Flow-DPPO 是 KL-masked policy optimization,NFT 是 off-policy forward-process training,DRPO 用于 AR 文本。
- 最后按硬件选择如
4x8等变体。 - 启动 Ray 作业前先做 compose check。
新增 Recipe
- 从最接近的
examples/<domain>/<recipe>.yaml复制。 - 把 model、reward、rollout engine、backend、stack、sync、placement、batch geometry 放在 YAML 中,每个用
_target_实例化。 - 只把路径和 logging identity 这类部署相关值放到环境变量插值中。
- 运行
python -m unirl.train_diffusion --config-name=<domain>/<recipe> --cfg job --resolve。 - 把该 recipe 补到本页。