中規模のネットワークをgcpで学習したかったけれど手順が結構めんどうだったのでメモ。tensorflowはソースコードからビルドするので結構時間がかかっている。
この記事を読むと分かること
- AWSしか使ったことない人がGoogle Cloudをなんとなく使えるようになる
- gcp vm上でのtensorflowのビルド、gcp storageを介した学習データのやり取り
下準備
まず、Google Cloudのアカウントを作りましょう。
次に、好きな名前でプロジェクトを作ります。AWSと違い、GCPはプロジェクトごとにインスタンスとか権限とかを管理します。
最後に、作ったプロジェクトにクレジットカード等の支払い情報を追加します。
あとは、Google Cloud SDKを手元のPCにインストールすれば下準備は完了です:
Cloud SDKをインストールすると、ターミナルでgsutilとかgcloudとかのコマンドが使えるようになります。インスタンスへのssh接続もgcloudコマンドで行います。
- GCPはプロジェクトごとにインスタンスとかを管理する
- ssh接続とかもローカルのコマンドが準備されている
GPUインスタンスの準備
では、GPUインスタンスを用意しましょう。ちなみに2018年6月5日現在だとTPUも使うことができますが、1時間で700円ぐらいするので利用するにしてもよほど高速化したくて、さらにTPUでの恩恵が受けられることが分かっている状態に限られるでしょう。
なので、本記事では普通のGPUインスタンスを使います。なおGCPではインスタンスのことをvmと呼ぶので以下vmと記述します。
GPUの割当申請
GPUインスタンスと言っても、GCPの場合は任意構成のvmにGPUを接続する形になります。そしてGPUを接続するには、アカウントにavailableなGPUが割り当てられている必要があります。
なので最初はGPUの割当申請をしましょう。
- GCPコンソールにアクセスし、先ほど作ったプロジェクトが選択されていることを確認します。
- 左上のナビゲーションメニューから、「IAMと管理」>「割り当て」を選択。
- 「指標」>「すべての指標」>「なし」をクリック
- 「指標」に「gpu」と入力し、任意のgpuを選択します。今回は最も安いk80を選びました。
- 「asia-east1」の「Compute Engine API」をチェックし、「割り当てを編集」
- 名前、メールアドレス、電話番号を入力した後、割り当ててほしい数を入力します。
- リクエストの説明は、「Deep Leariningのテストに使うため」とかで良いでしょう。
- 申請すると、数分から1時間ぐらいで割り当てられます。メールは2通きて、一回目は割り当ての承認、二回目は割り当て作業の完了。
これでGPUが使用可能になりました。次にgpuを付けてvmを起動します。
- GPUを利用可能にしてもらうための申請が必要
vmの起動
ここは簡単ですね。
- 「Compute Engine」>「VMインスタンス」を選択
- 「インスタンスを作成」
- リージョンは「asia-east1」(GPUが割り当てられたリージョン)を指定
- 「マシンタイプ」>「カスタマイズ」>「GPU」から割り当てられたGPUを選択
- ブートディスクは「Ubuntu 16.04 LTS」を選択
- pcのターミナルから、gcloud compute ssh [ノード名] でssh接続可能
TensorFlowのビルド
参考

注意点
1つ目の参考記事に沿っていけばビルドできます。違う点や注意点は以下。
- tensorflowはcloneしたあと任意のバージョン(例えばr1.8)をcheckoutした。
- mediumの仕様から、ダブルクオーテーションはへんなunicodeになっている。テキストエディタで入力し直すこと。
- mediumの仕様から、URLが長すぎて省略されている場所があるので注意
- cudaは9.0、cuDNNは7.1を使った。
GCP Storageへのアップロード
学習データ等は、GCP Storageへのアップロード → vmへのダウンロード という手順となります。
- Storageでバケットを作成。ストレージクラスはRegionalで、vmのある場所を選択
- ブラウザからファイルをアップロード or gsutilコマンド( gsutil cp -r [ディレクトリ] gs://[BUCKET_NAME] )でアップロード
- vm上でダウンロード( gsutil cp -r gs://[BUCKET_NAME] [OBJECT_DESTINATION] )
gsutilの方が速いので推奨です。
ブラウザからアップロードする場合の注意点:
- タブがバックグラウンドにあると遅いので独立ウインドウにする
- chrome://flagsでQUICを無効にするとちょっと速くなる(ことがある)
あとは、学習用のソースコードをgit cloneとかしてきて実行するだけです。一度vmを作ってしまえば、新規vmはスナップショットから作成できるので便利です。
コメント