[英]View Tensorboard on Docker on Google Cloud
我正在尝试在Google Cloud上的Docker上显示TensorFlow的TensorBoard。
http://tensorflow.org/how_tos/summaries_and_tensorboard/index.md
tensorboard --logdir ./
我在Apache 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调用名为“在自定义端口的浏览器窗口中打开”的Google Cloud SSH选项。
它显示:“我们无法在端口6006上连接到VM。”
从Google Cloud查看TensorBoard的正确方法是什么?
默认情况下 ,TensorBoard在127.0.0.1
上提供请求,只有在同一台计算机上运行的进程才能访问该请求。 如果您使用--host 0.0.0.0
启动TensorBoard,它还将在远程接口上处理请求,因此您应该可以远程连接到它:
$ tensorboard --logdir ./ --host 0.0.0.0
请注意,“在自定义端口上的浏览器窗口中打开”将不会将您连接到TensorBoard服务器-此选项用于在非标准端口上连接到SSH服务器。 Google Cloud Platform文档包含有关如何从VM公开端口的信息。 您将需要允许TCP端口6006上的连接以远程访问您的VM。 您可能还需要按照此处的说明从Docker容器中公开端口6006。
编辑:添加了一些分步说明来帮助您配置Docker。 这里有几个问题,无法确定哪个是失败的。
在启动Docker容器时配置端口转发:
(vm)$ docker run -p 0.0.0.0:7007:6006 -it b.gcr.io/tensorflow/tensorflow
这会将连接从VM上的端口7007转发到Docker容器中的6006。 (其他值是可能的。)
确保您可以从Docker容器中连接到TensorBoard:
(container)$ tensorboard --logdir ./ --host 0.0.0.0 --port 6006 & (container)$ curl http://localhost:6006/
第二个命令应将一些HTML打印到控制台。
在VM上的外壳中,确保可以连接到在容器中运行的TensorBoard实例:
(vm)$ curl http://localhost:7007/
该命令应将相同的HTML打印到控制台。
配置Google Cloud防火墙,以允许本地客户端连接到VM上的端口7007。
(client)$ gcloud compute firewall-rules create tensorboard --allow tcp:7007
您现在应该可以在客户端的Web浏览器中连接到TensorBoard。
您不必使用Docker来显示TensorBoard。 但是,如果您确实想使用Docker,只需在Docker映像内运行TensorBoard。
诀窍是允许外部访问默认的TensorBoard tcp端口6006。
我尝试了以下工作解决方案以在我的Google Cloud VM中显示TensorBoard。
确保您通过了gcloud身份验证:
gcloud身份验证登录
允许公共访问tcp端口6006
gcloud计算防火墙规则创建tensorboard-port --allow tcp:6006
在您的VM上运行TensorBoard
张量板--logdir = workspace / train /
使用外部IP地址访问VM外部的TensorBoard:
打开地址http:// your_vm_external IP:6006 /,
例如http://104.196.140.145:6006/ ,其中104.196.140.145是我的VM的外部IP地址。
另一个选择是使用ngrok
进行隧道传输。 请参阅: 我可以将Tensorboard与Google Colab一起使用吗?
$ 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.