docker - 如何*安全地*设置 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 服务到网络......
我会非常感谢更多解释性的答案,也暗示了这种冒险的一些深入的提示/资源,所以我实际上变得更加专业......
解决方案
推荐阅读
- node.js - Axios 和 Node - EBAY API 上输出数据的问题
- python - 根据 pandas Data Frame 中的其他索引值对索引值进行分组
- macos - 升级到 macOS Catalina 后找不到 Conda
- sql - 有条件的按组计数
- calculator - 卡西欧 fx-85GT plus 上的 CMPLX、MAT 和 VCT 是什么意思?
- java - 寻找能够关闭复杂应用程序的通用设计模式
- c# - 从 Ubuntu 中的其他 C# 服务访问自签名 HTTPS C# 服务
- python - 我如何将 json.loads 应用于目录中的每个 json 文件
- c# - 在公共类中使用常量字符串控制授权属性是不好的做法吗?
- loading - 如何在初始页面加载后运行所有 elementor builder 脚本?