目的
以前作っていた nvida-docker2 環境構築スクリプトを、改めて整理およびPyTorch1.1.0 に対応する。また、日本時刻にも対応する。
注意
GPU環境を使わない場合は、もっと簡易にPython 環境が構築できるので、あしからず。
環境
- OS:Ubuntu 18.04.2 LTS (Bionic Beaver)
- Memory: 64GiB
- CPU:Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz 4cores
- GPU:GeForce GTX 1080 Ti x 2
- CUDA:Cuda compilation tools, release 10.1, V10.1.105
- CUDA は、インストール済として進めます。
- github のtemplate/pypj/scripts/docker/install_cuda10.sh, install_cudnn.sh は、インストールの参考スクリプトです。
- Python 3.6.8
- docker コンテナに、インストールするPython のバージョン
コード
概説
準備
上記コードのgithub をclone する。
git clone https://github.com/tkosht/template.git
cd template
nvidia-docker2, docker-compose をインストール
cd $(git rev-parse --show-toplevel)/pypj/scripts/docker
sh install_docker.sh
nvidia-docker-compose をインストール
cd $(git rev-parse --show-toplevel)/pypj/scripts/docker
pip install nvidia-docker-compose
ビルド
docker-compose を使ってビルドする。
シンプルにPython環境をビルドする場合
cd $(git rev-parse --show-toplevel)/pypj/docker
docker-compose build simple
※ 同ディレクトリで、sh build.sh simple
と実行してもよい。
pyenv環境をビルドする場合
cd $(git rev-parse --show-toplevel)/pypj/docker
docker-compose build pyenv
※ 同ディレクトリで、sh build.sh pyenv
と実行してもよい。
両方ビルドする場合
cd $(git rev-parse --show-toplevel)/pypj/docker
docker-compose build
※ 同ディレクトリで、sh build.sh
と実行してもよい。
GPU環境の確認
Python環境
nvidia-smi コマンドを実行して、エラーが起きないことを確認する。
docker run --runtime=nvidia -it --rm gpuenv:simple nvidia-smi
Mon Jun 24 01:46:19 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 On | N/A |
| 26% 42C P8 9W / 250W | 602MiB / 11176MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:02:00.0 Off | N/A |
| 23% 33C P8 8W / 250W | 2MiB / 11178MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
pyenv環境
上記と同じように確認する。
docker run --runtime=nvidia -it --rm gpuenv:pyenv nvidia-smi
動作確認
PyTorch の example/vae を使って動作確認をする。
別のターミナルで、nvidia-smi -l 1
を実行すると良い。
d=$(git rev-parse --show-toplevel)/pypj
hostdir="$d/data" # host
labdir="/home/gpuser/pj/lab" # container
datadir="$labdir/examples/data" # container
workdir="$labdir/examples/vae" # container
mkdir -p $hostdir
opts="-v $hostdir:$datadir -w $workdir -it --rm"
docker run --runtime=nvidia $opts gpuenv:simple python main.py
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ../data/MNIST/raw/train-images-idx3-ubyte.gz
9920512it [00:09, 1076915.85it/s]
Extracting ../data/MNIST/raw/train-images-idx3-ubyte.gz
: --- 8< --- (snip) --- 8< --- 8< --- 8< --- 8< --- 8< ---
Train Epoch: 10 [56320/60000 (94%)] Loss: 107.074844
Train Epoch: 10 [57600/60000 (96%)] Loss: 108.066971
Train Epoch: 10 [58880/60000 (98%)] Loss: 103.747894
====> Epoch: 10 Average loss: 106.3138
====> Test set loss: 105.6189
※ 標準出力をバッファリングさせないように、-it
を指定している。
d=$(git rev-parse --show-toplevel)/pypj
hostdir="$d/data" # host
labdir="/home/gpuser/pj/lab" # container
datadir="$labdir/examples/data" # container
workdir="$labdir/examples/vae" # container
mkdir -p $hostdir
opts="-v $hostdir:$datadir -w $workdir -it --rm"
docker run --runtime=nvidia $opts gpuenv:pyenv python main.py