web-dev-qa-db-ja.com

GoogleCloudのDockerでTensorboardを表示する

TensorFlowのTensorBoardをGoogleCloudのDockerに表示しようとしています。

http://tensorflow.org/how_tos/summaries_and_tensorboard/index.md

_tensorboard --logdir ./_

ApacheをGoogleCloudで実行しています(最初のコンテナー「ai-Unicorn」にある可能性があります。Dockerは独自のコンテナー「docker-playground」を作成しました)。 Google Cloudのデフォルトページは http://104.197.119.57/ で確認できます。

私は次のようにGoogleCloudでTensorBoardを起動します。

root@6cf64fd299f0:/# tensorboard --logdir ./ Starting TensorBoard on port 6006 (You can navigate to http://localhost:6006)

ポート6006を使用して、「カスタムポートのブラウザウィンドウで開く」というGoogle CloudSSHオプションを試しました。

「ポート6006のVMに接続できません。」と表示されます。

Google CloudからTensorBoardを表示する正しい方法は何ですか?

8
technologiclee

デフォルト までに、TensorBoardは127.0.0.1でリクエストを処理します。これは、同じマシンで実行されているプロセスにのみアクセスできます。 TensorBoardを--Host 0.0.0.0で起動すると、リモートインターフェースでもリクエストが処理されるため、リモートで接続できるはずです。

$ tensorboard --logdir ./ --Host 0.0.0.0

「カスタムポートのブラウザウィンドウで開く」ではTensorBoardサーバーに接続されないことに注意してください。このオプションは、サーバー上の[〜#〜] ssh [〜#〜]サーバーに接続するために使用されます。非標準ポート。 Google Cloud Platform docs VMからポートを公開する方法に関する情報があります。 VMへのリモートアクセスのためにTCPポート6006での接続を許可する必要があります。 ここでの手順 に従って、Dockerコンテナからポート6006を公開する必要がある場合もあります。 =。

EDIT:Dockerの構成に役立ついくつかのステップバイステップの説明を追加しました。ここにはいくつかの問題があり、どれが失敗しているかを判断することはできません。

  1. Dockerコンテナを起動するときにポート転送を構成します。

    (vm)$ docker run -p 0.0.0.0:7007:6006 -it b.gcr.io/tensorflow/tensorflow
    

    これにより、接続がVM)のポート7007からDockerコンテナの6006に転送されます(他の値も可能です)。

  2. Dockerコンテナ内からTensorBoardに接続できることを確認します。

    (container)$ tensorboard --logdir ./ --Host 0.0.0.0 --port 6006 &
    (container)$ curl http://localhost:6006/
    

    2番目のコマンドは、HTMLをコンソールに出力する必要があります。

  3. VMのシェルで、コンテナーで実行されているTensorBoardインスタンスに接続できることを確認します。

    (vm)$ curl http://localhost:7007/
    

    コマンドは、同じHTMLをコンソールに出力する必要があります。

  4. ローカルクライアントがVMのポート7007に接続できるようにGoogleCloudファイアウォールを構成します。

    (client)$ gcloud compute firewall-rules create tensorboard --allow tcp:7007
    

    これで、クライアントのWebブラウザーでTensorBoardに接続できるようになります。

18
mrry

TensorBoardを表示するためにDockerを使用する必要はありません。ただし、Dockerを使用する場合は、Dockerイメージ内でTensorBoardを実行するだけです。

秘訣は、デフォルトのTensorBoardtcpポート6006への外部アクセスを許可することです。

次の実用的なソリューションを試して、Google CloudVMにTensorBoardを表示しました。

  1. gcloud認証に合格していることを確認してください。

    gcloud auth login

  2. tcpポート6006へのパブリックアクセスを許可する

    gcloud compute Firewall-rules create tensorboard-port --allow tcp:6006

  3. VMでTensorBoardを実行します

    tensorboard --logdir = workspace/train /

  4. 外部IPアドレスを使用して、VMの外部のTensorBoardにアクセスします。

    オープンアドレス http:// your_vm_external IP:6006 /、

    例えば http://104.196.140.145:6006/ 、ここで104.196.140.145はVMの外部IPアドレスです。

Enjoy TensorBoard

7
user1165814

もう1つのオプションは、ngrokを使用してトンネリングすることです。参照: Google ColabでTensorboardを使用できますか?

$ from jupyter notebook
ps = !ps -ax
is_tensorboard_running = len([f for f in ps if "tensorboard" in f ]) > 0

is_ngrok_running = len([f for f in ps if "ngrok" in f ]) > 0
print("tensorbord={}, ngrok={}".format(is_tensorboard_running, is_ngrok_running))

if not is_ngrok_running:  
#    grok should be installed in /content/ngrok
  get_ipython().system_raw('/content/ngrok http 6006 &')
  is_ngrok_running = True

# get public url for tensorboard
tensorboard_url = !curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"    
print("tensorboard url=", tensorboard_url)
2
michael