繁体   English   中英

我如何启动 tensorflow docker jupyter notebook

[英]How do I start tensorflow docker jupyter notebook

我已经在 ubuntu 机器上安装了 tensorflow docker 容器。 tensorflow docker设置说明指定:

docker run -it b.gcr.io/tensorflow/tensorflow

这让我进入了 docker 容器终端,我可以运行 python 并执行 Hello World 示例。 我也可以手动运行 .\\run_jupyter.sh 来启动 jupyter notebook。 但是,我无法从主机访问笔记本。

如何启动 jupyter 笔记本,以便我可以从主机使用该笔记本? 理想情况下,我想使用 docker 来启动容器并在单个命令中启动 jupyter。

对于 Linux 主机,Robert Graves 的答案是可行的,但对于 Mac OS X 或 Windows,还有更多工作要做,因为 docker 在虚拟机中运行。

因此,要开始启动 docker shell(或任何 shell,如果您使用的是 Linux)并运行以下命令来启动一个新的 TensorFlow 容器:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

然后对于 Mac OS X 和 Windows,您只需执行以下操作一次:

  1. 打开 VirtualBox
  2. 单击 docker vm(我的自动命名为“default”)
  3. 点击设置打开设置
  4. 在网络设置中打开端口转发对话框
  5. 单击 + 符号添加另一个端口,并通过填写对话框将端口从您的 mac 连接到 VM,如下所示。 在这个例子中,我选择了端口 8810,因为我使用端口 8888 运行其他笔记本。 在此处输入图片说明
  6. 然后打开浏览器并连接到http://localhost:8810 (或您在主机端口部分设置的任何端口)
  7. 制作您的花式裤子机器学习应用程序!

我简单而高效的工作流程:

TL;DR 版本:

  1. 打开Docker 快速入门终端 如果它已经打开,运行$ cd
  2. 运行一次$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
  3. 每次都启动: $ docker start -i tf

如果您不在 Windows 上,您可能应该将/$(pwd)更改为$(pwd)

您将在主目录中获得一个名为tensorflow的空文件夹,用作项目文件(例如 Ipython Notebooks 和数据集)的持久存储。

解释:

  1. cd以确保您位于主目录中。
  2. 参数:
    • -it代表interactive,所以你可以在终端环境中与容器进行交互。
    • -v host_folder:container_folder启用在主机和容器之间共享文件夹。 主机文件夹应该在您的主目录中。 /$(pwd)在 Windows 10 中转换为//c/Users/YOUR_USER_DIR 。此文件夹被视为容器中的notebooks目录,由 Ipython/Jupyter Notebook 使用。
    • --name tf分配名称tf的容器。
    • -p 8888:8888 -p 6006:6006将容器端口映射到主机,第一对用于 Jupyter notebook,第二对用于 Tensorboard
  3. -i代表交互式

在云端运行 TensorFlow

进一步阅读docker 文档后,我有一个适合我的解决方案:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

-p 8888:8888 和 -p 6006:6006 将容器端口暴露给相同端口号的主机。 如果您只使用 -p 8888,则会在主机上分配一个随机端口。

./run_jupyter.sh 告诉 docker 在容器内执行什么。

使用此命令,我可以使用主机上的浏览器连接到http://localhost:8888/并访问 jupyter notebook。

更新:在 Windows 上与 docker 搏斗后,我切换回了带有 docker 的 Ubuntu 机器。 我的笔记本在 docker 会话之间被擦除,这在阅读更多 docker 文档后是有道理的。 这是一个更新的命令,它还会在容器内挂载一个主机目录,并启动指向该挂载目录的 jupyter。 现在我的笔记本保存在主机上,下次启动 tensorflow 时就可以使用了。

docker run -p 8888:8888 -p 6006:6006 -v /home/rob/notebook:/notebook b.gcr.io/tensorflow/tensorflow sh -c "jupyter notebook /notebook"

如果你是一个使用 Windows 机器的 docker noob,这些步骤对我有用。

版本:Windows 8.1、docker 1.10.3、tensorflow r0.7

  1. 运行 Docker 快速入门终端
  2. 加载后,记下ip地址。 如果找不到,请使用此docker-machine ip并记下。 让我们称之为“IP地址”。 看起来像这样:192.168.99.104(这个IP地址是我编的)
  3. 将此命令粘贴到 docker 终端上:

    docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow

    如果您是第一次运行它,它将在这个轻量级虚拟机上下载并安装映像。 然后它应该说'The Jupyter notebook is running at ....' -> 这是一个好兆头!

  4. 打开您的浏览器: <your ip address (see above)>:8888 例如。 192.168.99.104:8888/
  5. 希望你能看到你的 ipython 文件。

Jupyter 现在可以为 TensorFlow 运行Docker 镜像

docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook

为了让它在 hyper-v 下运行。 执行以下步骤:

1)使用https://blogs.msdn.microsoft.com/scicoria/2014/10/09/getting-docker-running-on-hyper-v-8-1-2012-r2/创建一个docker虚拟机为您提供一个可用的 docker 容器。 您可以通过控制台或 ssh 连接到它。 我会放置至少 8GB 的​​内存,因为我确定这会占用大量内存。

2)运行“ifconfig”来确定Docker VM的IP地址

3) 在 docker shell 提示符下键入:

docker run -p 8888:8888 -p 6006:6006 -it b.gcr.io/tensorflow/tensorflow

4) 使用 http:/[ifconfig address]:8888/ 连接到 Jupyter Workbench

为了稍微整理一下,我想给出一些额外的解释,因为我在使用 tensorflow 设置 docker 时也遇到了很多麻烦。 为此,我参考了这个视频,不幸的是,它在所有情况下都不是不言自明的。 我假设您已经安装了 docker。 视频中真正有趣的一般部分从 0:44 分钟开始,他最终启动了 docker。 在那里他只将 tensorflow repo 下载到文件夹中,然后他将其安装到容器中。 您当然可以将其他任何内容放入容器中,然后在 docker VM 中访问它。


  1. 首先,他运行长docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow命令docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow “run”命令启动容器。 在这种情况下,它启动容器“b.gcr.io/tensorflow/tensorflow”,其地址在tensorflow docker 安装教程中提供 如果本地尚不可用,则 docker 将下载该容器。 然后他提供了两种额外的参数: 他在给定的容器路径上挂载主机系统的文件夹。 不要忘记在开头给出分区(例如“/c/”)。 此外,他使用 params -p 声明稍后可从主机使用的端口。 从所有这些命令中,您将获得此容器执行的 [CONTAINER_ID]! 您始终可以通过在 docker 控制台中运行“docker ps”来查看当前正在运行的容器。 您上面创建的容器应该以相同的 ID 出现在此列表中。


  2. 下一步:随着容器的运行,您现在想要在其中执行一些操作。 在我们的例子中,jupyter notebook 或 tensorflow 或其他:为此,您让 docker 在新创建的容器上执行 bash: docker exec –ti [CONTAINER_ID] bash 此命令现在会在您的容器上启动 bash shell。 你看到这个是因为“$”现在变成了 root@[CONTAINER_ID]:。 从此无路可退。 如果你想回到 docker 终端,你必须像他在 1:10 分钟所做的那样启动另一个新的 docker 控制台。 现在有了在容器中运行的 bash shell,你可以做任何你想做的事情,并执行 Jupiter 或 tensorflow 或其他任何东西。 您在运行命令中给出的主机系统文件夹现在应该在“/media/disk”下可用。


  3. 访问 VM 输出的最后一步。 它仍然不想为我工作,我无法访问我的笔记本。 您仍然需要找到正确的 IP 和端口才能访问已启动的笔记本、张量板会话或其他任何内容。 首先使用docker-machine –ls找出主IP。 在此列表中,您可以获得 URL。 (如果它是您唯一的容器,则称为默认容器。)您可以不使用此处给出的端口。 然后从docker ps你得到转发端口的列表。 当列表中写入 0.0.0.32776->6006/tcp 时,您可以使用首先提供的端口(Awkyard)从主机访问它。 所以在我的例子中,容器中执行的张量板说“在端口 6006 上启动”。 然后从我的主机我需要输入http://192.168.99.100:32776/来访问它。

-> 就是这样! 就这样跑来找我!

它为您提供终端提示:

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it tensorflow/tensorflow:r0.9-devel

或者

FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel

您应该拥有“vdocker”或将 vdocker 更改为“default”。

出于某种原因,我遇到了一个额外的问题,我需要使用--ip标志来克服所提供的示例之外的问题:

nvidia-docker run --rm \
  -p 8888:8888 -p 6006:6006 \
  -v `pwd`:/root \
  -it tensorflow/tensorflow:latest-devel-gpu-py3 sh -c "jupyter notebook --ip 0.0.0.0 ."

然后我可以从我的机器上通过http://localhost:8888访问。 在某些方面,这是有道理的; 在容器内,您绑定到0.0.0.0代表所有可用地址。 但是我是否需要这样做似乎各不相同(例如,我已经开始使用jupyter/scipy-notebook而不必这样做)。

无论如何,上述命令对我有用,对其他人可能有用。

作为官方 TensorFlow 镜像的替代方案,您还可以使用ML Workspace Docker 镜像。 ML Workspace 是一种开源 Web IDE,它将 Jupyter、VS Code、TensorFlow 和许多其他工具和库结合到一个方便的 Docker 映像中。 部署单个工作区实例非常简单:

docker run -p 8080:8080 mltooling/ml-workspace:latest

所有工具都可以从同一个端口访问并集成到 Jupyter UI 中。 您可以在此处找到文档。

没有端口映射的更优雅的方法

上面的许多答案确实很有帮助并且有效,但是如果您只想在主机上使用docker 来构建开发环境 (毕竟您正在使用jupyter ...),则上述解决方案或多或少会比您预期的痛苦。

一些痛苦的事实

  1. 如果您正在使用端口映射: docker run -p 8888:8888 -p 6006:6006 ... ,则每次必须手动手动映射端口。 如果您忘记公开端口,则必须放弃当前容器,并使用-p xxxx:xxxx重新创建一个新容器。

    Moverover,我是一个会同时通过jupyter Lab(在不同容器中)打开多个项目的人。 手动进行端口映射确实令人沮丧。

  2. 当您运行jupyter lab(比jupyter笔记本更好的替代品)时,您可能必须在容器中键入jupyter lab --ip=0.0.0.0 --port=8888 (如果您使用bash运行容器),最终发现您无法由于某些权限问题,将Jupyter Lab主题更改为暗模式。 (灯光模式会使我盲目XD)

更好的解决方案

TL; DR

使用--network="host"docker run

如果将主机网络模式用于容器,则该容器的网络堆栈不会与Docker主机隔离(该容器共享主机的网络名称空间),并且该容器不会分配自己的IP地址。 例如,如果您运行一个绑定到端口80的容器,并且使用主机网络,则该容器的应用程序在主机IP地址上的端口80上可用。

参考: https : //docs.docker.com/network/host/

(在运行它之前,请在'\\'之后删除所有空格和注释)

docker run -it -u $(id -u):$(id -g) \  # use same user as your host instead of using root user
               --rm \
               --network="host" \ # with this line, you don't have to map ports manually anymore
               tensorflow/tensorflow:latest-gpu-py3-jupyter \
               bash

在容器中时,无需指定ip / port即可启动jupyter Labs:

jupyter lab

为项目构建ML环境的示例

在本节中,我将分享一个详细的示例,该示例超出了此问题的要求,但我认为您可能会发现它会有所帮助。

文件

文件夹结构:

.
├── Dockerfile
├── requirement.txt
└── run.sh

Dockerfile:

FROM tensorflow/tensorflow:latest-gpu-py3-jupyter AS pre

WORKDIR /repo
RUN apt-get -qqy update && apt-get install -qqy \
    curl \
    npm \
    nodejs

FROM pre AS dev
COPY ./* /repo/
RUN mkdir /.jupyter  # make a directory for jupyter lab settings
RUN pip install --upgrade pip && pip install -r requirement.txt
RUN jupyter labextension install @jupyterlab/toc  # install table of content for juptyer lab
RUN chmod -R 777 /.local /.jupyter  # authenticate these 2 folders for current users

required.txt

pandas
scipy
scikit-learn
matplotlib
seaborn
kaggle
jupyterlab

run.sh:

docker run -it -u $(id -u):$(id -g) \
               --rm \
               --network="host" \
               -v /$(pwd):/repo \
               -w /repo \
               --name $(basename $("pwd"))\
               $(basename $("pwd")):latest \
               bash

步:

构建docker映像并使用当前文件夹的名称对其进行标记:

docker build -t $(basename $("pwd")) .

运行docker容器:

bash run.sh

在容器中运行jupyter实验室:

jupyter lab

上面例子的好处

  1. 现在,您不再需要预先进行端口映射。 您可以随时通过单击链接来打开jupyter,张量板。
  2. 您在容器中使用与主机相同的用户,而不是root用户
  3. 您当前的项目已安装在容器上。
  4. Jupyter Lab已获得任何配置的权限
  5. 总而言之,此Docker容器与虚拟环境一样易于使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM