Ubuntu18.04 NVIDIA DockerとTensorflow-gpuの環境構築
最終更新日  2019/08/19
使用OS ver Ubuntu18.04
Proxy    あり
目次: Ubuntu18.04
Docker上でGPUを使うためのOSSを導入しよう
はじめに
下記作業が完了していること
Ubuntu18.04 Dockerの導入と設定
Ubuntu18.04にNVIDIAのドライバとCUDA tool kitを入れる
nvidia-docker インストール
*CPU環境では不要です
下記手順は公式の手順通り
nvidia-dockerのGPG keyを追加する
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
OKと出るはず
distributionを設定
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
特にエラーがでなければOK
リストに追加
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
アップデートをかける
$ sudo apt update
インストール
$ sudo apt install nvidia-docker2
※エラーが出たが、rebootするとinstallできた
再起動(これやらないとdocker runでimageを引っ張ってこれない)
$ reboot
Proxy設定
Proxy環境下ではコンテナも設定しないとネットに繋がらないので設定する
ディレクトリ作成
$ mkdir ~/.docker
$ vi ~/.docker/config.json
code: config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy.xxx.xxxx.co.jp:8080",
"httpsProxy": "http://proxy.xxx.xxxx.co.jp:8080",
"noProxy": ""
}
}
}
tensorflowのimageを落とす
tensor-flowのイメージを落としてsmiを表示(CUDA10.0なので1.14.0)
$ docker run --runtime=nvidia --rm -it tensorflow/tensorflow:1.14.0-gpu-py3-jupyter nvidia-smi
run : コンテナを生成し起動する
--rumtime : コンテナで使うラインタイムを指定する
--rm : コンテナ終了時に自動的に削除
-it : コンソールに結果を出力する
tensorflow/tensorflow:1.14.0-gpu-py3 : 今回利用したイメージ
GPUを使っているか確認
$ docker run --runtime=nvidia --rm -it tensorflow/tensorflow:1.14.0-gpu-py3-jupyter python
Pythonが開くので下記コードでGPUを使っているか確認
code: python
import tensorflow as tf
tf.test.gpu_device_name()
GPU:0と出ればOK
コンテナ起動からjupyter notebookで保存
やりたいこと
Dockerは仮想環境なので基本Hostにファイルは残らない
コンテナに保存したノートを、Host側に残したい
やったこと
Hostのhome/notebooksをマウントし、tf/notebooksと接続
tf/notebooksに保存したnoteはすべてhome/notebooksに同期保存される
以下手順(pwdを使っているので、Run時Hostは必ずhomeにいること!!!)
bashでinしディレクトリ構造やエントリディレクトリを確認
$ docker run --runtime=nvidia -it --rm -v $(pwd)/work:/tf/work -p 8888:8888 tensorflow/tensorflow:1.14.0-gpu-py3-jupyter /bin/bash
tfディレクトリにinしていることが確認できる
-w /workdirを入れるとworkdirからinできるけど、jupyter notebookがtfでinしているので上の階層に行けず詰む。注意。
dockerを起動
$ docker run --runtime=nvidia --rm -it -p 8888:8888 --name genmai -v $(pwd)/work:/tf/work -w /tf tensorflow/tensorflow:1.14.0-gpu-py3-jupyter
引数の意味
--rm
終了時にコンテナ削除
-it
フォアグラウンド・モード。ターミナルでコンテナを実行することができる
-i : STDINをアタッチ。コンソールからの入力が指定したdockerコンテナ内に流れる。
-t : dockerコンテナに疑似ターミナル(tty)割当て。dockerコンテナ内のコンソールを表示する
exitでターミナル終了。コンテナも停止する。終了したくない場合は「CTRL + p + q」で抜ける
-p 8888:8888
コンテナのポートを8888でホスト側に公開する
-v $(pwd)/notebook:/tf/notebooks
現在のディレクトリ(testdir)とdocker内のworkdirを繋ぐ
-w /tf
docker内で初期コマンドを動かすディレクトリを指定(/workdir)
下記のような表示がでる
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://(45fbfb0734ae or 127.0.0.1):8888/?token=43bfb34329848b962610ae7400aa2a57148fbf5098437b0a
jupyternotebookを起動
ブラウザで下記URLへGo(クリックしたら飛ぶよ)
http://127.0.0.1:8888/
jupyter notebookのログイン画面に飛ぶので、ターミナルで表示されたtokenを入れてログイン
今回の表示だと「43bfb34329848b962610ae7400aa2a57148fbf5098437b0a」
tf/notebooksにFashionMnistのノートがある。コンテナのProxyが通っているかの確認も含めて動かしてみよう
https://gyazo.com/d3cdc61e651acbf00e2b3f1df901ce23
FashionMnistが動いたら、あとはいつもどおりnewしてゴリゴリ書くだけ
基本操作Tips
imageを消す
全imageを調べる
$ docker image ls
code:console
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda 9.0-runtime 741f48edc60d 4 weeks ago 902MB
nvidia/cuda 10.0-base-ubuntu18.04 a55b7fc6f6a0 5 weeks ago 135MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
tensorflow/tensorflow 1.10.0-gpu-py3 0b4ceed1758b 9 months ago 3.08GB
消す
$ docker image rm <IMAGE ID>
※消せない場合
コンテナが起動しているかも
稼働しているコンテナを調べる
$ docker ps -a
消したいImageを使っているコンテナがあれば、消す
$ docker rm <CONTAINER ID>
Host->コンテナへデータを送る
起動中のコンテナIDを調べる
$ docker ps -a
コピーコマンドで送る
$ sudo docker cp <ファイル名> <コンテナID>:<パス>
例えば下記
$ sudo docker cp test.png a8f3757b35d5:/tf/notebooks
test.pngをコンテナID「a8f3757b35d5」のtf/notebooksディレクトリに送っている
その他Tips
内部調査
dockerコンテナ「genmai」にbashで入る
$ docker exec -it genmai bash
OSを調べる
# cat /etc/lsb-release
pythonのverを調べる
# python --version
pipで入っているものを調べる
# pip list
work/ の権限
work/の権限がロックかかっているので、work以下すべてを開放する
$ sudo chmod -R 777 work/
http://dr-asa.hatenablog.com/entry/2017/08/21/185301
https://qiita.com/mktshhr/items/d6eda04e3b4eae8fd51d