Docker

DockerでTensorflowのGPU動作環境を用意する方法

DockerでTensorflowのGPU動作環境を用意する方法
naoki-hn

Dockerを利用してTensorflowのGPU動作環境を用意する方法について解説します。

Dockerを用いてTensorflowのGPU動作環境を用意する

Dockerはコンテナ型仮想環境を用意することができるプラットフォームです。また、Tensorflowは、Googleが開発したディープラーニングのライブラリです。

本記事では、Dockerを用いてTensorflowのGPU動作環境(具体的にはJupyter Notebook環境)を用意する方法について紹介します。

GPU(Graphics Processing Unit)はゲームなどのリアルタイム画像処理などに特化したプロセッサユニットで、CPUに比べてクロック数が低いものの並列演算に優れています。その特性を活かしてディープラーニングの計算などでGPUが利用されています。

NVIDIAのGPUで汎用的な計算を使う場合にはCUDA(compute unified device architecture: クーダ)と呼ばれるライブラリが使用されます。ディープラーニングで有名な「Tensorflow」や「PyTorch」といったフレームワークもGPUの計算処理はCUDAを利用する設計になっています。

NVIDIAのグラフィックボードを搭載してGPUを使えるPCがあったとしても、上記のCUDAの設定などGPUを使うときには環境設定が少し大変です。

今回紹介するのはDockerを用いてGPUが利用可能なTensorflowが使えるJupyter Notebook環境準備方法です。Dockerを用いることで面倒な環境構築を省くことができます。

注意点

本記事で紹介する内容は、NVIDIAのGPUが使用可能なマシンでのみ実行可能ですので注意していください。

Dockerを使用する際には、Docker Desktopのインストールが必要です。インストールされていない方は、以降の説明の手順を実行する前にDocker Desktopのインストールをしてください。

Windows用のインストール方法は「Docker Desktop for Windowsのインストール方法」を参考にしてください。

Dockerイメージの取得

Dockerでは、Docker Hubで様々なイメージが公開されています。今回はhttps://hub.docker.com/r/tensorflow/tensorflowから「tensorflow/tensorflow:2.9.1-gpu-jupyter」を取得してみます。

コマンドプロンプトで以下を実行することで、Dockerイメージを取得することができます。

docker pull tensorflow/tensorflow:2.9.1-gpu-jupyter

Dockerイメージの取得が完了すると以下のような感じになります。

>docker pull tensorflow/tensorflow:2.9.1-gpu-jupyter
2.9.1-gpu-jupyter: Pulling from tensorflow/tensorflow
d5fd17ec1767: Pull complete
50b37fabf1b7: Pull complete
269c6117408b: Pull complete
(=====途中省略=====)
0e6c59c4ca3a: Pull complete
bdadb13361a8: Pull complete
8c0bbe097530: Pull complete
Digest: sha256:6345c1f2eaaf7b8efc9b8ec7f62869e6490db80e07ae5b856d5c16b48146daae
Status: Downloaded newer image for tensorflow/tensorflow:2.9.1-gpu-jupyter
docker.io/tensorflow/tensorflow:2.9.1-gpu-jupyter

取得済みのDockerイメージ一覧は、「docker images」で確認ができます。

>docker images
REPOSITORY                     TAG                 IMAGE ID       CREATED        SIZE
tensorflow/tensorflow          2.9.1-gpu-jupyter   5f9e07bacf1d   6 weeks ago    6.07GB

上記のように表示されれば、Dockerイメージの取得は完了です。

コンテナの作成と実行

tensorflow-gpu-jupyterの起動

Dockerのイメージの取得が完了したら、コンテナを起動します。以下のようなコマンドを実行してください。「D:\docker\jupyter_notebbok_tensorflow_gpu」の部分はお使いの環境の任意のフォルダを指定してください。コマンドの意味については後述しますので、まずは起動して使い始める方法として読み進めてください。

docker run --rm -it -p 8888:8888 -v D:\docker\jupyter_notebbok_tensorflow_gpu:/tf/work tensorflow/tensorflow:2.9.1-gpu-jupyter

上記のように実行すると、Jupyterが起動します。コマンドプロンプトを見てもらうと「http://127.0.0.1:8888/?token=xxxxxxxxxx」というような記載の文字列の場所があるかと思います。

xxxxxxxxの部分は接続のためのトークンで起動ごとに異なります。このURLをブラウザに入力して実行してください。以下のようなJupyter Notebookの画面が起動します。

Jupyter Notebook

workをクリックするとworkフォルダへ移動できます。後述しますが、workフォルダとローカルフォルダをマウントする設定で起動しているため、ローカルにファイルを保存したい場合は、workフォルダ内にファイルを作成してください。

後の使い方は通常のJupyter Notebookと同じです。

起動コマンドの補足説明

以降でDockerコンテナ起動時に実行した以下コマンドについて補足説明します。

docker run --rm -it -p 8888:8888 -v D:\docker\jupyter_notebbok_tensorflow_gpu:/tf/work tensorflow/tensorflow:2.9.1-gpu-jupyter

ポートの接続

Dockerでは、コンテナ側のポートとホストマシン(実行しているPC)のポートを結びつけることができます。その際には「-p」オプションで指定します。

Jupyter Notebookは標準で8888番ポートで運用されます。「8888:8888」の部分は、ホスト側の8888番ポートとコンテナ側の8888番ポートを接続するという意味になります。

フォルダのマウント

Dockerでは、コンテナを削除してしまうとデータが消えてしまいます。そのため、「-v」オプションで、ホスト側のフォルダとコンテナ側のディレクトリをマウントします。

今回の例ではホスト側の「D:\docker\jupyter_notebbok_tensorflow_gpu」とコンテナの「/tf/work」をマウントしています。このようにしておくことで、workフォルダ内に作成したファイルなどは「D:\docker\jupyter_notebbok_tensorflow_gpu」配下に保存されます。ホスト側のパスについては、お使いの環境の任意のパスを指定してください。

これによりコンテナを削除してもファイルは残り続けます。また、他のDockerコンテナと共有して使うこともできるようになります。

まとめ

Dockerを用いてTensorflowのGPU動作環境(具体的にはJupyter Notebook環境)を用意する方法について紹介しました。

GPUを使うためにはCUDAの設定など環境構築が必要です。私もNVIDIAのグラフィックボードを搭載しているPCにCUDAを入れてみて動かしてみようとしてなかなかうまく動かない状況に直面したことがあります。こういった時にDockerで簡単に環境構築できるのはとても便利です。

これからTensorflowを使ったディープラーニングを学ぼうという人で、NVIDIAのグラフィックボードを搭載しているPCをお持ちの方は今回紹介したようにDocker環境を作って使ってみると良いかと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました