TensorFlowのためのGPU環境をGCPのGoogle Compute Engine (GCE)で構築するには、

  • GPUの割り当て申請(初回のみ。所要時間は約5分)
  • TensorFlowをインストール(所要時間は約5分)
  • CUDAやcuDNNをインストール(NVIDIAのサイトからダウンロードしたりインストールしたりなんだりでスゲー時間かかって面倒)

って手順が必要。しかし最近、Cloud DatalabのGPUインスタンスが利用可能になったおかげで、この手順がぐんと簡単になった。

  • GPUの割り当て申請(所要時間は約5分)
  • Cloud Datalabインスタンスを作成(コマンド一発、待ち時間は15分ほど)

これでOK。DatalabインスタンスにはTensorFlowだけじゃなくて、scikit-learnとかpandas、matplotlib等の定番ツールも入ってるので、Anaconda的なお手軽環境をGPUインスタンス上でさくっと構成できる。

以下、その手順を解説する。

GPUの割り当て申請

GCPのGCEもしくはDatalabでGPUを使うには、初回のみ割り当て(クオータ)申請の手順が必要となる。申請とは言っても、べらぼうな数量を申請しない限り、2〜3分で割り当て許可が得られる(ちなみに、GCPの無料トライアルではGPU割り当て申請は行えない)。

まずはGCPのコンソールからIAMと管理-割り当てを選択する。指標フィルタのなしを選択してフィルタをクリアしたあと、NVIDIA P100またはK80を選ぶ。すると、GPU割り当ての一覧が絞り込み表示される。

Screen Shot 2017-12-31 at 11.16.21 AM.png

GPU割り当てはリージョンごとに設定する。ここでは東京リージョンasia-northeast1を選択し、割り当てを編集をクリックする。

Screen Shot 2017-12-31 at 11.29.48 AM.png

ここで、次に変更の部分に使用したいGPU数の上限を指定する。ここで指定した数値はあくまで上限値なので、どのような数字を入れてもこの時点で課金が発生することはない。とりあえず4個くらいを指定しておけば、さくっと自動承認されるはず。あまり大きな数(100個とか)を入れるとサポート担当者とのやり取りが必要となる。理由の部分にはGPUの使いみちを適当に書いておけばよい。

まもなくして、以下のような承認メールが届く。

Hello,

Your quota request for project 'xxx' has been approved and your quota has been adjusted accordingly.

The following quotas were increased:
+-------------------------+------------------+
| Region: asia-northeast1 | NVIDIA_P100_GPUS |
+-------------------------+------------------+
|         Changes         |      0 -> 4      |
+-------------------------+------------------+

これでP100を最大4個まで使う準備が整った。

Datalabインスタンスの作成

ここからはDatalabのQuickstartにしたがってGPUインスタンスを作成していく。以下に要点のみ書いておこう。

Google Cloud SDKのインストール

Datalab(というかGCPのいろいろなサービス)の利用にはGoogle Cloud SDKをインストールしておくと何かと都合がよいので、まずはこちらをインストールしておく。

Datalab GPUインスタンスの作成

DatalabのCPUインスタンスを作成するには、以下のようなコマンドオプションを指定する。

datalab beta create-gpu --machine-type n1-standard-8 --accelerator-type nvidia-tesla-p100 --acceletor-count 1 YOUR_INSTANCE_NAME

この例は、

  • --machine-typeとしてn1-standard-8(vCPUが8個)
  • --accelerator-type(GPU種別)はP100
  • --accelerator-count(GPU個数)は1個

という意味になる。YOUR_INSTANCE_NAME部分にはDatalabのインスタンス名を指定する。

このコマンドを実行すると、

$ datalab beta create-gpu --machine-type n1-standard-8 --accelerator-type nvidia-tesla-p100 --accelerator-count 2 YOUR_INSTANCE_NAME

By accepting below, you will download and install the following third-party software onto your managed GCE instances: NVidia GPU CUDA Toolkit Drivers: cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
Do you accept? (y/[n]): y

というプロンプトが表示されるのでyと入力。これにより、GPUドライバ付きのDatalabインスタンスの作成が開始する。

Due to GPU Driver installation, please note that Datalab GPU instances take significantly longer to startup compared to non-GPU instances.
Created [https://www.googleapis.com/compute/beta/projects/xxx/zones/asia-east1-a/instances/xxx].
Connecting to xxx.
This will create an SSH tunnel and may prompt you to create an rsa key pair. To manage these keys, see https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys
Waiting for Datalab to be reachable at http://localhost:8081/

このメッセージに書いてあるように、普通のDatalabインスタンスに比べて、GPU版は作成にすっごく長い時間がかかる。15分くらい。なので、この状態のまま放置しておこう。

しばらくすると、以下のメッセージが表示され、ブラウザ上にはDatalab画面が現れるはずだ。

The connection to Datalab is now open and will remain until this command is killed.
You can connect to Datalab at http://localhost:8081/

GPU動作の確認

では、GPUがきちんと動作しているのかDatalab上で確認しよう。Datalab画面でnotebooksフォルダを開き、Notebookをクリックして新規Notebookを作成する。

つづいて、TensorFlowドキュメントのUsing GPUsを参考に、以下のコードを実行してみる。

Screen Shot 2017-12-31 at 12.04.35 PM.png

こんなふうにエラーが発生せずに動作を確認できれば、GPUは正常に動作している。

これでTensorFlowをGPUで回す準備は整った。TFGANでガンガン遊んでみよう。


Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。