跳转到内容

正在加载搜索…

在 RoboDojo 上运行 agent

本教程在 RoboDojo 上运行 agent(程序、学习型 skill、反应层、handler、verifier):一个开发 episode、一个开发子集,以及评测流程。前提是你的 deploy 中的服务已经启动 (快速开始)。

RoboDojo 的官方评测使用固定的 layout 包(layout_pack_seed 0、1、2)。 prompt 调整、skill 开发和自我改进则使用开发 layout: layouts = "procedural" 重放 <dev_layout_dir>/<task>_<seed>.json,这些文件由 benches/robodojo/devlayouts.py 用 RoboDojo 自己的生成器生成,并经过检查,不与任何评测 layout 重复。开发 seed 数量不限;同一个(任务,seed)总是给出同一个 layout。

有三个任务没有开发 layout:cover_blocks、swap_blocks 和 play_tic_tac_toe 把物体放在少数几个 固定位置,评测包已经包含所有排列,因此生成器会放弃(“repeats evaluation layout”),worker 不会启动。 不动用评测 layout 就无法在这些任务上做开发。在 imitate_sorting_sequence 上,目前两个开发 layout 都会在 episode 进行到一半时(大约第 460 步)被 RoboDojo 标记为不稳定,因此这些 episode 不计分。

Terminal window
harness run configs/experiments/dev.toml --deploy mine --output runs/dev
# Development: the agent with its default model on one task and development layouts
# (never evaluation layouts). `harness run configs/experiments/dev.toml
# --deploy <machine>` starts the simulator workers itself; `harness program` uses the
# worker at `endpoint`.
description = "the agent, one task, development layouts"
bench = "robodojo"
tasks = ["general_pickup"]
seeds = [0]
layouts = "procedural"
endpoint = "http://127.0.0.1:8771"
[budget]
max_wall_seconds = 5400
# Cost guard for development checks; the paper runs set no cost cap.
max_cost_usd = 4.0

agent 的默认模型(configs/models/deepseek-flash.toml)是 DeepSeek V4.1 Flash,推理强度为 medium:每个 episode 约 $0.01(agent 1.4.1 在评测包 0 上:平均 $0.010、3.6 次模型调用;任务交给 学习型策略时为 $0.003、2.3 次调用,由程序保留时为 $0.08、16 次调用)。--model grok-low (low 强度的 grok-4.7)或 configs/models/ 中的其他文件可以替换它;论文的各次运行在实验中写明所用模型。

# The 8-task development subset (both conveyor tasks included) that ablations, model
# comparisons and self-improvement share (App. A); 10 episodes each on development
# layouts. An ablation runs it with --agent configs/ablations/<name>.toml.
description = "the agent on the 8-task development subset"
include = ["dev.toml"]
tasks = ["general_pickup", "stack_blocks", "stack_bowls", "classify_objects", "deposit_coin", "insert_tubes",
"match_and_pick_from_conveyor", "pick_from_conveyor_by_image"]
seeds = "0-9"
[budget]
max_total_cost_usd = 20.0
Terminal window
harness run configs/experiments/subset8.toml --deploy mine --output runs/subset8 --gpus 5 --workers-per-gpu 2

harness run 为每个槽位(GPU 数 × 每 GPU worker 数,每个占 6-9 GB)启动一个仿真器 worker, 每个 worker 使用从 base_port 起的独立端口,并从一个队列中给各槽位分配任务;一个 worker 服务一个 任务后就停止。它会:

  • 续跑:已有 summary.json 的 episode 会被跳过;--rerun-errors 只重新运行以错误 (provider 或 worker 故障)结束的 episode;
  • 限制花费:--max-total-cost-usd(或 budget.max_total_cost_usd)在 suite 花费达到该金额后 不再启动新 episode;正在运行的 episode 会跑完;
  • 在评测 layout 上替换不稳定的 layout:被 RoboDojo 标记为不稳定的 episode 会被移到一边 (seed-<n>.unstable-<time>),并运行下一个空闲的 layout。

输出是每个任务和 seed 一个目录:

runs/subset8/
├── suite.json suite.log workers/ tmp/
└── stack_bowls/
├── seed-0/ manifest.json events.jsonl summary.json kernel.log videos/
└── seed-1/ ...
Terminal window
harness report runs/subset8

harness report 遵循 RoboDojo 的计分方式:一个 episode 的得分是它的 reward(成功为 1,否则为 过程分 / 100);出错的 episode 得 0 分;被仿真器作为不稳定而丢弃的 episode 不计分。任务会合并其 _random 变体;五个维度(Generalization、Memory、Precision、Long-Horizon、Open)对各自的任务取平均, 总分对各维度取平均,只在每个任务都有分数时才给出。它还报告每个 episode 的模型调用、花费和决策; --json 输出全部内容。每个 episode 的 summary.json 记录模型选择的策略 (strategy:A、B 或 C,它匹配到的类型,策略)。

# The agent on RoboDojo's official evaluation layouts (pack 0), all tasks, two layouts
# each (raise seeds to "0-49" for the full protocol). Evaluation resolves strictly: a
# skill or service the agent names that cannot run on this machine stops the run.
description = "the agent on official evaluation layouts"
bench = "robodojo"
tasks = "all"
seeds = "0-1"
layouts = "eval"
layout_pack_seed = 0
[budget]
max_wall_seconds = 5400
Terminal window
harness run configs/experiments/eval.toml --deploy mine --seeds 0-49 --max-total-cost-usd 200 \
--rerun-errors --output runs/eval-pack0

评测 layout 严格解析:如果机器没有运行 agent 指定的某个服务,运行会停止,而不是以一个更小的配置 (其 identity 会不同)运行。每个 episode 的 manifest.json 都记录 identity,因此可以判断两台机器的 结果能否比较。

这里通过我们自己的仿真器 worker 运行 agent。排行榜则通过 RoboDojo 自己的客户端运行导出的策略,覆盖 每个任务和 _random 变体,episode 数按官方规定:提交到 RoboDojo 排行榜。 在相同的 layout 上比较 agent 和它所封装的学习型策略:在运行 agent 的同时单独运行该策略 (configs/experiments/policy-alone-dev.toml 配合 configs/scripts/policy_alone.json, 或在评测 layout 上使用同一个脚本),并按任务配对比较。