如何在Docker中同时运行Tensorboard和Jupyter?

7
我正在学习如何使用TensorFlow进行机器学习,并发现Docker非常方便,可以部署TensorFlow到我的计算机上。但是我找到的示例在我的目标设置上无法正常工作,我的目标设置如下:在Ubuntu 16.04操作系统下,使用nvidia-docker同时托管jupyter和tensorboard服务(可以是两个容器或一个容器内嵌两个服务)。并且,从jupyter创建的文件应该对主机操作系统可见。需要使用以下工具:
  • Ubuntu 16.04
  • Docker
  • nvidia-docker
    • Jupyter
    • Tensorboard
需要创建Jupyter容器。
nvidia-docker run \
    --name jupyter \
    -d \
    -v $(pwd)/notebooks:/root/notebooks \
    -v $(pwd)/logs:/root/logs \
    -e "PASSWORD=*****" \
    -p 8888:8888 \
    tensorflow/tensorflow:latest-gpu 

Tensorboard容器

nvidia-docker run \
    --name tensorboard \
    -d \
    -v $(pwd)/logs:/root/logs \
    -p 6006:6006 \
    tensorflow/tensorflow:latest-gpu \
    tensorboard --logdir /root/logs

我尝试将日志文件夹挂载到两个容器中,并让Tensorboard访问jupyter的结果。但是,似乎挂载没有成功。当我在jupyter容器的notebooks文件夹中创建新文件时,主机文件夹$(pwd)/notebooks什么也没有显示。
我还按照Nvidia Docker、Jupyter Notebook和Tensorflow GPU的说明进行操作。
nvidia-docker run -d -e PASSWORD='winrar' -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu-py3

只有Jupyter可以使用,tensorboard无法从6006端口访问。

2个回答

7
我今天遇到了同样的问题。
简短回答:我假设您正在为Jupyter Notebook和tensorboard使用相同的容器。因此,正如您所写的那样,您可以使用以下命令部署容器:
nvidia-docker run -d --name tensor -e PASSWORD='winrar'\
                  -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu-py3

现在你可以访问8888和6006端口,但首先需要初始化Tensorboard:
docker exec -it tensor bash
tensorboard --logdir /root/logs

关于另一个选项:在不同的容器中运行jupyter和tensorboard。如果您在不同的容器中挂载相同的目录遇到问题(过去曾有关于这个问题的bug),自Docker 1.9以来,您可以创建独立的卷与特定容器无关。这可能是一个解决方案。
  1. 创建两个卷来存储日志和笔记本。
  2. 使用这些卷部署两个镜像。
docker volume create --name notebooks
docker volume create --name logs 

nvidia-docker run \
--name jupyter \
-d \
-v notebooks:/root/notebooks \
-v logs:/root/logs \
-e "PASSWORD=*****" \
-p 8888:8888 \
tensorflow/tensorflow:latest-gpu

 nvidia-docker run \
 --name tensorboard \
 -d \
 -v logs:/root/logs \
 -p 6006:6006 \
 tensorflow/tensorflow:latest-gpu \
 tensorboard --logdir /root/logs

感谢您提供解决方案。第一个解决方案对我有用! - Jacky Liu
有没有办法避免使用 docker exec -it tensor bash,而是使用类似于 docker exec tensorboard --logs=... 这样的命令? <-- 这个命令不起作用。 - user4911648

0
作为替代方案,您还可以使用ML Workspace Docker镜像。ML Workspace是一个Web IDE,它将Jupyter、TensorBoard、VS Code和许多其他工具和库结合在一个便捷的Docker镜像中。部署单个工作区实例就像这样简单:
docker run -p 8080:8080 mltooling/ml-workspace:latest

所有工具都可以从同一个端口访问。您可以在此处找到有关如何访问TensorBoard的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接