深層学習のための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>の位置からアクセスできる
- ボリュームマウントとバインドマウントがあって,これは後者.