NVIDIA GPU + Docker + TensorFlow 導入
はじめに
TensorFlow 2.0 Alpha のプレビューが始まった.
TensorFlow も CUDA も使ってみたかったので,この機会にちょっと触ってみる.
母艦をできるだけ汚したくないのでDockerで動かす.
TensorFlowの導入手順をベースにしつつ,適宜寄り道しながら進める.
環境準備
nvidia-dockerの手順によると必要なものはこれ.
- GNU/Linux x86_64 with kernel version > 3.10
- Docker >= 1.12
- NVIDIA GPU with Architecture > Fermi (2.1)
- NVIDIA drivers ~= 361.93 (untested on older versions)
確認しみると
$ uname -r 3.10.0-957.5.1.el7.x86_64
- Docker
- yum でインストールしたままでOK ではない...ので入れ直し...
$ docker -v Docker version 1.13.1, build 07f3374/1.13.1
- NVIDIA Arch
- NVIDIA Tesla - Wikipedia
- GeForce GTX 1060 グラフィックスカード | GeForce
- GTX1060 は Pascal で Fermi 以上なのでOK
- NVIDIA drivers
- heavymoon.hateblo.jp
- 前にドライバ入れたのでOK
$ nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.93 Driver Version: 410.93 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | 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 106... Off | 00000000:01:00.0 On | N/A | | 0% 47C P5 9W / 120W | 797MiB / 6075MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 5342 G /usr/lib64/firefox/firefox 1MiB | | 0 8874 G /usr/bin/nvidia-settings 1MiB | | 0 15494 G /usr/bin/X 504MiB | | 0 16250 G cinnamon 126MiB | | 0 25161 G ...uest-channel-token=17082780505565724006 160MiB | +-----------------------------------------------------------------------------+
Docker 導入
単にyumからインストールしたDockerは古くて使えない.Dockerの手順にならいインストールし直す.
古いDocker削除
$ yum list installed | grep -i docker docker.x86_64 2:1.13.1-91.git07f3374.el7.centos docker-client.x86_64 2:1.13.1-91.git07f3374.el7.centos docker-common.x86_64 2:1.13.1-91.git07f3374.el7.centos $ sudo yum remove docker docker-client docker-common
リポジトリ設定
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo $ yum check-update
インストール
$ sudo yum -y install docker-ce $ docker -v Docker version 18.09.3, build 774a1f4
かなりバージョンが上がりました.
nvidia-docker2 導入
リポジトリ設定
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo $ sudo yum check-update
インストール
$ sudo yum -y install nvidia-docker2 $ sudo systemctl enable docker.service $ sudo systemctl start docker.service
インストールついでにDockerを動かしておく.
TensorFlow 導入
TensorFlow Docker image ダウンロード
$ sudo docker pull tensorflow/tensorflow $ sudo docker pull tensorflow/tensorflow:latest-gpu $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE tensorflow/tensorflow latest-gpu d786239380f8 5 days ago 3.37GB tensorflow/tensorflow latest 2ebc856b5e27 5 days ago 1.04GB
イメージがでかい.
コンテナ化
$ sudo docker run --runtime=nvidia -it tensorflow/tensorflow:latest-gpu bash ________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ WARNING: You are running this container as root, which can cause new files in mounted volumes to be created as the root user on your host machine. To avoid this, run the container by specifying your user's userid: $ docker run -u $(id -u):$(id -g) args... root@f2097cd19609:/# root@f2097cd19609:/# pip list DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. Package Version -------------------- -------------------- absl-py 0.7.0 astor 0.7.1 backports.weakref 1.0.post1 enum34 1.1.6 funcsigs 1.0.2 futures 3.2.0 gast 0.2.2 google-pasta 0.1.4 grpcio 1.19.0 h5py 2.9.0 Keras-Applications 1.0.7 Keras-Preprocessing 1.0.9 Markdown 3.0.1 mock 2.0.0 numpy 1.16.2 pbr 5.1.3 pip 19.0.3 protobuf 3.7.0 setuptools 40.8.0 six 1.12.0 tb-nightly 1.14.0a20190301 tensorflow-gpu 2.0.0a0 termcolor 1.1.0 tf-estimator-nightly 1.14.0.dev2019030115 Werkzeug 0.14.1 wheel 0.29.0 root@f2097cd19609:/# pip show tensorflow-gpu DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. Name: tensorflow-gpu Version: 2.0.0a0 Summary: TensorFlow is an open source machine learning framework for everyone. Home-page: https://www.tensorflow.org/ Author: Google Inc. Author-email: packages@tensorflow.org License: Apache 2.0 Location: /usr/local/lib/python2.7/dist-packages Requires: google-pasta, enum34, protobuf, keras-preprocessing, gast, astor, absl-py, six, wheel, numpy, termcolor, tb-nightly, tf-estimator-nightly, backports.weakref, grpcio, mock, keras-applications Required-by: root@f2097cd19609:/# nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.93 Driver Version: 410.93 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | 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 106... Off | 00000000:01:00.0 On | N/A | | 0% 50C P8 9W / 120W | 474MiB / 6075MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+
とりあえず TensorFlow GPU image をコンテナ化して入ってみた.
おわりに
とりあえず環境は整ったので今回はここまで.
ついで(?)にはてなのCSSを変更して,結構大きめのディスプレイ幅で表示できるようにした.
ちなみに
$ sudo yum install nvidia-docker2 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.riken.jp * epel: ftp.riken.jp * extras: ftp.riken.jp * updates: ftp.riken.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ nvidia-docker2.noarch 0:2.0.3-1.docker18.09.3.ce を インストール --> 依存性の処理をしています: nvidia-container-runtime = 2.0.0-1.docker18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> 依存性の処理をしています: docker-ce = 3:18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> トランザクションの確認を実行しています。 ---> パッケージ nvidia-container-runtime.x86_64 0:2.0.0-1.docker18.09.3 を インストール --> 依存性の処理をしています: nvidia-container-runtime-hook < 2.0.0 のパッケージ: nvidia-container-runtime-2.0.0-1.docker18.09.3.x86_64 ---> パッケージ nvidia-docker2.noarch 0:2.0.3-1.docker18.09.3.ce を インストール --> 依存性の処理をしています: docker-ce = 3:18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> トランザクションの確認を実行しています。 ---> パッケージ nvidia-container-runtime-hook.x86_64 0:1.4.0-2 を インストール --> 依存性の処理をしています: libnvidia-container-tools < 2.0.0 のパッケージ: nvidia-container-runtime-hook-1.4.0-2.x86_64 --> 依存性の処理をしています: libnvidia-container-tools >= 0.1.0 のパッケージ: nvidia-container-runtime-hook-1.4.0-2.x86_64 ---> パッケージ nvidia-docker2.noarch 0:2.0.3-1.docker18.09.3.ce を インストール --> 依存性の処理をしています: docker-ce = 3:18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> トランザクションの確認を実行しています。 ---> パッケージ libnvidia-container-tools.x86_64 0:1.0.1-1 を インストール --> 依存性の処理をしています: libnvidia-container1(x86-64) >= 1.0.1-1 のパッケージ: libnvidia-container-tools-1.0.1-1.x86_64 --> 依存性の処理をしています: libnvidia-container.so.1(NVC_1.0)(64bit) のパッケージ: libnvidia-container-tools-1.0.1-1.x86_64 --> 依存性の処理をしています: libnvidia-container.so.1()(64bit) のパッケージ: libnvidia-container-tools-1.0.1-1.x86_64 ---> パッケージ nvidia-docker2.noarch 0:2.0.3-1.docker18.09.3.ce を インストール --> 依存性の処理をしています: docker-ce = 3:18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> トランザクションの確認を実行しています。 ---> パッケージ libnvidia-container1.x86_64 0:1.0.1-1 を インストール ---> パッケージ nvidia-docker2.noarch 0:2.0.3-1.docker18.09.3.ce を インストール --> 依存性の処理をしています: docker-ce = 3:18.09.3 のパッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch --> 依存性解決を終了しました。 エラー: パッケージ: nvidia-docker2-2.0.3-1.docker18.09.3.ce.noarch (nvidia-docker) 要求: docker-ce = 3:18.09.3 問題を回避するために --skip-broken を用いることができます。 これらを試行できます: rpm -Va --nofiles --nodigest