训练与评测

训练通过顶层 pixi 任务进行,用 --task 传入任务 ID。

训练

pixi run train --task WujiHand_Reorient --agent.upload-model False

--agent.upload-model False 表示 checkpoint 只存本地。去掉它并设置 WANDB_API_KEY,最后一次迭代的 checkpoint 还会作为 model artifact 上传到 W&B。无论是否上传,本地 .pt 都会在每个 save_interval 触发点写入。

Checkpoint 与 W&B 日志写入 logs/rsl_rl/<run_name>/

任务配置

两个任务 ID 共享同一 MDP,在 GPU 显存与策略质量之间权衡。

任务 IDEnvs × 迭代GPU 显存说明
WujiHand_Reorient8192 × 5000约 20 GBrelease 配置,复现已发布 checkpoint
WujiHand_Reorient_Light4096 × 7500约 12 GB低显存变体,策略明显较弱

如果 pixi run train 显存不足,切换到低显存变体:

pixi run train --task WujiHand_Reorient_Light

WujiHand_Reorient_Light 能舒服跑在约 12 GB 卡上,但收敛到较弱的策略,在较难的翻转上偶尔掉 cube、出现卡手。

回放与评测

在交互式 viewer 里回放训练好的 checkpoint,或在多次试验上跑成功率评测:

# Interactive viewer with a trained checkpoint
pixi run play --task WujiHand_Reorient --checkpoint-file <path-to-ckpt.pt>

# Success-rate eval over N trials (consumes ONNX)
pixi run python -m wuji_mjlab.tasks.reorient.scripts.eval_success_rate <path-to-policy.onnx>

需要 headless、机器可读的输出(适合 CI 或 sweep):

pixi run python -m wuji_mjlab.tasks.reorient.scripts.eval_success_rate <onnx_path> \
    --num-trials 100 --no-viewer --json-output result.json

编程式评测

评测核心可 import,因此你能从 Python 直接驱动批量评测,无需走 CLI:

from pathlib import Path
from wuji_mjlab.tasks.reorient.tooling.eval_core import EvalConfig, run_eval

result = run_eval(EvalConfig(
    onnx_path=Path("<path-to-policy.onnx>"),
    num_trials=50,
    no_viewer=True,
))
print(f"success_rate = {result.success_rate:.2%}")
print(f"mean min ori error = {result.mean_min_ori_error_rad:.3f} rad")

# Per-trial data for custom analysis
for trial in result.trials:
    if trial.status == "success":
        print(f"trial {trial.trial_idx}: t_first_succ={trial.time_to_first_success_s:.2f}s")

导出为 ONNX

部署消费一个 ONNX 策略,外加一个 sidecar JSON——记录导出时捕获的控制模式参数(action_scaleema_alphawarmup_time_scontrol_modehistory_lenctrl_dt):

pixi run python -m wuji_mjlab.tasks.reorient.scripts.export_onnx <path-to-ckpt.pt>

Sidecar 让部署推理与产出该 ONNX 的仿真策略完全一致。继续到 Sim-to-real 部署 在真机上运行它。

开发工具

# 列出所有已注册的任务 ID
pixi run list-envs

# 用 dummy 策略查看任务场景
pixi run python -m wuji_mjlab.tasks.reorient.scripts.view_task WujiHand_Reorient