サイトアイコン CV & Technologies

DockerでChainer (GPU版)インストール

概要

今回は、すでにchainerがインストールされているDockerイメージに少しだけ手を加えて、OpenCVとJupyter Notebookが使えるようなイメージを作成します。GPUをDocker上で使うためにはdockerコマンドの代わりにnvidia-dockerコマンドを使う必要がありますが、GPUコードを書かない場合にはdockerで十分です。CentOS7へのDockerのインストール方法はこちら

Dockerfile

#Dockerfile

FROM chainer/chainer

COPY Anaconda3-5.0.1-Linux-x86_64.sh /opt

# install anaconda3
RUN apt-get update -y
RUN apt-get install -y wget bzip2 ca-certificates \
    libglib2.0-0 libxext6 libsm6 libxrender1 \
    git mercurial subversion
    
RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
    /bin/bash /opt/Anaconda3-5.0.1-Linux-x86_64.sh -b -p /opt/conda && \
    rm /opt/Anaconda3-5.0.1-Linux-x86_64.sh
    
ENV PATH /opt/conda/bin:$PATH

RUN pip install opencv-python
RUN pip install jupyter chainer

RUN apt-get install -y nano \
    && rm -rf /var/lib/apt/lists/*

イメージのビルド

AnacondaのサイトからAnaconda3-5.0.1-Linux-x86_64.shを先にダウンロードしてDockerfileと同じディレクトリに入れておきます。

ls
------------------------------
Anaconda3-5.0.1-Linux-x86_64.sh   Dockerfile
------------------------------
docker build -t chainer_jupyter .
------------------------------
Successfully tagged chainer_jupyter:latest
------------------------------

起動

nvidia-dockerを使います。GPUコードを書かない場合にはdockerで十分です。ホストの8888番ポートを起動するイメージの8888番ポートに転送します。表示されるURLにアクセスすればJupyterが表示されるはずです。Dockerをリモートで起動している場合には、http://0.0.0.0:8888/?token=a530bd6d2cf2ca23f6e279a7c424c5c7a076484fbde192f8の0.0.0.0の部分だけ、そのリモートのIPに置き換えます。

nvidia-docker run -it -p 8888:8888 chainer_jupyter:latest /bin/bash
cd home && jupyter notebook --ip=0.0.0.0 --allow-root
------------------------------
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://0.0.0.0:8888/?token=a530bd6d2cf2ca23f6e279a7c424c5c7a076484fbde192f8
------------------------------

Dockerのファイル掃除

いろいろ試行錯誤しているうちに余計なファイルが溜まるので、その削除方法です。

docker rm $(docker ps -aq) #すべてのコンテナを削除
docker images | awk '/<none/{print $3}' | xargs docker rmi #タグがnoneになっているimageを削除
モバイルバージョンを終了