概要
TensorBoardはCloud Storageにある学習結果ファイルを参照できるっぽいのだけれど、ローカルからCloud Storageにアクセスするのに環境構築や権限設定が面倒だったので、App Engineに環境を作ってTensorBoardにアクセスできるようにした。
といいますか、公式がそういう便利なのを用意してくれてたので、ありがたく利用させてもらいます。
GoogleCloudPlatform/appengine-tensorboard
https://github.com/GoogleCloudPlatform/appengine-tensorboard
Google App Engineを使用すると、小さなコストで認証を使用して永続的なTensorboardサーバを簡単に取得できます。
さらに、Tensorboardサーバーを起動するときにGCSから大量のデータを取得する場合は、GCSとGAE間のデータ出力に料金を払わないため、実際には永続的なGAEサーバーの料金が少なくなることがあります。
(Google翻訳)
仕組み的にはoauth2_proxyでユーザー認証の上、デプロイ時に設定したCloud Storageの指定バケットをlog_dirとして参照できるみたいです。
手順
プロジェクトファイルのダウンロード
> git clone https://github.com/GoogleCloudPlatform/appengine-tensorboard.git
> cd appengine-tensorboard
OAuth2の設定
ここではGCPの認証を利用します。
GCP管理コンソールの[APIとサービス]にある[認証情報]を開く。
[認証情報を作成]ボタンから[OAuthクライアントIDの作成]をクリック
以下の内容を選択・入力して[作成]ボタンをクリック
- アプリケーションの種類: ウェブアプリケーション
- 名前: 適当に
- 承認済みのJavaScriptを生成: 空でOK
- 承認済みのリダイレクトURI: あとから設定するので空でおk
これで、OAuth2認証用のクライアントIDとクライアントシークレットが発行されます。
OAuth2 Proxyの設定を行います。
> cp example_oauth2_proxy.cfg oauth2_proxy.cfg
> vi oauth2_proxy.cfg
-client_id = "my-client-id"
-client_secret = "myclientsecret"
+client_id = "GCP認証情報のクライアントID"
+client_secret = "GCP認証情報のクライアントシークレット"
App Engineの設定を行います。
> cp example-app.yaml app.yaml
> vi app.yaml
もし既存のGCPプロジェクトにデプロイする場合、service
指定しないと、default
にデプロイされてしまうので、ご注意ください。
runtime: custom
env: flex
+service: サービス名
threadsafe: true
resources:
memory_gb: 32
cpu: 8
automatic_scaling:
max_num_instances: 1
env_variables:
- EVENT_FILE_PATH: gs://ml-workshop/output/mnist_hptuning10
+ EVENT_FILE_PATH: gs://任意のバケット/output/TensorFlowの結果フォルダ
RELOAD_INTERVAL: 600
- GCS_PROXY_CONFIG: gs://ml-workshop/oauth2_proxy.cfg
+ GCS_PROXY_CONFIG: gs://任意のバケット/oauth2_proxy.cfg
RELOAD_INTERVAL: 600
App Engineへデプロイ
oauth2_proxy.cfgをCloud Storageへコピーします。
バケットがなかったら作成しておきましょう。
> gsutil cp oauth2_proxy.cfg gs://任意のバケット/oauth2_proxy.cfg
TensorFlowの結果についてもCloud Storageへコピーしておきましょう。
> gsutil cp -r TensorFlowの結果フォルダ gs://任意のバケット/output/
では、App Engineへデプロイします。
GoogleさんがDockerイメージを用意してくれているので、それをデプロイする感じです。
> gcloud app deploy app.yaml --image-url=gcr.io/google-samples/appengine-tensorboard:latest
(略)
Deployed service [サービス名] to [https://サービス名-dot-プロジェクトID.appspot.com]
You can stream logs from the command line by running:
$ gcloud app logs tail -s サービス名
To view your application in the web browser run:
これでURLがきまりましたので、先程作成した、認証情報の[承認済みのリダイレクトURI]に設定しておきましょう。
アクセスしてみる。
では、App Engineにデプロイできたので、URLへアクセスしてみましょう。
> open https://サービス名-dot-プロジェクトID.appspot.com
で、認証したら無事にTensorBoardが表示されました。
やったぜ。
注意点としては、Dockerイメージが用意されていますが、TensorFlowのバージョンが古め(0.8.0)なところでしょうか。
参考
GoogleCloudPlatform/appengine-tensorboard
https://github.com/GoogleCloudPlatform/appengine-tensorboard