| # Copyright 2025 The HuggingFace Inc. team. All rights reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # Benchmark image for RoboCasa365 integration tests. | |
| # Extends the nightly GPU image (which already has all extras installed) | |
| # with the PR's source code and RoboCasa-specific asset setup. | |
| # | |
| # Build: docker build -f docker/Dockerfile.benchmark.robocasa -t lerobot-benchmark-robocasa . | |
| # Run: docker run --gpus all --rm lerobot-benchmark-robocasa lerobot-eval ... | |
| FROM huggingface/lerobot-gpu:latest | |
| # Install robocasa + robosuite as editable clones. pip-installing from git | |
| # omits data files like robocasa/models/assets/box_links/box_links_assets.json | |
| # (not declared in package_data), which download_kitchen_assets needs at import. | |
| # | |
| # `--no-deps` on robocasa is deliberate: its setup.py pins `lerobot==0.3.3` | |
| # in install_requires, which would shadow the editable lerobot baked into | |
| # this image. We install robocasa's actual runtime deps explicitly instead. | |
| # Pinned SHAs for reproducible benchmark runs. Bump when you need an | |
| # upstream fix; don't rely on `main`/`master` drift. | |
| ARG ROBOCASA_SHA=56e355ccc64389dfc1b8a61a33b9127b975ba681 | |
| ARG ROBOSUITE_SHA=aaa8b9b214ce8e77e82926d677b4d61d55e577ab | |
| RUN git clone https://github.com/robocasa/robocasa.git ~/robocasa && \ | |
| git -C ~/robocasa checkout ${ROBOCASA_SHA} && \ | |
| git clone https://github.com/ARISE-Initiative/robosuite.git ~/robosuite && \ | |
| git -C ~/robosuite checkout ${ROBOSUITE_SHA} && \ | |
| uv pip install --no-cache -e ~/robocasa --no-deps && \ | |
| uv pip install --no-cache -e ~/robosuite && \ | |
| uv pip install --no-cache \ | |
| "numpy==2.2.5" "numba==0.61.2" "scipy==1.15.3" "mujoco==3.3.1" \ | |
| "pygame==2.6.1" "Pillow==12.2.0" "opencv-python==4.13.0.92" \ | |
| "pyyaml==6.0.3" "pynput==1.8.1" "tqdm==4.67.3" "termcolor==3.3.0" \ | |
| "imageio==2.37.3" "h5py==3.16.0" "lxml==6.0.4" "hidapi==0.14.0.post4" \ | |
| "tianshou==0.4.10" "gymnasium==1.2.3" | |
| # Set up robocasa macros and download kitchen assets. We need: | |
| # - tex : base environment textures | |
| # - tex_generative : AI-generated textures; kitchen fixture XMLs embed | |
| # refs to generative_textures/wall/tex*.png | |
| # unconditionally, so MjModel.from_xml_string fails | |
| # at reset time without them (even if the env is | |
| # constructed with generative_textures=None). | |
| # - fixtures_lw : lightwheel kitchen fixtures (fridge, counters...) | |
| # - objs_lw : lightwheel object meshes (stools, misc props) | |
| # We skip the objaverse/aigen object packs (~30GB combined) by pairing | |
| # this with --env.obj_registries=["lightwheel"] on the lerobot side. | |
| # The download script prompts interactively, so pipe 'y' to auto-accept. | |
| RUN python -m robocasa.scripts.setup_macros && \ | |
| yes y | python -m robocasa.scripts.download_kitchen_assets \ | |
| --type tex tex_generative fixtures_lw objs_lw | |
| # Overlay the PR's source code on top of the nightly image. | |
| COPY --chown=user_lerobot:user_lerobot . . | |
| # Re-install lerobot editably so the new source (with RoboCasaEnv registration) | |
| # replaces the stale package baked into the nightly image. | |
| RUN uv pip install --no-cache --no-deps -e . | |
| CMD ["/bin/bash"] | |