nvidia-docker2で機械学習の環境構築


はじめに

Dockerの運用が必要になったので環境構築してみました

環境

Docker のインストール

aptのパッケージリストを更新する

sudo apt update -y

必要なソフトウェアのインストールする

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

docker公式のGPG公開鍵をインストールする

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

リポジトリを追加する

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再度パッケージリストを最新の状態に更新する

sudo apt update -y

Docker CEをインストールする

sudo apt-get install -y docker-ce

ユーザーをグループに所属させる(sudoなしで実行できるようにする)

sudo gpasswd -a user docker

nvidia-docker2.0 のインストール

旧バージョンのnvidia-docker 1.0がある場合は削除する

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker

nvidia-dockerの公開鍵を取得してインストールする

curl -sL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

変数を設定する

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

リポジトリを追加する

curl -sL https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

再度パッケージリストを最新の状態に更新する

sudo apt update -y

nvidia-docker2.0 をインストール

sudo apt install nvidia-docker2 -y

デーモン起動を起動する

sudo pkill -SIGHUP dockerd

Dockerfile を作る

Dockerfileを作ります

FROM nvidia/cuda:10.1-devel-ubuntu18.04
ENV CUDNN_VERSION 7.6.4.38
RUN apt-get update && apt-get install -y --no-install-recommends \
    libcudnn7=$CUDNN_VERSION-1+cuda10.1 \
libcudnn7-dev=$CUDNN_VERSION-1+cuda10.1 \
&& \
    apt-mark hold libcudnn7 && \
    rm -rf /var/lib/apt/lists/*

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
RUN apt-get update && apt-get install -y  \
    wget \
    curl \
    make \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    llvm \
    libncurses5-dev \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libffi-dev \
    liblzma-dev \
    vim

WORKDIR /root/
RUN wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz \
    && tar xvf Python-3.7.0.tar.xz \
    && cd Python-3.7.0 \
    && ./configure --enable-optimizations \
    && make altinstall
RUN rm Python-3.7.0.tar.xz

WORKDIR /root/Python-3.7.0
RUN ln -fs /root/Python-3.7.0/python /usr/bin/python
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python 

WORKDIR /root/
ADD requirements.txt /root/
RUN pip install -r requirements.txt && rm requirements.txt

ENV PYTHONPATH "${PYTHONPATH}:/usr/local/lib/python3.7/site-packages"
CMD ["/bin/bash"]

イメージを作る

Dockerfileをもとにイメージを作る

docker image build -t cuda-10.1-cudnn7.6 .

コンテナを作る

ホストのディレクトリをコンテナにマウントする

docker container run -it --runtime=nvidia -h hoge --mount type=bind,src=/hoge/base,dst=/root/dst cuda-10.1-cudnn7.6

結果

とりあえず学習ができているはず