使用自定义 docker 映像启动 Google Cloud AI Platform Notebooks 的要求

joh*_*ton 3 google-compute-engine google-cloud-platform google-cloud-ml gcp-ai-platform-notebook

在 AI Platform Notebooks 上,用户界面可让您选择要启动的自定义图像。如果你这样做,你会看到一个信息框,上面写着容器“必须遵循某些技术要求”:

一定的技术要求

我认为这意味着他们有一个需要入口点,暴露的端口,jupyterlab启动命令,或什么,但我不能找到什么样的要求,实际上任何文件

我一直在尝试对其进行逆向工程,但运气不佳。我nmap编辑了一个标准实例并看到它打开了端口 8080,但是将我的图像设置CMD为运行 Jupyter Lab0.0.0.0:8080并没有起到作用。当我在 UI 中单击“打开 JupyterLab”时,我得到一个 504。

有没有人有相关文档的链接,或者过去有这样做的经验?

Zai*_*zvi 5

有两种方法可以创建自定义容器:

构建衍生容器

如果你只需要安装额外的包,你应该创建一个源自标准镜像之一的 Dockerfile(例如,FROM gcr.io/deeplearning-platform-release/tf-gpu.1-13:latest),然后添加 RUN使用 conda/pip/jupyter 安装软件包的命令。

conda 基础环境已经添加到路径中,所以不需要 conda init/conda activate 除非你需要设置另一个环境。在启动环境之前需要运行的其他脚本/动态环境变量可以添加到 /env.sh,它是作为入口点的一部分提供的。

例如,假设您有一个自定义构建的 TensorFlow 轮子,您想用它来代替内置的 TensorFlow 二进制文件。如果您不需要额外的依赖项,您的 Dockerfile 将类似于:

Dockerfile.example

FROM gcr.io/deeplearning-platform-release/tf-gpu:latest
RUN pip uninstall -y tensorflow-gpu && \
    pip install -y /path/to/local/tensorflow.whl
Run Code Online (Sandbox Code Playgroud)

然后,您需要构建并将其推送到 GCE 服务帐户可访问的某个位置。

PROJECT="my-gcp-project"
docker build . -f Dockerfile.example -t "gcr.io/${PROJECT}/tf-custom:latest"
gcloud auth configure-docker
docker push "gcr.io/${PROJECT}/tf-custom:latest"
Run Code Online (Sandbox Code Playgroud)

从头开始构建容器

主要要求是容器必须在端口 8080 上公开服务。

在 VM 上执行的 sidecar 代理将仅将请求传送到此端口。

如果使用 Jupyter,您还应该确保您的 jupyter_notebook_config.py 配置如下:

c.NotebookApp.token = ''
c.NotebookApp.password = ''
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080
c.NotebookApp.allow_origin_pat = (
'(^https://8080-dot-[0-9]+-dot-devshell\.appspot\.com$)|'
'(^https://colab\.research\.google\.com$)|'
'((https?://)?[0-9a-z]+-dot-datalab-vm[\-0-9a-z]*.googleusercontent.com)')
c.NotebookApp.allow_remote_access = True
c.NotebookApp.disable_check_xsrf = False
c.NotebookApp.notebook_dir = '/home'
Run Code Online (Sandbox Code Playgroud)

这将禁用基于笔记本令牌的身份验证(身份验证通过代理上的 oauth 登录处理),并允许来自三个来源的跨源请求:Cloud Shell Web 预览、colab(请参阅此博客文章)和 Cloud Notebooks 服务代理。笔记本服务只需要第三个;前两个支持交替访问模式。