CLI 参考

UniLab 为常见的训练与回放路由提供软件包命令,同时保留底层脚本以便调试 Hydra 组合。

统一命令

目标

命令形式

路由到的脚本

PPO

uv run train --algo ppo --task <task> --sim <backend>

src/unilab/scripts/train_rsl_rl.py

APPO

uv run train --algo appo --task <task> --sim <backend>

src/unilab/scripts/train_appo.py

SAC

uv run train --algo sac --task <task> --sim <backend>

src/unilab/scripts/train_sac.py

FlashSAC

uv run train --algo flashsac --task <task> --sim <backend>

src/unilab/scripts/train_flashsac.py

示例:

uv run train --algo ppo --task go2_joystick_flat --sim mujoco
uv run train --algo appo --task g1_motion_tracking --sim mujoco training.no_play=true
uv run train --algo sac --task g1_walk_flat --sim mujoco training.no_play=true
uv run train --algo flashsac --task go2_joystick_flat --sim mujoco

CLI 会根据 --algo、--task、--sim 以及可选的 --profile 构造出 owner YAML 路径。定义路由的取值必须使用 CLI flag;命令之后的 Hydra override 用于设置诸如 algo.max_iterations、algo.num_envs 和 training.no_play 等字段。

中断训练

发送一次 Ctrl+C 表示请求协作退出。训练入口、collector、数据并行 sibling rank 以及 torch elastic worker 会先执行既有清理路径,然后进程按惯例返回退出码 130。再发送一次 Ctrl+C 会强制 CLI 子进程终止;强制终止不保证优雅清理。 torch elastic 的正常关机提示仍可能出现,但用户取消不会被报告为训练失败。

uni-cumps 负责 CUDA MPS 的显式用户态 daemon 生命周期。它提供只读 host/topology 诊断,只启动和停止 UniLab record 记录的 user-owned daemon,并输出 launcher 环境而不修改调用方 shell:

# 单 GPU 主机;默认参数已经完整。
uv run uni-cumps start
eval "$(uv run uni-cumps env)"
uv run uni-cumps doctor
uv run uni-cumps stop

# 多 GPU 或需要显式命名的部署。
uv run uni-cumps doctor --gpus <gpu-index-or-uuid>
uv run uni-cumps start --gpus <gpu-index-or-uuid> --name <name>
uv run uni-cumps env --name <name>
uv run uni-cumps stop --name <name>

ownership、并发和拓扑限制见 tensor runtime 生产指南。训练仍必须显式设置 training.cuda_process_sharing=mps。

各环境的调用方式

CLI 前缀取决于安装方案:

  • ROCm:先执行一次 make sync-rocm,之后使用 uv run ...。

  • Intel XPU:使用 uv run --no-sync ...。

Tab 自动补全

补全脚本是可选项,只补全 uv run train / uv run eval 的入口、flag 和部分 choices,不改变命令行为。在新 checkout 上,可用一条 setup 命令完成环境同步和补全 安装:

# 完整默认环境:
make setup

make setup 会同步默认环境(uv sync --extra mujoco,含内置 RL 栈),随后运行 uv run --no-sync unilab-complete install。一个环境只选择一条安装路径。 安装命令会按 $SHELL / 平台选择 Bash 或 Zsh,只写入用户级 rc 文件。当前终端不会被自动 激活,重新打开终端或 source 对应 rc 文件后生效。

如果系统没有 make,可直接执行:

uv sync --extra mujoco
uv run --no-sync unilab-complete install

Linux / WSL 的 Bash 用户也可手动把下面内容写入 ~/.bashrc:

source scripts/completions/unilab.bash

macOS 默认 Zsh 用户可把下面内容写入 ~/.zshrc:

autoload -Uz compinit
compinit
source scripts/completions/unilab.zsh

重新打开终端或 source 对应 rc 文件后,可用 uv run <TAB>、 uv run train --algo <TAB>、uv run train --sim <TAB> 查看候选项。

评估

uv run eval 会设置 training.play_only=true,并可选地将 --load-run 映射到 algo.load_run。

uv run eval --algo ppo --task go2_joystick_flat --sim mujoco --load-run -1
uv run eval --algo ppo --task go2_joystick_flat --sim mujoco --load-run -1 \
  --render-mode record

支持的渲染模式为 auto、interactive、record、viser 和 none。其中 MuJoCo 交互模式 (--sim mujoco --render-mode interactive)直接路由到 play_interactive.py,并始终只 rollout 一个环境。

具备 physics-state playback 的后端(mujoco、mjwarp、newton、drake、superdex) 还支持 --render-mode viser:通过基于浏览器的 viser viewer 展示回放,不需要本地显示, 在 macOS 上也不需要 mjpython。eval 会路由到独立的 play_viser.py viewer;train 则在 训练后回放阶段运行同一 viewer。viser 是必选依赖;viser.* 配置组 (viser.port、viser.max_envs、viser.display_mode、viser.env_idx)用于调整服务器与场景。

演示

uv run demo dance
uv run demo dance --refresh --device cpu

可用的 demo:teaser、dance。 每个 demo 在首次运行时会从 unilabsim/unilab-checkpoints 这个 Hugging Face 数据集拉取预训练检查点,并缓存到 src/unilab/assets/checkpoints/<demo>/model_0.pt。 传入 --refresh 可重新下载。

中国大陆用户:当 huggingface.co 无法访问时,请在运行 demo 前切到社区镜像:

export HF_ENDPOINT=https://hf-mirror.com

demo 入口由 src/unilab/demo.py 实现,并从 src/unilab/cli.py 路由。

底层脚本

当你需要检查 Hydra 配置组或复现脚本层面的问题时,底层脚本仍然可用。在正常使用 中,请将定义路由的取值保留在上面的统一 CLI flag 中。

对于 off-policy 路由,--algo 选择按算法划分的 owner 树 src/unilab/conf/<algo>/; 不要在 --task 中包含算法名称。

常用 Override

training.no_play=true
algo.max_iterations=10
algo.num_envs=128
algo.load_run=-1
training.logger=wandb

回放时使用 uv run eval ... --load-run ...,渲染行为则使用 --render-mode record 或 --render-mode none。

后端选择属于 CLI 的 --sim 选项以及由此得到的 owner YAML。不要将 training.sim_backend=<backend> 当作独立的切换开关使用。