File size: 4,493 Bytes
9bca14a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
ARG COSMOS_RL_BUILD_MODE=efa
ARG COSMOS_RL_EXTRAS=""

ARG CUDA_VERSION=12.8.1

FROM nvcr.io/nvidia/cuda:${CUDA_VERSION}-devel-ubuntu22.04 AS no-efa-base

# System dependencies for eval
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    python3.10-dev python3-dev python3-distutils \
    libgl1 libglib2.0-0 libglu1-mesa \
    curl git ca-certificates \
    tmux zip unzip vim \
    && rm -rf /var/lib/apt/lists/*

# Install uv package manager
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:$PATH"

# Install Miniconda
RUN curl -fsSL -o /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && bash /tmp/miniconda.sh -b -p /opt/miniconda3 \
    && rm /tmp/miniconda.sh
ENV PATH="/opt/miniconda3/bin:$PATH"

ENV EVAL_ROOT=/opt/eval

# Clone b1k-eval-utils
RUN mkdir -p ${EVAL_ROOT} \
    && git clone https://github.com/littlespray/b1k-eval-utils.git ${EVAL_ROOT}/b1k-eval-utils

# Clone and setup openpi-comet
SHELL ["/bin/bash", "-c"]
RUN cd ${EVAL_ROOT} \
    && git clone https://github.com/mli0603/openpi-comet.git --depth=1 \
    && cd openpi-comet \
    && cp ${EVAL_ROOT}/b1k-eval-utils/eval_openpi.sh ${EVAL_ROOT}/openpi-comet/eval_openpi.sh \
    && cp ${EVAL_ROOT}/b1k-eval-utils/patch_comet_safetensors.sh ${EVAL_ROOT}/openpi-comet/patch_comet_safetensors.sh \
    && GIT_LFS_SKIP_SMUDGE=1 uv sync \
    && GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . \
    && uv pip install transformers==4.53.2 \
    && cp -r ./src/openpi/models_pytorch/transformers_replace/* .venv/lib/python3.11/site-packages/transformers/ \
    && bash patch_comet_safetensors.sh


# Clone BEHAVIOR-1K and install bddl/OmniGibson into openpi-comet venv
RUN git clone -b v3.7.2 --single-branch --depth=1 \
    https://github.com/StanfordVL/BEHAVIOR-1K.git ${EVAL_ROOT}/BEHAVIOR-1K

RUN cd ${EVAL_ROOT}/BEHAVIOR-1K \
    && source ${EVAL_ROOT}/openpi-comet/.venv/bin/activate \
    && uv pip install -e bddl3 \
    && uv pip install -e "OmniGibson[eval]" \
    && deactivate

# Prepare b1k environment
# RUN cd ${EVAL_ROOT}/BEHAVIOR-1K \
#     && cp ${EVAL_ROOT}/b1k-eval-utils/patch_setup.sh patch_setup.sh \
#     && bash patch_setup.sh \

WORKDIR ${EVAL_ROOT}/BEHAVIOR-1K

# Run b1k setup.sh (separate layer — most likely to fail, easy to retry)
ENV TORCH_CUDA_ARCH_LIST="8.0 9.0+PTX"
RUN cd ${EVAL_ROOT}/BEHAVIOR-1K \
    && source /opt/miniconda3/etc/profile.d/conda.sh \
    && conda deactivate \
    && ./setup.sh --new-env --omnigibson --bddl --joylo --eval --primitives \
        --accept-conda-tos --accept-nvidia-eula
        
RUN source /opt/miniconda3/etc/profile.d/conda.sh \
    && conda activate behavior \
    && pip install scipy==1.11.4 \
    && pip uninstall -y numpy \
    && pip uninstall -y numpy \
    && pip install numpy==1.26.4 opencv-contrib-python==4.10.0.84



# RUN cd ${EVAL_ROOT}/BEHAVIOR-1K \
#     && source /opt/miniconda3/etc/profile.d/conda.sh \
#     && conda activate behavior \
#     && python -c "from omnigibson.utils.asset_utils import download_omnigibson_robot_assets; download_omnigibson_robot_assets()"
#     && python -c "from omnigibson.utils.asset_utils import download_behavior_1k_assets; download_behavior_1k_assets(accept_license=True)"
#     && python -c "from omnigibson.utils.asset_utils import download_2025_challenge_task_instances; download_2025_challenge_task_instances()"

# Copy eval script
RUN cp ${EVAL_ROOT}/b1k-eval-utils/eval_b1k.sh ${EVAL_ROOT}/BEHAVIOR-1K/eval_b1k.sh

# Download HF models into the image for offline eval.
# Append new model repos here, separated by spaces.

# ENV HF_MODEL_REPOS="shangkuns/pt12-3w-comet2-20260204022222 shangkuns/pt12-2w-comet2-20260205151209 shangkuns/cosmos-pi05-sft-pt12-20260203145532 shangkuns/pt12-3w-20260204011934"
# RUN pip install --no-cache-dir "huggingface_hub[cli]" \
#     && mkdir -p /opt/eval/models \
#     && for repo in $HF_MODEL_REPOS; do \
#         name="${repo#*/}"; \
#         hf download "$repo" --repo-type model --local-dir "/opt/eval/models/$name"; \
#     done


RUN cd ${EVAL_ROOT} \
&& cp -r openpi-comet/src/behavior/learning/* BEHAVIOR-1K/OmniGibson/omnigibson/learning/

# 
ENV OPENPI_DATA_HOME=/opt/openpi-cache
RUN mkdir -p /opt/openpi-cache/big_vision \
    && cp ${EVAL_ROOT}/b1k-eval-utils/tokenizer.model /opt/openpi-cache/big_vision/paligemma_tokenizer.model

# Install huggingface-hub in the default Python environment
RUN python -m pip install huggingface-hub wandb