From 1e83a27beefa993005081d4f608a9ec1e1b95505 Mon Sep 17 00:00:00 2001 From: Zach Dwiel Date: Tue, 25 Sep 2018 16:14:14 -0400 Subject: [PATCH] update dockerfile and makefile --- docker/Dockerfile | 114 ++++++++++++++++++++++++++++++------ docker/Makefile | 13 +++- docker/docker_entrypoint.sh | 21 +++++++ 3 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 docker/docker_entrypoint.sh diff --git a/docker/Dockerfile b/docker/Dockerfile index c05d8bc..a59a688 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,20 +1,97 @@ -FROM ubuntu:16.04 +FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 -RUN apt-get update \ - && apt-get install -y \ - python3-pip cmake zlib1g-dev python3-tk python-opencv \ - libboost-all-dev \ - libblas-dev liblapack-dev libatlas-base-dev gfortran \ - libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev \ - libsmpeg-dev libportmidi-dev libavformat-dev libswscale-dev \ - dpkg-dev build-essential python3.5-dev libjpeg-dev libtiff-dev \ - libsdl1.2-dev libnotify-dev freeglut3 freeglut3-dev libsm-dev \ - libgtk2.0-dev libgtk-3-dev libwebkitgtk-dev libgtk-3-dev \ - libwebkitgtk-3.0-dev libgstreamer-plugins-base1.0-dev \ - libav-tools libsdl2-dev swig +# https://github.com/NVIDIA/nvidia-docker/issues/619 +RUN rm /etc/apt/sources.list.d/cuda.list +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get clean autoclean && \ + apt-get autoremove -y +RUN apt-get update && \ + apt-get install -y python-pip && \ + apt-get clean autoclean && \ + apt-get autoremove -y +RUN pip install pip --upgrade +WORKDIR /root -# installing python dependencies +################################ +# Install apt-get Requirements # +################################ + +# General +RUN apt-get install python3-pip cmake zlib1g-dev python3-tk python-opencv -y + +# Boost libraries +RUN apt-get install libboost-all-dev -y + +# Scipy requirements +RUN apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran -y + +# Pygame requirements +RUN apt-get install libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev -y +RUN apt-get install libsmpeg-dev libportmidi-dev libavformat-dev libswscale-dev -y + +# Dashboard +RUN apt-get install dpkg-dev build-essential python3.5-dev libjpeg-dev libtiff-dev libsdl1.2-dev libnotify-dev \ + freeglut3 freeglut3-dev libsm-dev libgtk2.0-dev libgtk-3-dev libwebkitgtk-dev libgtk-3-dev \ + libwebkitgtk-3.0-dev libgstreamer-plugins-base1.0-dev -y + +# Gym +RUN apt-get install libav-tools libsdl2-dev swig cmake -y + +# Mujoco_py +RUN apt-get install curl libgl1-mesa-dev libgl1-mesa-glx libglew-dev libosmesa6-dev software-properties-common -y + +# ViZDoom +RUN apt-get install build-essential zlib1g-dev libsdl2-dev libjpeg-dev \ + nasm tar libbz2-dev libgtk2.0-dev cmake git libfluidsynth-dev libgme-dev \ + libopenal-dev timidity libwildmidi-dev unzip wget -y + +# cleanup apt-get +RUN apt-get clean autoclean && \ + apt-get autoremove -y +############################ +# Install Pip Requirements # +############################ RUN pip3 install --upgrade pip +RUN pip3 install pytest +RUN pip3 install pytest-xdist + +# initial installation of coach, so that the docker build won't install everything from scratch +RUN pip3 install rl_coach>=0.10.0 + +# install additional environments +RUN pip3 install gym[atari]==0.10.5 +RUN pip3 install mujoco_py==1.50.1.56 +RUN pip3 install vizdoom==1.1.6 + +# FROM ubuntu:16.04 +# +# RUN apt-get update \ +# && apt-get install -y \ +# python3-pip cmake zlib1g-dev python3-tk python-opencv \ +# libboost-all-dev \ +# libblas-dev liblapack-dev libatlas-base-dev gfortran \ +# libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev \ +# libsmpeg-dev libportmidi-dev libavformat-dev libswscale-dev \ +# dpkg-dev build-essential python3.5-dev libjpeg-dev libtiff-dev \ +# libsdl1.2-dev libnotify-dev freeglut3 freeglut3-dev libsm-dev \ +# libgtk2.0-dev libgtk-3-dev libwebkitgtk-dev libgtk-3-dev \ +# libwebkitgtk-3.0-dev libgstreamer-plugins-base1.0-dev \ +# libav-tools libsdl2-dev swig +# +# # installing python dependencies +# RUN pip3 install --upgrade pip + +RUN apt-get update && apt-get install -y wget zip +RUN mkdir -p ~/.mujoco \ + && wget https://www.roboti.us/download/mjpro150_linux.zip -O mujoco.zip \ + && unzip mujoco.zip -d ~/.mujoco \ + && rm mujoco.zip +COPY ./mjkey.txt /root/.mujoco/ +ENV LD_LIBRARY_PATH /root/.mujoco/mjpro150/bin:$LD_LIBRARY_PATH + +RUN curl -o /usr/local/bin/patchelf https://s3-us-west-2.amazonaws.com/openai-sci-artifacts/manual-builds/patchelf_0.9_amd64.elf \ + && chmod +x /usr/local/bin/patchelf RUN mkdir /root/src COPY setup.py /root/src/. @@ -22,12 +99,11 @@ COPY requirements.txt /root/src/. COPY README.md /root/src/. WORKDIR /root/src RUN pip3 install -e . -# + +# everything above here should be cached most of the time COPY . /root/src WORKDIR /root/src RUN pip3 install -e . -# RUN pip3 install rl_coach - -# CMD ["coach", "-p", "CartPole_PG", "-e", "cartpole"] -# CMD python3 rl_coach/rollout_worker.py --preset CartPole_DQN_distributed +RUN chmod 777 /root/src/docker/docker_entrypoint.sh +ENTRYPOINT ["/root/src/docker/docker_entrypoint.sh"] diff --git a/docker/Makefile b/docker/Makefile index 9881378..5a82500 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -34,8 +34,17 @@ build: shell: build ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} /bin/bash -test: build - ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} py.test tests +unit_tests: build + ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} python3 -m pytest rl_coach/tests -m unit_test -n 8 + +integration_tests: build + ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} python3 -m pytest rl_coach/tests -m integration_test -n auto + +golden_tests: build + ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} python3 rl_coach/tests/golden_tests.py + +trace_tests: build + ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} python3 rl_coach/tests/trace_tests.py -prl run: build ${DOCKER} run ${RUN_ARGUMENTS} -it ${IMAGE} diff --git a/docker/docker_entrypoint.sh b/docker/docker_entrypoint.sh new file mode 100644 index 0000000..9b19f90 --- /dev/null +++ b/docker/docker_entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/sh +set -e + +# # download mjpro150 +# mkdir /root/.mujoco +# cd /root/.mujoco +# wget https://www.roboti.us/download/mjpro150_linux.zip +# unzip mjpro150_linux.zip + +# copy the mujoco license key into the container +# echo $MUJOCO_KEY | base64 --decode > /root/.mujoco/mjkey.txt +# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/.mujoco/mjpro150/bin + +# git clone https://github.com/deepmind/dm_control.git +# pip3 install ./dm_control + +export VIZDOOM_ROOT=`pip show vizdoom 2>/dev/null | awk '/Location/{print $2}'`/vizdoom + +cd /root/src/ + +exec "$@"