From e8f1ed6785741eb4c9cabbba50657342520c143b Mon Sep 17 00:00:00 2001 From: Nicklas Hansen Date: Sun, 21 Jan 2024 21:21:44 -0800 Subject: [PATCH] update dockerfile + pin all versions --- README.md | 18 ++++--- docker/Dockerfile | 44 +++++++++++---- docker/environment.yaml | 95 +++++++++++++++++++-------------- docker/environment_minimal.yaml | 39 -------------- tdmpc2/trainer/base.py | 2 +- 5 files changed, 98 insertions(+), 100 deletions(-) delete mode 100644 docker/environment_minimal.yaml diff --git a/README.md b/README.md index f724fa2..ef1c601 100755 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ Official implementation of -[TD-MPC2: Scalable, Robust World Models for Continuous Control](https://nicklashansen.github.io/td-mpc2) by +[TD-MPC2: Scalable, Robust World Models for Continuous Control](https://www.tdmpc2.com) by -[Nicklas Hansen](https://nicklashansen.github.io/), [Hao Su](https://cseweb.ucsd.edu/~haosu/)\*, [Xiaolong Wang](https://xiaolonw.github.io/)\* (UC San Diego)
+[Nicklas Hansen](https://nicklashansen.github.io), [Hao Su](https://cseweb.ucsd.edu/~haosu)\*, [Xiaolong Wang](https://xiaolonw.github.io)\* (UC San Diego)

-[[Website]](https://nicklashansen.github.io/td-mpc2) [[Paper]](https://arxiv.org/abs/2310.16828) [[Models]](https://nicklashansen.github.io/td-mpc2/models) [[Dataset]](https://nicklashansen.github.io/td-mpc2/dataset) +[[Website]](https://www.tdmpc2.com) [[Paper]](https://arxiv.org/abs/2310.16828) [[Models]](https://www.tdmpc2.com/models) [[Dataset]](https://www.tdmpc2.com/dataset) ---- @@ -18,7 +18,7 @@ TD-MPC**2** is a scalable, robust model-based reinforcement learning algorithm.
-This repository contains code for training and evaluating both single-task online RL and multi-task offline RL TD-MPC**2** agents. We additionally open-source **300+** [model checkpoints](https://nicklashansen.github.io/td-mpc2/models) (including 12 multi-task models) across 4 task domains: [DMControl](https://arxiv.org/abs/1801.00690), [Meta-World](https://meta-world.github.io/), [ManiSkill2](https://maniskill2.github.io/), and [MyoSuite](https://sites.google.com/view/myosuite), as well as our [30-task and 80-task datasets](https://nicklashansen.github.io/td-mpc2/dataset) used to train the multi-task models. Our codebase supports both state and pixel observations. We hope that this repository will serve as a useful community resource for future research on model-based RL. +This repository contains code for training and evaluating both single-task online RL and multi-task offline RL TD-MPC**2** agents. We additionally open-source **300+** [model checkpoints](https://www.tdmpc2.com/models) (including 12 multi-task models) across 4 task domains: [DMControl](https://arxiv.org/abs/1801.00690), [Meta-World](https://meta-world.github.io/), [ManiSkill2](https://maniskill2.github.io/), and [MyoSuite](https://sites.google.com/view/myosuite), as well as our [30-task and 80-task datasets](https://www.tdmpc2.com/dataset) used to train the multi-task models. Our codebase supports both state and pixel observations. We hope that this repository will serve as a useful community resource for future research on model-based RL. ---- @@ -29,17 +29,19 @@ You will need a machine with a GPU and at least 12 GB of RAM for single-task onl We provide a `Dockerfile` for easy installation. You can build the docker image by running ``` -cd docker && docker build . -t /tdmpc2:0.1.0 +cd docker && docker build . -t /tdmpc2:1.0.0 ``` -If you prefer to install dependencies manually, start by installing dependencies via `conda` by running one of the following commands: +This docker image contains all dependencies needed for running DMControl, Meta-World, and ManiSkill2 experiments. + +If you prefer to install dependencies manually, start by installing dependencies via `conda` by running the following command: ``` conda env create -f docker/environment.yaml -conda env create -f docker/environment_minimal.yaml +pip install gym==0.21.0 ``` -The `environment.yaml` file installs dependencies required for all environments, whereas `environment_minimal.yaml` only installs dependencies for training on DMControl tasks. +The `environment.yaml` file installs dependencies required for training on DMControl tasks. Other domains can be installed by following the instructions in `environment.yaml`. If you want to run ManiSkill2, you will additionally need to download and link the necessary assets by running diff --git a/docker/Dockerfile b/docker/Dockerfile index 7303219..52bc168 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,18 @@ ########################################## # Dockerfile for TD-MPC2 # -# TD-MPC2 Anonymous Authors, 2023 (c) # +# Nicklas Hansen, 2023 (c) # +# https://www.tdmpc2.com # # -------------------------------------- # -# Instructions: # -# docker build . -t /tdmpc2:0.1.0 # -# docker push /tdmpc2:0.1.0 # +# Build instructions: # +# docker build . -t /tdmpc2:1.0.0 # +# docker push /tdmpc2:1.0.0 # +# -------------------------------------- # +# Run: # +# docker run -i \ # +# -v //tdmpc2:/tdmpc2 \ # +# --gpus all \ # +# -t /tdmpc2:1.0.0 \ # +# /bin/bash # ########################################## # base image @@ -36,19 +44,15 @@ SHELL ["/bin/bash", "-c"] # conda environment COPY nvidia_icd.json /usr/share/vulkan/icd.d/nvidia_icd.json COPY environment.yaml /root -RUN conda env update -n base -f /root/environment.yaml && \ +RUN conda update conda && \ + conda env update -n base -f /root/environment.yaml && \ rm /root/environment.yaml && \ - cd /root && \ - python -m mani_skill2.utils.download_asset all -y && \ conda clean -ya && \ pip cache purge -# environment variables +# mujoco 2.1.0 ENV MUJOCO_GL egl -ENV MS2_ASSET_DIR /root/data ENV LD_LIBRARY_PATH /root/.mujoco/mujoco210/bin:${LD_LIBRARY_PATH} - -# mujoco (required for metaworld) RUN mkdir -p /root/.mujoco && \ wget https://www.tdmpc2.com/files/mjkey.txt && \ wget https://github.com/deepmind/mujoco/releases/download/2.1.0/mujoco210-linux-x86_64.tar.gz && \ @@ -57,3 +61,21 @@ RUN mkdir -p /root/.mujoco && \ mv mujoco210 /root/.mujoco/mujoco210 && \ mv mjkey.txt /root/.mujoco/mjkey.txt && \ python -c "import mujoco_py" + +# gym +RUN pip install gym==0.21.0 + +# metaworld +RUN pip install git+https://github.com/Farama-Foundation/Metaworld.git@04be337a12305e393c0caf0cbf5ec7755c7c8feb + +# maniskill2 +ENV MS2_ASSET_DIR /root/data +RUN pip install mani-skill2==0.4.1 && \ + cd /root && \ + python -m mani_skill2.utils.download_asset all -y + +# myosuite (conflicts with meta-world / mani-skill2) +# RUN pip install myosuite + +# success! +RUN echo "Successfully built TD-MPC2 Docker image!" diff --git a/docker/environment.yaml b/docker/environment.yaml index 6792839..2a2e5a5 100644 --- a/docker/environment.yaml +++ b/docker/environment.yaml @@ -5,49 +5,62 @@ channels: - conda-forge - defaults dependencies: - - python=3.9.0 - - pytorch - - torchvision - cudatoolkit=11.7 - - glew - - glib - - pip==21 + - glew=2.1.0 + - glib=2.68.4 + - pip=21.0 + - python=3.9.0 + - pytorch>=2.2.2 + - torchvision>=0.16.2 - pip: - - absl-py - - glfw - - kornia - - termcolor - - gym==0.21.0 - - moviepy - - ffmpeg - - imageio - - imageio-ffmpeg - - omegaconf - - hydra-core - - hydra-submitit-launcher - - submitit - - pandas - - patchelf - - protobuf - - tqdm - - transforms3d - - joblib - - opencv-python - - opencv-contrib-python - - filelock - - sapien==2.2.1 - - mani-skill2==0.4.1 - - trimesh - - open3d - - setuptools==65.5.0 + - absl-py==2.0.0 - "cython<3" + - dm-control==1.0.8 + - ffmpeg==1.4 + - glfw==2.6.4 + - hydra-core==1.3.2 + - hydra-submitit-launcher==1.2.0 + - imageio==2.33.1 + - imageio-ffmpeg==0.4.9 + - kornia==0.7.1 + - moviepy==1.0.3 - mujoco==2.3.1 - mujoco-py==2.1.2.14 - - dm-control - - pillow - - pyquaternion - - git+https://github.com/Farama-Foundation/Metaworld.git@04be337a12305e393c0caf0cbf5ec7755c7c8feb - # - myosuite # MyoSuite requires gym==0.13.0 which conflicts with Meta-World & ManiSkill2, install separately if needed - - tensordict-nightly - - torchrl-nightly - - wandb + - numpy==1.23.5 + - omegaconf==2.3.0 + - open3d==0.18.0 + - opencv-contrib-python==4.9.0.80 + - opencv-python==4.9.0.80 + - pandas==2.1.4 + - sapien==2.2.1 + - submitit==1.5.1 + - setuptools==65.5.0 + - patchelf==0.17.2.1 + - protobuf==4.25.2 + - pillow==10.2.0 + - pyquaternion==0.9.9 + - tensordict-nightly==2024.1.10 + - termcolor==2.4.0 + - torchrl-nightly==2024.1.10 + - transforms3d==0.4.1 + - trimesh==4.0.9 + - tqdm==4.66.1 + - wandb==0.16.2 + - wheel==0.38.0 + #################### + # Gym: + # (unmaintained but required for maniskill2/meta-world/myosuite) + # - gym==0.21.0 + #################### + # ManiSkill2: + # (requires gym==0.21.0 which occasionally breaks) + # - mani-skill2==0.4.1 + #################### + # Meta-World: + # (requires gym==0.21.0 which occasionally breaks) + # - git+https://github.com/Farama-Foundation/Metaworld.git@04be337a12305e393c0caf0cbf5ec7755c7c8feb + #################### + # MyoSuite: + # (requires gym==0.13 which conflicts with meta-world / mani-skill2) + # - myosuite + #################### diff --git a/docker/environment_minimal.yaml b/docker/environment_minimal.yaml deleted file mode 100644 index fbe30f6..0000000 --- a/docker/environment_minimal.yaml +++ /dev/null @@ -1,39 +0,0 @@ -name: tdmpc2 -channels: - - pytorch-nightly - - nvidia - - conda-forge - - defaults -dependencies: - - python=3.9.0 - - pytorch - - torchvision - - cudatoolkit=11.7 - - glew - - glib - - pip==21 - - pip: - - absl-py - - glfw - - kornia - - termcolor - - gym==0.21.0 - - moviepy - - ffmpeg - - imageio - - imageio-ffmpeg - - omegaconf - - hydra-core - - hydra-submitit-launcher - - submitit - - pandas - - patchelf - - protobuf - - tqdm - - setuptools==65.5.0 - - "cython<3" - - dm-control - - pillow - - tensordict-nightly - - torchrl-nightly - - wandb diff --git a/tdmpc2/trainer/base.py b/tdmpc2/trainer/base.py index aaf1a39..27a328d 100755 --- a/tdmpc2/trainer/base.py +++ b/tdmpc2/trainer/base.py @@ -7,8 +7,8 @@ class Trainer: self.agent = agent self.buffer = buffer self.logger = logger - print("Learnable parameters: {:,}".format(self.agent.model.total_params)) print('Architecture:', self.agent.model) + print("Learnable parameters: {:,}".format(self.agent.model.total_params)) def eval(self): """Evaluate a TD-MPC2 agent."""