mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-30 18:31:25 +00:00
57 lines
2.7 KiB
Docker
57 lines
2.7 KiB
Docker
|
|
# Copyright 2026 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 RoboMME integration tests.
|
||
|
|
# Extends the nightly GPU image (which has lerobot[all]) with Vulkan system
|
||
|
|
# libs for ManiSkill/SAPIEN and the robomme extra. robomme isn't in [all]
|
||
|
|
# because mani-skill hard-pins gymnasium==0.29.1 and numpy<2.0.0 which
|
||
|
|
# conflict with lerobot's defaults; both are safe at runtime:
|
||
|
|
# - gymnasium 0.29.x has the same 5-tuple step() API as 1.x (since 0.26)
|
||
|
|
# - numpy 1.26.4 is API-compatible with lerobot's actual usage.
|
||
|
|
#
|
||
|
|
# Build: docker build -f docker/Dockerfile.benchmark.robomme -t lerobot-benchmark-robomme .
|
||
|
|
# Run: docker run --gpus all --rm lerobot-benchmark-robomme lerobot-eval ...
|
||
|
|
|
||
|
|
FROM huggingface/lerobot-gpu:latest
|
||
|
|
|
||
|
|
# NVIDIA Container Toolkit: expose Vulkan driver capability for headless rendering.
|
||
|
|
ENV NVIDIA_DRIVER_CAPABILITIES=all \
|
||
|
|
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
|
||
|
|
|
||
|
|
# ManiSkill/SAPIEN's renderer needs Vulkan, which isn't in the base image.
|
||
|
|
USER root
|
||
|
|
RUN apt-get update \
|
||
|
|
&& apt-get install -y --no-install-recommends \
|
||
|
|
libvulkan1 libvulkan-dev mesa-vulkan-drivers \
|
||
|
|
&& mkdir -p /usr/share/vulkan/icd.d \
|
||
|
|
&& echo '{"file_format_version":"1.0.0","ICD":{"library_path":"libGLX_nvidia.so.0","api_version":"1.3.0"}}' \
|
||
|
|
> /usr/share/vulkan/icd.d/nvidia_icd.json \
|
||
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||
|
|
USER user_lerobot
|
||
|
|
|
||
|
|
# Install smolvla + av-dep via the PR's pyproject, then layer robomme on top
|
||
|
|
# with gymnasium/numpy overrides. robomme isn't a pyproject extra because its
|
||
|
|
# mani-skill pin conflicts with lerobot's base numpy>=2 (see pyproject.toml).
|
||
|
|
COPY --chown=user_lerobot:user_lerobot setup.py pyproject.toml uv.lock README.md MANIFEST.in ./
|
||
|
|
RUN printf 'gymnasium==0.29.1\nnumpy==1.26.4\n' > /tmp/robomme_override.txt \
|
||
|
|
&& uv pip install --no-cache --override /tmp/robomme_override.txt \
|
||
|
|
-e ".[smolvla,av-dep]" \
|
||
|
|
"robomme @ git+https://github.com/RoboMME/robomme_benchmark.git@main" \
|
||
|
|
&& python -c "import robomme; print('robomme import OK')"
|
||
|
|
|
||
|
|
# Overlay the PR's source code on top of the nightly image.
|
||
|
|
COPY --chown=user_lerobot:user_lerobot . .
|
||
|
|
|
||
|
|
CMD ["/bin/bash"]
|