【问题标题】:How do I start tensorflow docker jupyter notebook如何启动 tensorflow docker jupyter notebook
【发布时间】:2023-03-05 16:24:01
【问题描述】:

我已经在 ubuntu 机器上安装了 tensorflow docker 容器。 tensorflow docker setup instructions 指定:

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

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

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

【问题讨论】:

  • 给定的命令 将我放入终端(除非我将 bash 附加到命令行)。相反,它会自动运行/run_jupyter.sh。要获得一个单独的终端,您需要执行类似docker exec -it [CONTAINER ID] bash 的操作,如here 所述。

标签: docker jupyter tensorflow


【解决方案1】:

对于 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. 制作您喜欢的裤子机器学习应用!

【讨论】:

  • 克雷格,谢谢我按照您的指示在 Windows 中运行。在 Windows 上,我无法让它在 Docker 快速启动终端中运行。终端无法正确处理正斜杠 /。使用 PowerShell 确实有效。通过启动 Kinematic 然后单击应用程序左下角的“Docker CLI”,我使用所有正确的环境变量进入 PowerShell。
  • 很高兴您也对非 Linux 案例感兴趣。当我看到您的回答时,我不确定是否应该提出一个新问题或在此处发布。感谢您开始!
  • 当 docker 安装在 Windows(也可能是 OS X)上时,它默认为 1 个处理器和 1GB RAM。如果您的计算机可以处理它,我建议更改 VM 设置以添加更多处理器和内存。
  • 重要:将访客 IP 留空。我用 127.0.0.1 填充它,我花了一段时间才意识到这是问题所在。
  • @Robert Graves 我没有成功使用给出的命令行示例,但 Kitematic 为我解决了这一切。我找到了一个包含 tensorflow 和 jupyter“tensorflow-jupyter”的 docker 镜像。只需单击 Kitematic 窗口右侧的“网络预览”,我就会在 Windows10 上看到一个浏览器窗口(chrome),它由 docker 容器内的 Linux 发行版提供服务。
【解决方案2】:

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

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 笔记本和数据集)的持久存储。

说明:

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

Running TensorFlow on the cloud

【讨论】:

  • 谢谢!您的解决方案简单且有效。不过,有点后续问题,可能看起来很愚蠢,因为我是 docker 的新手,命令行界面:一旦我启动 tf 映像,它就会自动运行 jupyter 并且控制台被 jupyter “占用”。不能用它来执行cd、ls等其他命令...如何在docker容器上打开一个新的控制台?
  • -it in docker run -it ... 代表交互式。尝试删除它,我希望它会按您的意愿工作。
  • 我试过了,但是 Powershell 仍然只连接到 Windows。有没有办法用两个单独的 powershell 连接到容器?当一个被 Jupyter “占用”并成为 Jupyter 消息的显示窗口时,另一个仍可用于在该容器上执行其他命令。我尝试使用非迭代,但 powershell 仍然连接到 Windows,而不是容器。然后我尝试使用“docker attach container_id”,但是powershell控制台变得没有响应。
  • 我认为这是不可能的,因为容器一次只运行一个应用程序。就我而言,jupyter notebook 正在运行,因此同一个容器没有空间同时运行 bash。
【解决方案3】:

在进一步阅读docker documentation 之后,我有一个适合我的解决方案:

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。现在我的 notebook 保存在主机上,下次启动 tensorflow 时就可以使用了。

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

【讨论】:

    【解决方案4】:

    如果您是使用 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

      如果你是第一次运行它,它会在这个轻量级虚拟机上下载并安装镜像。然后它应该说“Jupyter notebook 正在运行……” -> 这是一个好兆头!

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

    【讨论】:

      【解决方案5】:

      Jupyter 现在可以为 TensorFlow 运行 Docker image

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

      【讨论】:

        【解决方案6】:

        为了让它在 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 地址]:8888/ 连接到 Jupyter Workbench

        【讨论】:

        • 这是在 Windows Server 2012-R2 上
        • 事情变化很快。我发现下面的docs.docker.com/machine/drivers/hyper-v 比第 1 步更容易启动。此外,如果您使用的是 Windows 10,docker 现在在这里有一个带有 GUI 工具的本机工具集docker.com/products/docker#/windows
        • -- 你的意思是“ipconfig” ifconfig 不起作用。当您在 boot2docker 虚拟机中时,它是 linux,因此 windows 命令不起作用。 ifconfig 是 ipconfig windows 命令的 linux 版本。虚拟机将拥有自己的 IP 地址,因为它运行自己的 IP 堆栈。很好地考虑 docker 是它共享 VM IP 堆栈,因此地址不会改变。
        【解决方案7】:

        为了稍微整理一下,我想给出一些额外的解释,因为我在使用 tensorflow 设置 docker 时也遭受了很多痛苦。为此,我参考了this 视频,不幸的是,这在所有情况下都不是一目了然的。 我假设你已经安装了 docker。视频中真正有趣的一般部分从 0:44 开始,他终于开始了 docker。在此之前,他只将 tensorflow repo 下载到文件夹中,然后将其挂载到容器中。您当然可以将任何其他内容放入容器中,稍后在 docker VM 中访问它。


        1. 首先他运行长 docker 命令docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow。 “运行”命令启动容器。在这种情况下,它会启动容器“b.gcr.io/tensorflow/tensorflow”,其地址在tensorflow docker installation tutorial 中提供。如果容器在本地不可用,则 docker 将下载该容器。 然后他给出了两种额外的论点:他将主机系统的一个文件夹挂载到容器的给定路径。不要忘记在开头给出分区(例如“/c/”)。 此外,他使用参数 -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 终端,你必须启动另一个新的 docker 控制台,就像他在 1:10 分钟所做的那样。现在有了在容器中运行的 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/ 才能访问它。

        -> 就是这样!它是这样为我运行的!

        【讨论】:

          【解决方案8】:

          它为您提供终端提示:

          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'。

          【讨论】:

            【解决方案9】:

            由于某种原因,除了提供的示例之外,我还遇到了一个需要克服的额外问题,使用 --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 开始了笔记本,而不必这样做)。

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

            【讨论】:

              【解决方案10】:

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

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

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

              【讨论】:

                猜你喜欢
                • 2020-10-17
                • 2023-02-26
                • 1970-01-01
                • 2016-08-13
                • 2021-09-14
                • 2015-07-05
                • 1970-01-01
                • 2023-02-20
                • 2020-05-21
                相关资源
                最近更新 更多