nemo-rl/sft, dpo, grpo, grpo-lora, ppo, rm, distillation, maxrl, opsd.
Observability is platform, which means two things you do not have to do: pass
--observability-url, and call starforge.report yourself. The adapter and the framework bridge
handle both.
Create and tune
configs/base/ + configs/models/ fragments. Submit often needs no --model / --train-data.
Config details: config.yaml.
Submit
--profile sets billed topology. The adapter writes cluster.num_nodes and cluster.gpus_per_node from FORGE_CLUSTER_* and points checkpointing.checkpoint_dir / logger.log_dir at FORGE_OUT_DIR. Do not fight those keys in the experiment file; they are overwritten.
Heterogeneous pools (train vs rollout on different GPU series) only on kuberay / slurm:
policy.generation.colocated.enabled=false and fills colocated resource counts from FORGE_POOL_TOPOLOGY. You do not maintain a separate noncolocated overlay YAML for that.
local and agent do not run multi-pool jobs.
Entrypoint
Recipe default is the versioned NeMo-RL module/file. If the recipe declaresexperiment_override and that file exists in the experiment directory, that file wins (custom env / dataset experiments that ship run.py). spec.source.entrypoint in the JobSpec is rejected; you cannot override the recipe from submit JSON.
The container needs NEMO_RL_DIR (server FORGE_NEMO_RL_DIR, typically /opt/nemo-rl in the NGC image). Missing it fails compile: the server cannot proxy NeMo-RL jobs.
After training
--then export --then eval on submit runs those after SUCCEEDED.
Tool environments
GRPO/PPO can point at modules undercommon/environments/. See Agent environments.