Docker

Docker はコンテナを使用して仮想環境を作成することにより、TensorFlow プログラムをシステムの他の部分から分離します。TensorFlow プログラムは、この仮想環境内で実行され、ホストマシンとリソースを共有できます(ディレクトリへのアクセス、GPU の使用、インターネットへの接続などが可能です)。TensorFlow Docker のイメージは、リリースごとにテストされます。

Docker を使用すると、ホストマシンに必要なのは NVIDIA® GPU ドライバだけになるので、Linux で TensorFlow の GPU サポートを有効にする際の最も簡単な方法となります(NVIDIA® CUDA® ツールキットのインストールは不要です)。

TensorFlow Docker の要件

  1. ローカル ホストマシンに Docker をインストールします。
  2. Linux で GPU サポートを有効にするには、NVIDIA Docker サポートをインストールします。
    • docker -v で Docker のバージョンを確認し、メモします。19.03 より前のバージョンでは nvidia-docker2 と --runtime=nvidia フラグが必要です。19.03 以降のバージョンでは、nvidia-container-toolkit パッケージと --gpus all フラグが必要です。どちらのオプションも上記のリンク先ページに記載されています。

TensorFlow Docker のイメージをダウンロードする

TensorFlow Docker の公式イメージは、tensorflow/tensorflow の Docker Hub リポジトリにあります。リリースされたイメージには、次の形式のタグが付いています

タグ 説明
latest TensorFlow CPU バイナリ イメージの最新リリース。デフォルト。
nightly TensorFlow のナイトリー ビルドのイメージ(不安定版)。
version TensorFlow のバイナリ イメージのバージョンを指定(例: 2.1.0)。
devel TensorFlow master 開発環境のナイトリー ビルド。TensorFlow のソースコードを含む。
custom-op TF カスタム オペレーションを開発するための特別な試験運用版イメージ。詳しくはこちらを参照してください。

各ベースタグには、機能を追加または変更するバリエーションがあります。

タグのバリエーション 説明
tag-gpu 指定するタグのリリースに GPU サポートを含める。下記をご覧ください
tag-jupyter 指定するタグのリリースに Jupyter を含める(TensorFlow チュートリアルの notebook も付属します)。

一度に複数のバリエーションを指定できます。たとえば、次のように TensorFlow のリリース イメージをマシンにダウンロードできます。

docker pull tensorflow/tensorflow                     # latest stable release
docker pull tensorflow/tensorflow:devel-gpu           # nightly dev release w/ GPU support
docker pull tensorflow/tensorflow:latest-gpu-jupyter  # latest release w/ GPU support and Jupyter

TensorFlow Docker コンテナを起動する

TensorFlow の設定コンテナを起動するには、次のコマンド形式を使用します。

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

詳細については、docker run のリファレンスをご覧ください。

CPU のみのイメージを使った例

latest タグが付いたイメージを使って、TensorFlow のインストールを検証しましょう。新しい TensorFlow イメージは、初めて実行されるときに Docker によりダウンロードされます。

docker run -it --rm tensorflow/tensorflow \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

TensorFlow Docker の使い方をもう少し紹介します。TensorFlow の設定コンテナ内で bash シェル セッションを開始します。

docker run -it tensorflow/tensorflow bash

コンテナ内で python セッションを開始して、TensorFlow をインポートできます。

ホストマシンで開発した TensorFlow プログラムをコンテナ内で実行するには、ホスト ディレクトリをマウントし、コンテナの作業ディレクトリを変更します(-v hostDir:containerDir -w workDir)。

docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py

コンテナ内で作成したファイルをホストに公開すると、権限の問題が発生することがあります。通常はホストシステム上でファイルを編集することをおすすめします。

TensorFlow のナイトリー ビルドを使用して Jupyter Notebook サーバーを起動します。

docker run -it -p 8888:8888 tensorflow/tensorflow:nightly-jupyter

手順に沿って、ホスト上のウェブブラウザで次の URL を開きます。http://127.0.0.1:8888/?token=...

GPU サポート

Docker を使用すると、ホストマシンに必要なのは NVIDIA® GPU ドライバだけになるので、GPU 上で TensorFlow を実行する際の最も簡単な方法となります(NVIDIA® CUDA® ツールキットは不要です)。

NVIDIA® GPU サポートを Docker に追加するには、NVIDIA Container Toolkit をインストールします。nvidia-container-runtime は Linux でのみ利用可能です。詳しくは、nvidia-container-runtime プラットフォーム サポートに関するよくある質問をご覧ください。

GPU が利用できるかどうかを確認します。

lspci | grep -i nvidia

nvidia-docker がインストールされたことを確認します。

docker run --gpus all --rm nvidia/cuda nvidia-smi

GPU 対応のイメージを使った例

GPU に対応する TensorFlow イメージをダウンロードして実行します(数分かかることがあります)。

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

GPU 対応のイメージの設定にはしばらく時間がかかることがあります。GPU ベースのスクリプトを繰り返し実行する場合は、docker exec を使うとコンテナを再利用できます。

最新の TensorFlow GPU イメージを使用して、コンテナ内で bash シェル セッションを開始します。

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash