子育てしながらエンジニアしたい

現在 7 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

Ubuntu 18.04 に TensorFlow Docker を導入する

前回の記事で、Ubuntu 18.04 に GPU Docker 環境を導入しました。

edosha.hatenablog.jp

今回はこの 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 する

以下のサイトから所望のバージョンを探します。

hub.docker.com

バージョンや中に入っているパッケージの種類ごとにタグが切られています。
たとえばバージョン 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 画面が出力されます。

f:id:edosha:20200218114341p:plain
Jupyter

これだけで、GPU サポート込みの環境が作れるとは、ちょっと驚きの快適さでした...

Ubuntu 18.04 に Docker で GPU Deep Learning 環境を構築する

前回の記事で、GPU マシンに Ubuntu 18.04 のインストール、および NVidia GPU Driver のインストールが完了しました。

edosha.hatenablog.jp

今回はそこに Docker を入れて、GPU powered Deep Learning 環境を構築したいと思います。

NVidia を Docker 上で使う方法

歴史的な経緯から、NVidia on Docker のやり方が今まで変遷してきたようです。
Docker 19.03 から、Docker がネイティブで GPU のサポートをしたことで、NVidia on Docker のやり方がシンプルになりました。
そのへんの経緯は以下のエントリーが非常に参考になります。

qiita.com

今回は歴史的なしがらみもなく新しくインストールしますので、Docker 19.03 以降のやり方で進めます。

  • 最新の NVIDIA ドライバーをインストール (前回の記事で済)
  • Docker の最新バージョン (19.03) をインストール
  • nvidia-container-toolkit パッケージをインストール

Docker の最新バージョン (19.03) をインストール

公式サイトの手順に沿って進めれば無事にインストールできました。

docs.docker.com

ここに写経しても良いのですが、Docker はどんどん更新されるようなので、上のページを見ていただくのが間違いないと思います。
記事を更新した時点 (2020/02/14) では、"Install using the repository" 内の SET UP THE REPOSITORY、INSTALL DOCKER ENGINE - COMMUNITY を行えば問題なくインストールされました。

nvidia-container-toolkit パッケージをインストール

Github の公式ページにやり方が書いてあります。

github.com

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 のインストール

ブート USB の作成

まず最初に以下のサイトなどを参考に Ubuntu 18.04 のブート USB を作成。

linuxfan.info

画面出力

次にマシンを起動し、BIOS 画面 (私の PC は Delete 連打で入れました) を起動。
起動するデバイスの優先順位を USB Flash Memory が 1 番になるように変更。
そして再起動すると...

f:id:edosha:20200212100419j:plain
Couldn't get size

(画像はここから引用)



なんですかこれ。。
Couldn't get size というエラーとともに画面がめっちゃ乱れていました。。。

いろいろと調べてみると、どうやら GPU 関連の問題のようでした。
マザーボードから映像出力すれば良いよ!とかセキュアブートを切れば良いよ!とかいう記載もありましたが、どちらもうまくいかず。
さらに調べたら、以下のエントリーに救われました。

qiita.com

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 のドライバーをインストールします。
以下のサイトがとっても参考になりました。

krhb.hatenablog.com

sy07-sub.hatenablog.com

少し違っていたのは、現時点での 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 関連のセットアップをする予定です。