mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-15 16:49:55 +00:00
4131f22ea1
The 586-file lerobot/libero-assets dataset was being fetched at runtime (on first reset()) which consistently hit a 504 Gateway Timeout on CI runners. Downloading at build time bakes the assets into the image so no network call is needed during the smoke eval. The config.yaml now points assets → ~/.libero/assets (the downloaded snapshot) instead of the bundled (empty) package path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
90 lines
3.8 KiB
Docker
90 lines
3.8 KiB
Docker
# 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.
|
|
|
|
# Isolated benchmark image for LIBERO integration tests.
|
|
# Installs only lerobot[libero] so its dep tree (hf-libero, dm-control, mujoco)
|
|
# cannot conflict with other benchmarks.
|
|
#
|
|
# Build: docker build -f docker/Dockerfile.benchmark.libero -t lerobot-benchmark-libero .
|
|
# Run: docker run --gpus all --rm lerobot-benchmark-libero lerobot-eval ...
|
|
|
|
ARG CUDA_VERSION=12.4.1
|
|
ARG OS_VERSION=22.04
|
|
FROM nvidia/cuda:${CUDA_VERSION}-base-ubuntu${OS_VERSION}
|
|
|
|
ARG PYTHON_VERSION=3.12
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
MUJOCO_GL=egl \
|
|
PATH=/lerobot/.venv/bin:$PATH \
|
|
CUDA_VISIBLE_DEVICES=0 \
|
|
DEVICE=cuda
|
|
|
|
# System deps — same set as Dockerfile.internal
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
software-properties-common build-essential git curl \
|
|
libglib2.0-0 libgl1-mesa-glx libegl1-mesa ffmpeg \
|
|
libusb-1.0-0-dev speech-dispatcher libgeos-dev portaudio19-dev \
|
|
cmake pkg-config ninja-build \
|
|
&& add-apt-repository -y ppa:deadsnakes/ppa \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
python${PYTHON_VERSION} \
|
|
python${PYTHON_VERSION}-venv \
|
|
python${PYTHON_VERSION}-dev \
|
|
&& curl -LsSf https://astral.sh/uv/install.sh | sh \
|
|
&& mv /root/.local/bin/uv /usr/local/bin/uv \
|
|
&& useradd --create-home --shell /bin/bash user_lerobot \
|
|
&& usermod -aG sudo user_lerobot \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /lerobot
|
|
RUN chown -R user_lerobot:user_lerobot /lerobot
|
|
USER user_lerobot
|
|
|
|
ENV HOME=/home/user_lerobot \
|
|
HF_HOME=/home/user_lerobot/.cache/huggingface \
|
|
HF_LEROBOT_HOME=/home/user_lerobot/.cache/huggingface/lerobot \
|
|
TORCH_HOME=/home/user_lerobot/.cache/torch \
|
|
TRITON_CACHE_DIR=/home/user_lerobot/.cache/triton
|
|
|
|
RUN uv venv --python python${PYTHON_VERSION}
|
|
|
|
# Install only lerobot[libero] — completely isolated from metaworld's dep tree
|
|
COPY --chown=user_lerobot:user_lerobot setup.py pyproject.toml uv.lock README.md MANIFEST.in ./
|
|
COPY --chown=user_lerobot:user_lerobot src/ src/
|
|
|
|
RUN uv sync --locked --extra libero --extra smolvla --no-cache
|
|
|
|
# Pre-download lerobot/libero-assets from HF Hub so nothing is fetched at
|
|
# runtime (which times out on CI). Point the libero config at the cached path.
|
|
# libero/libero/__init__.py calls input() when ~/.libero/config.yaml is missing,
|
|
# so we write the config before any libero import can happen.
|
|
RUN LIBERO_DIR=$(python${PYTHON_VERSION} -c \
|
|
"import importlib.util, os; s=importlib.util.find_spec('libero'); \
|
|
print(os.path.join(os.path.dirname(s.origin), 'libero'))") && \
|
|
mkdir -p /home/user_lerobot/.libero && \
|
|
python${PYTHON_VERSION} -c "\
|
|
from huggingface_hub import snapshot_download; \
|
|
snapshot_download(repo_id='lerobot/libero-assets', repo_type='dataset', \
|
|
local_dir='/home/user_lerobot/.libero/assets')" && \
|
|
printf "assets: /home/user_lerobot/.libero/assets\nbddl_files: ${LIBERO_DIR}/bddl_files\ndatasets: ${LIBERO_DIR}/../datasets\ninit_states: ${LIBERO_DIR}/init_files\n" \
|
|
> /home/user_lerobot/.libero/config.yaml
|
|
|
|
RUN chmod +x /lerobot/.venv/lib/python${PYTHON_VERSION}/site-packages/triton/backends/nvidia/bin/ptxas
|
|
|
|
COPY --chown=user_lerobot:user_lerobot . .
|
|
|
|
CMD ["/bin/bash"]
|