Add docker images that support headless GUI. Update installation and quickstart docs

This commit is contained in:
LinxiFan 2020-04-13 14:25:12 -07:00
parent fcdd08c8f1
commit 8f61abcae9
13 changed files with 265 additions and 90 deletions

48
docker/base/Dockerfile Normal file
View File

@ -0,0 +1,48 @@
from nvidia/cudagl:10.0-base-ubuntu18.04
ARG CUDA=10.0
ARG CUDNN=7.6.2.24-1
RUN apt-get update && apt-get install -y --no-install-recommends \
curl build-essential git cmake \
cuda-command-line-tools-10-0 \
cuda-cublas-10-0 \
cuda-cufft-10-0 \
cuda-curand-10-0 \
cuda-cusolver-10-0 \
cuda-cusparse-10-0 \
libcudnn7=${CUDNN}+cuda${CUDA} \
vim \
tmux \
libhdf5-dev \
libsm6 \
libxext6 \
libxrender-dev \
wget
# Install miniconda to /miniconda
RUN curl -LO http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh
RUN bash Miniconda-latest-Linux-x86_64.sh -p /miniconda -b
RUN rm Miniconda-latest-Linux-x86_64.sh
ENV PATH=/miniconda/bin:${PATH}
RUN conda update -y conda
RUN conda create -y -n py3-igibson python=3.6.8
# Python packages from conda
ENV PATH /miniconda/envs/py3-igibson/bin:$PATH
RUN pip install pytest
RUN pip install tensorflow-gpu==1.15.0
RUN git clone --branch master https://github.com/StanfordVL/iGibson /opt/igibson --recursive
WORKDIR /opt/igibson
RUN pip install -e .
RUN git clone https://github.com/StanfordVL/agents/ /opt/agents
WORKDIR /opt/agents
RUN pip install -e .
RUN python -m gibson2.utils.assets_utils --download_assets
RUN python -m gibson2.utils.assets_utils --download_demo_data
WORKDIR /opt/igibson/examples/demo

8
docker/base/build.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
IMAGE=igibson/igibson
export DOCKER_BUILDKIT=1
docker build -t $IMAGE:v0.0.4 . \
&& docker tag $IMAGE:v0.0.4 $IMAGE:latest \
&& echo BUILD SUCCESSFUL

3
docker/base/run.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
docker run --gpus all -ti --rm igibson/igibson:latest

View File

@ -0,0 +1,25 @@
FROM igibson/igibson:latest
# add dummy display and remote GUI via x11VNC
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
xserver-xorg-video-dummy \
xfce4 desktop-base \
x11vnc net-tools
# disable screensaver
RUN apt autoremove -y xscreensaver
# optional: if you want a richer desktop experience
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
xfce4-terminal firefox
RUN echo 2 | update-alternatives --config x-terminal-emulator
# ==== end of optional =====
RUN mkdir -p /opt/misc /opt/logs
COPY x-dummy.conf /opt/misc
COPY entrypoint.sh /opt/misc
ENV QT_X11_NO_MITSHM=1
ENV DISPLAY=:0
WORKDIR /opt/igibson/examples/demo
ENTRYPOINT ["/opt/misc/entrypoint.sh"]

8
docker/headless-gui/build.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
IMAGE=igibson/igibson-gui
export DOCKER_BUILDKIT=1
docker build -t $IMAGE:v0.0.4 . \
&& docker tag $IMAGE:v0.0.4 $IMAGE:latest \
&& echo BUILD SUCCESSFUL

View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
VNC_PASSWORD=${VNC_PASSWORD:-112358}
# start X server with dummy display on :0
X -config /opt/misc/x-dummy.conf > /opt/logs/x-dummy.log 2>&1 &
sleep 2
# start xcfe desktop
startxfce4 > /opt/logs/xcfe4.log 2>&1 &
# start x11VNC server. Must publish port 5900 at `docker run`
x11vnc -display :0 -noxrecord -noxfixes -noxdamage -forever -passwd $VNC_PASSWORD > /opt/logs/x11vnc.log 2>&1 &
"$@"

34
docker/headless-gui/run.sh Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
VNC_PORT=5900
VNC_PASSWORD=112358
PARAMS=
while (( "$#" )); do
case "$1" in
-p|--vnc-port)
VNC_PORT=$2
shift 2
;;
-pw|--vnc-password)
VNC_PASSWORD=$2
shift 2
;;
--) # end argument parsing
shift
break
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
exit 1
;;
*) # preserve positional arguments
PARAMS="$PARAMS $1"
shift
;;
esac
done
echo Starting VNC server on port $VNC_PORT with password $VNC_PASSWORD
echo please run \"python simulator_example.py\" once you see the docker command prompt:
docker run --gpus all -ti -p $VNC_PORT:5900 -e VNC_PASSWORD=$VNC_PASSWORD --rm igibson/igibson-gui:latest bash

View File

@ -0,0 +1,25 @@
Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# https://arachnoid.com/modelines/
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection
Section "Device"
Identifier "Card0"
Driver "dummy"
VideoRam 256000
EndSection
Section "Screen"
DefaultDepth 24
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 24
Modes "1920x1080_60.00"
EndSubSection
EndSection

8
docker/pull-images.sh Executable file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
VERSION=0.0.4
docker pull igibson/igibson:v$VERSION
docker pull igibson/igibson:latest
docker pull igibson/igibson-gui:v$VERSION
docker pull igibson/igibson-gui:latest

8
docker/push-images.sh Executable file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
VERSION=0.0.4
docker push igibson/igibson:v$VERSION
docker push igibson/igibson:latest
docker push igibson/igibson-gui:v$VERSION
docker push igibson/igibson-gui:latest

View File

@ -3,32 +3,7 @@ There are two steps to install iGibson, the Interactive Gibson Environment, on y
First, you need to install the simulation environment. Then, you need to download the assets: models of the robotic agents, the interactive objects and 3D reconstructed real-world large environments for your agents to train.
### Installing the Environment
We provide two methods to install the simulator.
First, iGibson's simulator can be installed as a python package using pip:
```bash
pip install gibson2
# run the demo
python -m gibson2.envs.demo
python -m gibson2.envs.demo_interactive
```
Alternatively, it can be compiled from source: [iGibson GitHub Repo](https://github.com/StanfordVL/iGibson)
```bash
git clone https://github.com/StanfordVL/iGibson --recursive
cd iGibson
conda create -n py3-igibson python=3.6 anaconda
source activate py3-igibson
pip install -e .
```
We recommend the second method if you plan to modify iGibson in your project. If you plan to use it as it is to train navigation and manipulation agents, the pip installation should meet your requirements.
#### System Requirements
### System Requirements
The minimum system requirements are the following:
@ -39,7 +14,55 @@ The minimum system requirements are the following:
Other system configurations may work, but we haven't tested them extensively and we probably won't be able to provide as much support as we want.
### Downloading the Assets
## Installing the Environment
We provide 3 methods to install the simulator.
### 1. pip
iGibson's simulator can be installed as a python package using pip:
```bash
pip install gibson2
# run the demo
python -m gibson2.envs.demo
python -m gibson2.envs.demo_interactive
```
### 2. Docker image
Docker provides an easy way to reproduce the development environment across platforms without manually installing the software dependencies. We have prepared docker images that contain everything you need to get started with iGibson.
First, install Docker from the [official website](https://www.docker.com/). Please make sure that the docker version is at least v19.0 to enable native GPU support.
Next, download our pre-built images with the script in the `iGibson` repo:
```
cd iGibson
./docker/pull-images.sh
```
Two images will be downloaded:
* `igibson/igibson:latest`: smaller image, but does not support GUI.
* `igibson/igibson-gui:latest`: supports GUI and remote desktop access via VNC.
### 3. Compile from source
Alternatively, iGibson can be compiled from source: [iGibson GitHub Repo](https://github.com/StanfordVL/iGibson)
```bash
git clone https://github.com/StanfordVL/iGibson --recursive
cd iGibson
conda create -n py3-igibson python=3.6 anaconda
source activate py3-igibson
pip install -e .
```
We recommend the third method if you plan to modify iGibson in your project. If you plan to use it as it is to train navigation and manipulation agents, the pip installation or docker image should meet your requirements.
## Downloading the Assets
First, create a folder to contain all the iGibson's assets (robotic agents, objects, 3D environments, etc.) and set the path in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `your_installation_path/gibson2/assets`).
@ -61,64 +84,6 @@ python -m gibson2.utils.assets_utils --download_dataset URL
```
### (Optional) Create a docker image for iGibson
If you want to install gibson for cross-platform use and don't want to set up the dependencies. You can use the
following Dockerfile to create a docker image for using iGibson. `nvidia-docker` is required to run this docker image.
```text
from nvidia/cudagl:10.0-base-ubuntu18.04
ARG CUDA=10.0
ARG CUDNN=7.6.2.24-1
RUN apt-get update && apt-get install -y --no-install-recommends \
curl build-essential git cmake \
cuda-command-line-tools-10-0 \
cuda-cublas-10-0 \
cuda-cufft-10-0 \
cuda-curand-10-0 \
cuda-cusolver-10-0 \
cuda-cusparse-10-0 \
libcudnn7=${CUDNN}+cuda${CUDA} \
vim \
tmux \
libhdf5-dev \
libsm6 \
libxext6 \
libxrender-dev \
wget
# Install miniconda to /miniconda
RUN curl -LO http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh
RUN bash Miniconda-latest-Linux-x86_64.sh -p /miniconda -b
RUN rm Miniconda-latest-Linux-x86_64.sh
ENV PATH=/miniconda/bin:${PATH}
RUN conda update -y conda
RUN conda create -y -n py3-igibson python=3.6.8
# Python packages from conda
ENV PATH /miniconda/envs/py3-igibson/bin:$PATH
RUN pip install pytest
RUN pip install tensorflow-gpu==1.15.0
RUN git clone --branch master https://github.com/StanfordVL/iGibson /opt/igibson --recursive
WORKDIR /opt/igibson
RUN pip install -e .
RUN git clone https://github.com/StanfordVL/agents/ /opt/agents
WORKDIR /opt/agents
RUN pip install -e .
RUN python -m gibson2.utils.assets_utils --download_assets
RUN python -m gibson2.utils.assets_utils --download_demo_data
```
### Uninstalling
Uninstalling iGibson is easy: `pip uninstall gibson2`

View File

@ -1,10 +1,10 @@
# Quickstart
### iGibson in Action
## iGibson in Action
Let's get our hands dirty and see iGibson in action.
```bash
cd demo/examples
cd examples/demo
python env_example.py
```
You should see something like this:
@ -18,7 +18,36 @@ If you want to have a virtual tour around the house yourself, you can click on t
That's it!
### Benchmarks
### Using Docker and remote GUI access via VNC
If you go the docker route, please first pull our pre-built images (see the installation guide). After downloading, run `docker images`, and you should see `igibson/igibson:latest` and `igibson/igibson-gui:latest`.
On a headless server (such as a Google Cloud or AWS instance), run
```
cd iGibson
./docker/headless-gui/run.sh
# run a GUI example after the container command line prompt shows:
python simulator_example.py
```
On your local machine, you can use any VNC client to visit the remote GUI at `<remote-ip>:5900` with the default password `112358`.
For example, Mac OS X provides a native app called [Screen Sharing](https://support.apple.com/guide/mac-help/share-the-screen-of-another-mac-mh14066/mac) that implements the VNC protocol.
To change the default port and password (must be 6 digits):
```
./docker/headless-gui/run.sh --vnc-port 5903 --vnc-password 654321
```
If you do not need GUI,
```
./docker/base/run.sh
# run a script after the container command line prompt shows:
python benchmark.py
```
## Benchmarks
Performance is a big designing focus for iGibson. We provide a few scripts to benchmark the rendering and physics
simulation framerate in iGibson.

View File

@ -8,8 +8,7 @@ from gibson2.core.render.profiler import Profiler
def main():
config_filename = os.path.join(os.path.dirname(gibson2.__file__),
'../examples/configs/turtlebot_demo.yaml')
config_filename = os.path.join('../configs/turtlebot_demo.yaml')
nav_env = NavigateRandomEnv(config_file=config_filename, mode='gui')
for j in range(10):
nav_env.reset()