Ubuntu 18.04 に TensorFlow Docker を導入する
前回の記事で、Ubuntu 18.04 に GPU Docker 環境を導入しました。
今回はこの Docker 上で TensorFlow Docker を動かしてみたいと思います。
TensorFlow Docker とは
Docker を使用すると、ホストマシンに必要なのは NVIDIA® GPU ドライバだけになるので、Linux で TensorFlow の GPU サポートを有効にする際の最も簡単な方法となります(NVIDIA® CUDA® ツールキットのインストールは不要です)。
TensorFlow Docker の公式サイト には上記のことが書かれています。
これはかなり大きいメリットだと思います。
TensorFlow のバージョンによって CUDA とか CuDNN の必要なバージョンも変わります。
一つの環境でやる分には良いですが、お客さんごとに使っている環境が違う場合、これが致命的になります。
TensorFlow Docker があれば、一つのマシンで複数の CUDA / CuDNN のバージョンを切り替えられることになるので、とってもありがたいのです。
所望のバージョンの TensorFlow Docker を pull する
以下のサイトから所望のバージョンを探します。
バージョンや中に入っているパッケージの種類ごとにタグが切られています。
たとえばバージョン 2.0.0 で GPU サポートあり、Python3、jupyter 環境込であれば、
2.0.0-gpu-py3-jupyter
となります。
見つかったら Ubuntu のコンソールで以下のようにコマンドを叩きます。
$ docker pull tensorflow/tensorflow:2.0.0-gpu-py3-jupyter
TensorFlow Docker を起動する
先程の公式サイトでは、GPU を使う方法として、nvidia-container-toolkit の昔のやり方が書かれていました。
でも前回の記事のとおり GPU サポートのコマンドが変わりましたので、こちらでは新しい方法で起動してみます。
上で pull した TensorFlow Docker は、GPU サポートあり、jupyter パッケージ込みのものです。
これをDocker で起動するには以下のようにします。
docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:2.0.0-gpu-py3-jupyter
-
- gpus all のところが、以前と変わった部分です。
- p 8888:8888 は、Docker 内の Jupyter サーバーに、Docker 外からアクセスできるようにするためのポート指定です。
このコマンドを叩くと以下のような出力がでました。
________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ 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... [I 02:37:54.373 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret jupyter_http_over_ws extension initialized. Listening on /http_over_websocket [I 02:37:54.485 NotebookApp] Serving notebooks from local directory: /tf [I 02:37:54.485 NotebookApp] The Jupyter Notebook is running at: [I 02:37:54.485 NotebookApp] http://6aacb5541856:8888/?token=16cd1462e9d40ba3b91a837c2240f097ab75ed173a3bec14 [I 02:37:54.486 NotebookApp] or http://127.0.0.1:8888/?token=16cd1462e9d40ba3b91a837c2240f097ab75ed173a3bec14 [I 02:37:54.486 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 02:37:54.488 NotebookApp] To access the notebook, open this file in a browser: file:///root/.local/share/jupyter/runtime/nbserver-1-open.html Or copy and paste one of these URLs: http://6aacb5541856:8888/?token=16cd1462e9d40ba3b91a837c2240f097ab75ed173a3bec14 or http://127.0.0.1:8888/?token=16cd1462e9d40ba3b91a837c2240f097ab75ed173a3bec14
出力された URL に Ubuntu のブラウザーでアクセスすると、おなじみの Jupyter 画面が出力されます。
これだけで、GPU サポート込みの環境が作れるとは、ちょっと驚きの快適さでした...
Ubuntu 18.04 に Docker で GPU Deep Learning 環境を構築する
前回の記事で、GPU マシンに Ubuntu 18.04 のインストール、および NVidia GPU Driver のインストールが完了しました。
今回はそこに Docker を入れて、GPU powered Deep Learning 環境を構築したいと思います。
NVidia を Docker 上で使う方法
歴史的な経緯から、NVidia on Docker のやり方が今まで変遷してきたようです。
Docker 19.03 から、Docker がネイティブで GPU のサポートをしたことで、NVidia on Docker のやり方がシンプルになりました。
そのへんの経緯は以下のエントリーが非常に参考になります。
今回は歴史的なしがらみもなく新しくインストールしますので、Docker 19.03 以降のやり方で進めます。
Docker の最新バージョン (19.03) をインストール
公式サイトの手順に沿って進めれば無事にインストールできました。
ここに写経しても良いのですが、Docker はどんどん更新されるようなので、上のページを見ていただくのが間違いないと思います。
記事を更新した時点 (2020/02/14) では、"Install using the repository" 内の SET UP THE REPOSITORY、INSTALL DOCKER ENGINE - COMMUNITY を行えば問題なくインストールされました。
nvidia-container-toolkit パッケージをインストール
Github の公式ページにやり方が書いてあります。
Ubuntu 18.04 のところに従って、以下のようにすれば完了です。
# Add the package repositories distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - 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-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker
動作確認
これも nvidia-container-toolkit の Github に書いてありますが、動作確認は以下のようにします。
$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi
私の環境では以下のような表示になりました。
Fri Feb 14 01:55:03 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.59 Driver Version: 440.59 CUDA Version: 10.2 | |-------------------------------+----------------------+----------------------+ | 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 RTX 208... Off | 00000000:01:00.0 On | N/A | | 17% 32C P8 17W / 250W | 788MiB / 11016MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+
あとがき
昔、Windows 上に GPU Deep Learning 環境を構築するときはえらい手こずった記憶があります...
それに比べるとこの手軽さはすごくなりました...
最初の Ubuntu インストールのほうがよっぽど手間取りましたね...
次回はこの環境で Tensorflow Docker を動作させたいと思います。
GeForce RTX 2080 Ti マシンに Ubuntu 18.04 インストール
OS なしの PC を購入し、そこに Ubuntu 18.04 をインストールした記録です。
やはり GPU マシンのセットアップは一筋縄ではいきませんでした...
OS のインストール
画面出力
次にマシンを起動し、BIOS 画面 (私の PC は Delete 連打で入れました) を起動。
起動するデバイスの優先順位を USB Flash Memory が 1 番になるように変更。
そして再起動すると...
(画像はここから引用)
なんですかこれ。。
Couldn't get size というエラーとともに画面がめっちゃ乱れていました。。。
いろいろと調べてみると、どうやら GPU 関連の問題のようでした。
マザーボードから映像出力すれば良いよ!とかセキュアブートを切れば良いよ!とかいう記載もありましたが、どちらもうまくいかず。
さらに調べたら、以下のエントリーに救われました。
Install Ubuntu のメニュー画面で "e" キーを押し、linux 行の最後に nomodeset を追加すれば良いとのことです。
これで無事に Ubuntu のインストール画面までいけました。
Ubuntu インストール
インストール画面までいけたのは良いのですが、ディスプレイがちゃんと認識されずに解像度が 1024 x 768 固定に...
この画面サイズだと、インストールの設定ダイアログが全部入らないのです...
しかもダイアログのサイズは変更できず。。
なんとかキーボードと勘をたよりにパーティション設定も完了。。
インストールの最後で、再起動する前に以下のことをする必要があります。
- /etc/default/grub の書き換え
#GRUB_CMDLINE_LINUX="" GRUB_CMDLINE_LINUX="nomodeset"
そして再起動。
無事に Ubuntu のインストールできました。
解像度はおかしいままですが。。
GPU Driver インストール
次に GeForce RTX 2080 Ti のドライバーをインストールします。
以下のサイトがとっても参考になりました。
少し違っていたのは、現時点での NVidia 最新ドライバーを入れたので、ドライバーの URL は下記でした。
http://jp.download.nvidia.com/XFree86/Linux-x86_64/440.59/NVIDIA-Linux-x86_64-440.59.run
あと、sudo telinit 3 をしたら画面が消えてしまったので、ケーブルの抜き差しをしたり Ctrl+Alt+F1 をしたら先に進めました。
とりあえず今回はここまで。
次回は CUDA 関連のセットアップをする予定です。