在 Google Cloud 上的 Docker 上查看 Tensorboard

View Tensorboard on Docker on Google Cloud

我正在尝试在 Google Cloud 上的 Docker 上显示来自 TensorFlow 的 TensorBoard。

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

tensorboard --logdir ./

我在 Google Cloud 上安装了 Apache 运行(它可能在我的第一个容器 "ai-unicorn" Docker 中创建了自己的容器 "docker-playground")。 我可以在 http://104.197.119.57/ 看到来自 Google Cloud 的默认页面。

我在 Google Cloud 上像这样启动 TensorBoard:

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

我使用端口 6006 尝试了名为 "Open in browser window on custom port" 的 Google Cloud SSH 选项。

它显示: "We are unable to connect to the VM on port 6006."

从 Google Cloud 查看 TensorBoard 的正确方法是什么?

default,TensorBoard 为 127.0.0.1 上的请求提供服务,这只能由同一台机器上的进程 运行 访问。如果您使用 --host 0.0.0.0 启动 TensorBoard,它也会在远程接口上处理请求,因此您应该能够远程连接到它:

$ tensorboard --logdir ./ --host 0.0.0.0

请注意,"Open in browser window on custom port" 不会将您连接到 TensorBoard 服务器 - 此选项用于在非标准端口上连接到 SSH 服务器。 Google Cloud Platform docs have information on how to expose ports from your VM. You will need to allow connections on TCP port 6006 for remote access to your VM. You may also need to expose port 6006 from your Docker container, by following the instructions here.

编辑: 添加了一些分步说明以帮助您进行 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/
    

    第二个命令应该向控制台打印一些 HTML。

  3. 在VM上的shell中,确保可以连接到容器中的TensorBoard实例运行:

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

    该命令应向控制台打印相同的 HTML。

  4. 配置 Google 云防火墙以允许您的本地客户端连接到 VM 上的端口 7007。

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

    您现在应该可以在客户端的网络浏览器中连接到 TensorBoard。

您不必使用 Docker 来显示 TensorBoard。但是,如果您确实想使用 Docker,只需 运行 您的 Docker 图像中的 TensorBoard。

诀窍是允许外部访问默认的 TensorBoard tcp 端口 6006。

我尝试了以下工作解决方案来在我的 Google 云 VM 中显示 TensorBoard。

  1. 确保通过gcloud认证:

    gcloud 授权登录

  2. 允许public访问tcp端口6006

    gcloud compute firewall-rules 创建 tensorboard-port --allow tcp:6006

  3. 运行 VM 上的 TensorBoard

    tensorboard --logdir=workspace/train/

  4. 使用外部 IP 地址访问虚拟机外部的 TensorBoard:

    打开地址http://your_vm_externalIP:6006/,

    例如http://104.196.140.145:6006/,其中 104.196.140.145 是我的虚拟机的外部 IP 地址。

另一种选择是使用 ngrok 隧道。参见:

$ 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)