Quick Evaluation
RoboDojo evaluation is launched through XPolicyLab policies. The public entry point is:
Before running evaluation, finish Install & Download and choose an environment config from Configurations. The default config is arx_x5, which loads env_cfg/arx_x5.yml.
Smoke test
Section titled “Smoke test”Use smoke first when validating a new install, policy integration, or script change. It runs selected tasks sequentially with EVAL_NUM=1 by default and passes only when each selected task exits successfully, writes _result.json, and records eval_time >= 1.
Run a subset while debugging:
You can also smoke-test one or more capability dimensions. Omit --dimension to run all 54 runnable tasks (all). Pass one or more official dimension names, comma-separated values, or repeat --dimension:
Task-filter order
Section titled “Task-filter order”smoke, benchmark, and batch client apply task filters in this order:
--dimensionrestricts the canonical runnable-task inventory.- Tasks from
--onlyand--tasks-fileare combined as a union, not an intersection. Duplicate names are removed. - Every requested task must belong to the selected dimension set. A task outside that set is reported as
unknown taskinstead of being silently ignored. --limitis applied last, after the selected tasks have been restored to canonical RoboDojo task order. The order written in--onlyor--tasks-filedoes not control execution order.
For example, --dimension memory --only cover_blocks,swap_T --tasks-file tasks.txt --limit 3 first selects Memory tasks, combines both explicit task sources, then runs the first three matches in canonical order.
Resume from an existing smoke summary:
Balanced multi-GPU sweeps
Section titled “Balanced multi-GPU sweeps”By default, smoke and benchmark run tasks sequentially on one GPU pair (--policy-gpu / --env-gpu, both default to 0). Pass --gpu-ids to launch a balanced multi-GPU sweep: RoboDojo partitions the selected tasks across workers using embedded per-task runtime weights (the same weight table as optimal_8group.txt in the RoboDojo repo) instead of hard-coded --only shards.
Run a subset with the same balancer:
| Flag | Meaning |
|---|---|
--gpu-ids | Comma-separated GPU ids reused for both policy server and Isaac Sim client on each worker. |
--policy-gpu-ids | Optional per-worker policy GPU list. Defaults to --gpu-ids. |
--env-gpu-ids | Optional per-worker simulator GPU list. Defaults to --gpu-ids. |
The policy and env GPU lists must have the same length. In multi-GPU mode, the selected task count must be greater than or equal to the worker count; otherwise RoboDojo exits early with a validation error.
Both smoke and benchmark accept --only, --tasks-file, --dimension, and --limit; the task-filter order is applied before multi-GPU partitioning.
Single-task eval
Section titled “Single-task eval”For same-machine evaluation, use eval. It starts the policy server and Isaac Sim client together on localhost:
Required policy arguments:
| Argument | Meaning |
|---|---|
--policy-dir | XPolicyLab policy directory. Same-machine eval uses eval.sh plus the policy setup_eval_policy_server.sh and setup_eval_env_client.sh launchers. |
--ckpt | Checkpoint name passed to the policy-side eval/server script. |
--policy-env | Conda env, uv, or env path used by the policy server. |
Common benchmark arguments:
| Argument | Default |
|---|---|
--env-cfg |
arx_x5 |
--seed |
0 |
--eval-env |
RoboDojo |
--action-type |
ee |
--expert-num |
100 |
Use --dry-run to inspect the resolved command without launching the policy server or Isaac Sim:
Complete evaluation
Section titled “Complete evaluation”Publication-style evaluation uses 54 runnable simulation tasks, three eval seeds, and native per-task episode counts from task/RoboDojo/config/_task.yml.
Run one seed with native counts:
Repeat for --seed 1 and --seed 2, or launch the three seeds on separate GPUs.
For each seed, you can either use the manual task shards below or a single balanced multi-GPU command with --gpu-ids (see Balanced multi-GPU sweeps).
Evaluate by capability dimension
Section titled “Evaluate by capability dimension”List the official capability dimensions, canonical base-task counts, and runnable task configs (including Generalization _random variants):
The inventory comes from scripts/internal/task_inventory.py. Each runnable task carries dimension and variant metadata (standard or random). Random Generalization configs inherit the dimension of their base task.
| Canonical name | Aliases (normalized to canonical) |
|---|---|
generalization | gen, generalisation |
memory | mem |
precision | — |
long-horizon | long, long_horizon, longhorizon |
open | open-ended, open_ended, openended |
Rules:
- Omit
--dimensiononsmoke,benchmark, or batchclientto evaluate all dimensions (54 runnable configs). - Pass
--dimension allexplicitly, or combine multiple names:--dimension memory,long-horizonor repeated--dimension memory --dimension open. - Invalid dimension names are rejected. Do not mix unknown names with
all. generalizationincludes the 12 standard tasks and their 12 runnable_randomlayout variants (24 configs total for that dimension).
Run a native-count benchmark sweep on selected dimensions:
Narrow within a dimension:
For lower-level inspection, bash scripts/robodojo.sh tasks --dimension memory and python3 scripts/internal/task_inventory.py --list-dimensions use the same dimension metadata.
Task groups
Section titled “Task groups”Use one command per terminal/GPU. Change <SEED> to 0, 1, or 2 for the three benchmark seeds. Tasks listed in --only "..." are used as a subset filter; RoboDojo runs the matched tasks sequentially in its canonical runnable-task order.
These manual shards remain valid when you want fixed groupings. For automatic load balancing from runtime weights, omit the shards and pass --gpu-ids on one benchmark command instead.
4-GPU run scripts
Group 0: 15 tasks.
Group 1: 10 tasks.
Group 2: 15 tasks.
Group 3: 14 tasks.
8-GPU run scripts
Group 0: 6 tasks.
Group 1: 6 tasks.
Group 2: 6 tasks.
Group 3: 7 tasks.
Group 4: 7 tasks.
Group 5: 7 tasks.
Group 6: 8 tasks.
Group 7: 7 tasks.
After all seeds finish, aggregate results:
Benchmark sweep
Section titled “Benchmark sweep”Use benchmark with a fixed --eval-num for local scored sweeps:
Use --eval-num native when _task.yml should control each task’s 25/50 episode count. That mode is the correct entry point for full benchmark sweeps.
Both smoke and benchmark accept --dimension, --gpu-ids, and the related per-worker GPU flags. The generated JSON and Markdown smoke summaries record the resolved dimension selection, making partial capability runs distinguishable from full-suite runs. Per-task logs are written under smoke_results/<run_id>/logs/<task>.log.
Benchmark rules
Section titled “Benchmark rules”task_name connects the task implementation, config, and result path:
Most tasks use lowercase snake_case. Four tasks keep uppercase letters in their canonical task names: play_Xylophone, swap_T, push_T, and push_T_random.
RoboDojo evaluates 42 base simulation tasks across five capability dimensions. Twelve Generalization tasks also have a _random variant, for 54 runnable tasks total.
| Dimension | Base tasks | Generalization _random variants |
|---|---|---|
| Generalization | 12 | 12 |
| Memory | 6 | 0 |
| Precision | 8 | 0 |
| Long-Horizon | 8 | 0 |
| Open | 8 | 0 |
| Total | 42 | 12 |
See Simulation Tasks for the full Generalization task list. Each Generalization base task has a sibling task with the _random suffix, for example push_T_random.
Runnable task counts with --eval-num native:
| Runnable task type | Trials per seed |
|---|---|
| Non-Generalization tasks | 50 |
| Generalization base tasks | 25 |
| Generalization random tasks | 25 |
The summary script reads the latest _result.json files, merges each Generalization base task with its _random sibling, and writes the final table to eval_result/RoboDojo/_summary.md.
Split eval
Section titled “Split eval”Use server and client when the policy server and Isaac Sim client run on separate machines, separate processes, or across a host/container boundary. eval, smoke, and benchmark co-locate the server and client on localhost; use split mode for remote policies or Docker simulator clients.
Start the policy server:
Start the simulator client (single task):
Batch client (multi-task / multi-GPU)
Section titled “Batch client (multi-task / multi-GPU)”Omit --task to run batch client mode. RoboDojo defaults to all runnable simulation tasks unless you narrow the set with --only, --tasks-file, --dimension, or --limit. The runner uses the same task inventory and balancing logic as smoke / benchmark, but launches Isaac Sim clients against external policy servers (--mode client in scripts/internal/smoke_all_tasks.sh).
| Mode | Required flags |
|---|---|
| Single-task | --task, --policy-host, --policy-port, and either --policy-dir or --policy-name |
| Batch | --policy-host, --policy-port, task filters optional, and either --policy-dir or --policy-name |
Batch-only options mirror smoke / benchmark: --only, --tasks-file, --dimension, --limit, --eval-num, and --dry-run, using the same task-filter order. Use --gpu-ids or --env-gpu-ids to spread client workers across GPUs. Comma-separated --policy-host / --policy-port values are supported only in batch mode:
- One host, multiple ports: pass one
--policy-hostand as many--policy-portentries as worker groups; the host is reused. - Multiple hosts:
--policy-hostand--policy-portcounts must both equal the worker group count.
In multi-GPU batch mode, the filtered task count must be ≥ the worker count. Single-task mode rejects comma-separated hosts or ports.
Keep --task, --env-cfg, --seed, and --action-type aligned between server and client when you run one task per server process. On the client side, --ckpt and --action-type also label result paths.
Batch inference mode is declared in XPolicyLab/policy/<POLICY_NAME>/deploy.yml with eval_batch. Do not pass a separate batch flag on client. If eval_batch: false, RoboDojo forces num_envs=1 even when the sim config requests a larger value.
Docker client
Section titled “Docker client”The Docker image is simulator-side only. Start the policy server outside the container, then run robodojo.sh client inside the container. See Optional: Install with Docker for the full mount and networking command.
| Policy server | Container networking | --policy-host |
|---|---|---|
| Same host | --network host | 127.0.0.1 |
| Same host, bridge | --add-host=host.docker.internal:host-gateway | host.docker.internal |
| Remote machine | routed network | policy machine IP |
Inside a bridge container, localhost is the container itself, not the host.
Output
Section titled “Output”Per-task eval artifacts:
Important files:
| File | Meaning |
|---|---|
_result.json | Success count, failure count, score, eval_time, and per-episode details. |
episode_*.mp4 | Saved camera videos. |
_stream/ | Temporary stream files for in-progress videos. |
_resume_<run_id>.json | Resume manifest written one directory above the run folder. |
Smoke summaries:
The JSON summary includes a dimensions array with canonical dimension names (or all when no filter was applied). The Markdown summary lists the same selection under dimensions: so partial capability runs are easy to distinguish from full-suite sweeps.
Aggregated benchmark table:
Lightweight checks
Section titled “Lightweight checks”For quick repository and command checks without launching Isaac Sim:
For runtime acceptance on a machine with Isaac Sim and the selected policy ready: