首页 > 解决方案 > 如何*安全地*设置 Jupyter-Notebook runnnig 启用 CUDA 的 PyTorch,在 docker 内,在互联网的专用服务器上?

问题描述

很高兴我们已经超越了基本的设置或问题,例如在 docker 中运行 jupyter notebook 时如何处理 python 模块安装?,编写 Dockerfile 的最佳实践

该服务器已经在我们的本地 Intranet 中运行,我们已经将其用作我们团队的协作深度学习开发服务器。

我们的团队变得更加分散,现在我们将把这个服务器移动到自己的 DMZ 中,例如允许团队通过普通互联网访问(并且:不仅仅是通过 VPN)。

因此,问题主要是,如何安全地做到这一点,配置,用户,权限......

目前我们在(Ubuntu)主机上安装了 cuda 驱动程序等,使用 nvidia-docker 将 cuda 放入 docker 容器中。为了使所有容器的所有 cuda 驱动程序与主机的 cuda 版本兼容,我们使用基于 dockerfile 的手动方法,其中所有容器都来自基本映像

nvcr.io/nvidia/cuda  9.0-cudnn7.1-devel-ubuntu16.04

(从那里一个中间 dockerfile 安装更多的东西)但最后是最终的 dockerfile esp。(pip-) 将 jupyter-notebook 与所需的(例如 PyTorch 0.4.1)和所有其他所需的深度学习工具一起安装。

docker 容器是通过向 docker 容器添加一个共享卷来启动的,即主机上属于 docker:docker 的具有组粘性位的文件夹。其中有 Jupyter 笔记本的实际机器学习代码。

nvidia-docker run --runtime=nvidia \
  --interactive --tty \
  --volume /srv:/srv \
  --name ${CONT_NAME} \
  --hostname ${CONT_HOSTNAME} \
  ${IMAGE_FULLNAME}

然后另一个脚本在笔记本容器内启动一个专用的 AUTH 令牌,该令牌定期在这个 jupyter 笔记本的用户之间共享。

jupyter notebook --allow-root --ip 0.0.0.0 --no-browser --NotebookApp.token='<TEMP_AUTH_TOKEN>'

DMZ 防火墙只允许对 Jupyter-Notebook 的这个单一端口进行 Web 访问。

笔记本(连同与 GPU 相关的 python 代码)需要访问 cuda 工具链和 GPU。这是由 nvidia-docker wrapper 传入的,我们目前以root身份运行 docker 容器内的所有内容。

现在是我需要帮助的地方:“一切都在合理范围内”,我们将如何确保这一点?(唉,我的工作不是做全职管理员,而是做深度学习的人)我有一个 esp。“有点不好的感觉”为网络提供了一个以 root(即使是容器的 root)运行的 Jupyter 笔记本。我担心破解 Jupyter-Notebook,并且已经作为容器内的 root 执行东西是一回事。但是从那里逃脱这个 docker 容器并拥有整个主机......我将如何阻止这种情况?

所以一方面:Jupyter 需要运行和访问主机的 CUDA-GPU,还要将 notebook 服务到网络......

我会非常感谢更多解释性的答案,也暗示了这种冒险的一些深入的提示/资源,所以我实际上变得更加专业......

标签: dockerjupyter-notebookpytorch

解决方案


推荐阅读