深層学習のためのDocker(3)

Dockerエンジンをsudoなしで使う

毎回sudoでdockerを使うのは共有サーバーとかだと好ましくない(?)のでsudoなしでdockerを使いたい. ホストOSで対象ユーザーをdockerグループに追加する.

# dockerグループが存在するか
$ cat /etc/group | grep docker

# ユーザーをグループに追加
$ sudo usermod -aG docker <user>

# ユーザーにログインし直す

これでsudoなしで実行できるようになる.

Dockerコンテナ内で生成したファイルをホストのユーザーが編集する

前章でsudoなしでコンテナを起動できるようになったが,普通にdocker runするとコンテナ内にrootでログインしている. この状態で例えばモデルを学習して学習済みパラメータをマウントしたディレクトリに保存すると,ホストOSのユーザーからするとsudoしないとそのファイルを編集できない. これだと結局ホストOSでsudoが必要になるので嬉しくない.

簡単な解決策は,コンテナ内で生成したファイル全般を,コンテナ内からchmodで権限を777に変更してしまうこと. 誰でも編集できてしまうがとりあえずこれで解決できる.

他にもホストとコンテナ内でユーザーとグループのidを一致させる方法がある.これだとホストOSで該当ユーザーだけが編集できる状態になる. ただ,コンテナ内に該当ユーザーを生成する手順が若干面倒なので,これについては後日やる.

Dockerfileの準備

以下は個人的に研究で使うためのもの.

FROM nvidia/cuda:11.4.1-cudnn8-runtime-ubuntu18.04

# Python install
RUN apt-get update && \
    apt-get install python3-pip -y

# Python libs install
RUN pip3 install cupy-cuda114 && \
    pip3 install chainer && \
    pip3 install pillow && \
    pip3 install matplotlib && \
    pip3 install pybullet && \
    pip3 install gym

# ViZDoom install; https://github.com/mwydmuch/ViZDoom#python-quick-start
RUN apt-get install cmake libboost-all-dev libsdl2-dev libfreetype6-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libjpeg-dev libbz2-dev libfluidsynth-dev libgme-dev libopenal-dev zlib1g-dev timidity tar nasm -y && \
    pip3 install vizdoom

# others
RUN pip3 install torch && \
    pip3 install pyyaml

Dockerfileからイメージを作成

$ docker build -t <付けたいイメージの名前> <Dockerfileのディレクトリ>

NVIDIA-Dockerを使ってイメージをコンテナ化してbashに入る

$ docker run --gpus all -v $HOME:$HOME -i -t <イメージ名> /bin/bash
  • -v $HOME:$HOMEを指定すると,ubuntuならホストの/home/<username> がコンテナ内の/home/<username>の位置からアクセスできる
  • ボリュームマウントとバインドマウントがあって,これは後者.