Web 应用程序解决方案

Web 应用程序解决方案

我创建了一个虚拟机并将我的复制DOCKERFILE到其中。Docker 文件的最后一行调用了一个运行 Tensorflow 和 TensorBoard 的 shell 脚本,该脚本在端口 6006 上可视化 TensorFlow 的结果:

tensorboard --logdir=/tmp/vae &

我通过 SSH 进入机器,构建一个 docker 镜像,然后运行 ​​docker 将 Docker 端口连接到虚拟机端口:

docker run -it -p 6006:6006 imageID

我看到 TensorBoard 正在运行:

TensorBoard 1.12.0 at http://2e4a59c22f1d:6006 (Press CTRL+C to quit)

我为端口 6006 添加了一条新的入站安全规则,这样我就可以将本地计算机的 IP 连接到虚拟机的端口 6006。

我确认端口已打开Python 移植并确认虚拟机的6006端口对我本地机器是开放的,docker容器的6006端口对虚拟机也是开放的。

然而,当我将浏览器指向带有后缀的 Azure 虚拟机的 IP 时:6006,我什么也看不到!

如何查看虚拟机上运行的TensorBoard?

答案1

问题在于您要求虚拟机执行 Web 应用程序的工作,而 Azure 不允许这样做。

一种解决方案是创建 Web 应用,而不是创建虚拟机。另一种解决方案是将 TensorFlow 与 TensorBoard 分开,在虚拟机上运行第一个,在本地机器上运行第二个,并定期复制回 TensorBoard 使用的文件。

Web 应用程序解决方案

构建映像并将其推送到 DockerHub 或类似网站。这些命令要求您拥有并验证DockerHub 帐户

docker build -t docker_username/image_name:image_tag -f DOCKERFILE .
docker login
docker push docker_username/image_name:image_tag

在上创建 Web 应用Azure 门户单击“创建资源”,搜索“Web 应用”,然后选择一个提供商,例如 Microsoft 的“Web 应用”。单击“创建”,然后在左侧显示的新边栏选项卡中,在“发布”下将开关切换到“Doc​​ker 映像”,然后在“单个容器”下,在字段“映像和可选标签writedocker_username/image_name:image_tag”中。

在此解决方案中,请注意 Azure 网站没有打开 TensorBoard 使用的端口 6006,因此请参阅此主题将端口 6006 重定向到端口 80。

虚拟机+本地机解决方案

此解决方案的优点是您可以更好地控制虚拟机,例如,您可以指定启用 GPU 的虚拟机来加速 TensorFlow,而目前您还无法使用应用服务计划做到这一点。

按照你之前的步骤创建虚拟机,然后在其上运行 TensorFlow。然后定期将文件从容器复制回虚拟机,再从虚拟机复制回本地计算机。

假设 Azure IP 为 0.0.0.0,您只有一个容器在运行,并且您有结果/tmp/vae(用于变分自动编码器),则复制回文件的命令是:

ssh [email protected] 'docker cp $(docker container ls | tail -n 1 | cut -d " " -f 1):/tmp/vae vae'
scp -r [email protected]:vae /tmp/vae;

您还可以在一行中运行这两个命令,以便轻松地“向上箭头”重复命令:

ssh [email protected] 'docker cp $(docker container ls | tail -n 1 | cut -d " " -f 1):/tmp/vae vae';scp -r [email protected]:vae /tmp/vae

然后从本地机器的另一个 shell 启动 TensorBoard:

tensorboard --logdir=/tmp/vae/

相关内容