Skip to content

Commit af9e0b9

Browse files
pkooijclaude
andcommitted
ci(robotwin): run full 1-episode smoke eval instead of mocked tests
The robotwin-integration-test job now builds the full-install image (SAPIEN, mplib, CuRobo, pytorch3d + assets) and runs a real 1-episode lerobot-eval against beat_block_hammer, matching the libero/metaworld CI pattern. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 726e52c commit af9e0b9

1 file changed

Lines changed: 22 additions & 26 deletions

File tree

.github/workflows/benchmark_tests.yml

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -170,18 +170,12 @@ jobs:
170170
"
171171
172172
# ── ROBOTWIN 2.0 ──────────────────────────────────────────────────────────
173-
# RoboTwin 2.0 is NOT pip-installable (SAPIEN / CuRobo / mplib require a
174-
# 20-minute source installation with specific NVIDIA driver versions).
175-
# The image therefore installs only the base lerobot package and runs the
176-
# fully-mocked unit-test suite, which catches:
177-
# - import-time regressions in lerobot.envs.robotwin
178-
# - RoboTwinEnvConfig registration under --env.type=robotwin
179-
# - Gymnasium wrapper, multi-task factory, and processor-step correctness
180-
#
181-
# For a full end-to-end eval on a NVIDIA GPU machine, follow the install guide
182-
# at https://robotwin-platform.github.io/doc/usage/robotwin-install.html.
173+
# Isolated image: full RoboTwin 2.0 stack — SAPIEN, mplib, CuRobo,
174+
# pytorch3d, + simulation assets (~4 GB).
175+
# Build takes ~20 min on first run; subsequent runs hit the layer cache.
176+
# Requires an NVIDIA GPU runner with CUDA 12.1 drivers.
183177
robotwin-integration-test:
184-
name: RoboTwin 2.0 — build image + mocked unit tests
178+
name: RoboTwin 2.0 — build image + 1-episode eval
185179
runs-on:
186180
group: aws-g6-4xlarge-plus
187181
env:
@@ -198,6 +192,9 @@ jobs:
198192
with:
199193
cache-binary: false
200194

195+
# Build the full-install image: SAPIEN, mplib, CuRobo, pytorch3d +
196+
# simulation assets (~4 GB). Layer cache lives in the runner's local
197+
# Docker daemon — reused across re-runs on the same machine.
201198
- name: Build RoboTwin 2.0 benchmark image
202199
uses: docker/build-push-action@v6 # zizmor: ignore[unpinned-uses]
203200
with:
@@ -209,22 +206,21 @@ jobs:
209206
cache-from: type=local,src=/tmp/.buildx-cache-robotwin
210207
cache-to: type=local,dest=/tmp/.buildx-cache-robotwin,mode=max
211208

212-
# Run the fully-mocked test suite — no SAPIEN installation required.
213-
# 19 tests verify the gymnasium wrapper, config registration, multi-task
214-
# factory, error handling, and task list integrity.
215-
- name: Run RoboTwin 2.0 unit tests (mocked, no SAPIEN)
209+
- name: Run RoboTwin 2.0 smoke eval (1 episode)
216210
run: |
217-
docker run --rm \
218-
--shm-size=2g \
211+
docker run --rm --gpus all \
212+
--shm-size=4g \
213+
-e HF_HOME=/tmp/hf \
214+
-e HF_USER_TOKEN="${HF_USER_TOKEN}" \
219215
lerobot-benchmark-robotwin:ci \
220216
bash -c "
221-
pytest tests/envs/test_robotwin.py -k 'not ProcessorStep' \
222-
--tb=short -q
217+
hf auth login --token \"\$HF_USER_TOKEN\" --add-to-git-credential 2>/dev/null || true
218+
lerobot-eval \
219+
--policy.path=pepijn223/smolvla_robotwin \
220+
--env.type=robotwin \
221+
--env.task=beat_block_hammer \
222+
--eval.batch_size=1 \
223+
--eval.n_episodes=1 \
224+
--eval.use_async_envs=false \
225+
--policy.device=cuda
223226
"
224-
225-
# Verify that RoboTwinEnvConfig is correctly registered and importable
226-
# as --env.type=robotwin, independent of the SAPIEN installation.
227-
- name: Verify RoboTwin config registration
228-
run: |
229-
docker run --rm lerobot-benchmark-robotwin:ci \
230-
python -c "from lerobot.envs.configs import EnvConfig; choices = EnvConfig.get_known_choices(); assert 'robotwin' in choices, f'robotwin not in registered envs: {list(choices)}'; cfg = choices['robotwin'](); assert cfg.task == 'beat_block_hammer'; assert len(cfg.features) >= 5; print('RoboTwinEnvConfig registered OK:', cfg.task, '| features:', sorted(cfg.features))"

0 commit comments

Comments
 (0)