使用您自己的容器#

当您创建一个新的 AI Workbench 项目 时,您通常从 NVIDIA NGC 目录 中选择 NVIDIA 提供的容器环境之一。

当您想要创建一个完全自定义的容器,用于您自己的项目,或者您可以发布并与其他 AI Workbench 用户共享时,请使用此文档。这是一个高级场景。有关引导您完成此过程的文档,请参阅高级演练:使用您自己的容器

注意

如果您想使用预构建的容器之一并进行简单的自定义,例如添加软件包,请参阅演练:自定义您的环境环境配置

如果您想更改单个项目的容器行为,请参阅 自定义您的容器

使用此文档了解以下内容

为 AI Workbench 创建完全自定义的容器#

要创建完全自定义的容器以用作 AI Workbench 项目的容器环境,您需要构建并公开镜像的元数据,方法是为您的镜像创建 Docker 标签。

警告

在为 AI Workbench 创建自定义容器之前,请了解您要使用的容器的要求。

一个镜像可以有多个标签,但是标签中的每个键都必须是唯一的。父镜像中的标签会被继承,但可以在子镜像中被覆盖。有关更多信息,请参阅Docker 对象标签

为了能够解析标签键和值,同时避免意外覆盖值,定义了严格的标签模式约定。约定是 <domain-name>.<spec-field>,其中 domain-name 是 com.nvidia.workbench,spec-field 是容器环境规范的字段名称。例如

  • com.nvidia.workbench.programming_languages

作为镜像创建者,您有责任从父镜像中收集所需信息,并在定义这些标签时累积和附加来自父镜像的信息。com.nvidia.workbench.image-version 标签中定义的字符串用于将多个镜像从最新到最旧排序。这些字符串表示镜像的语义版本,用于在 UI/CLI 中排序和排列镜像版本。如果未指定此标签,则镜像标签将按字符串排序以确定显示顺序。

在将标签应用于镜像后,您可以将其发布到支持的容器注册表中。发布镜像后,您可以创建一个新项目,并在自定义容器选项卡上指定您的镜像。

自定义容器标签参考#

使用下表中的信息为您的自定义容器镜像创建 Docker 标签。有关每个字段的描述,请参阅AI Workbench 项目规范定义

建议的 Docker 标签

示例用法

com.nvidia.workbench.build-timestamp

com.nvidia.workbench.build-timestamp = "20221206090342"

com.nvidia.workbench.name

com.nvidia.workbench.name = "Pytorch with CUDA"

com.nvidia.workbench.cuda-version

com.nvidia.workbench.cuda-version = "11.2"

com.nvidia.workbench.description

com.nvidia.workbench.description = "一个包含 Python 2.7 JupyterLab 的最小环境。"

com.nvidia.workbench.entrypoint-script

com.nvidia.workbench.entrypoint-script = "/home/workbench/entrypoint.sh"

com.nvidia.workbench.labels

com.nvidia.workbench.labels = "<逗号分隔的标签列表>"

com.nvidia.workbench.programming-languages

com.nvidia.workbench.programming-languages = "python3"

com.nvidia.workbench.icon-url

com.nvidia.workbench.icon-url = "https://assets.nvidiagrid.net/ngc/logos/img.png"

com.nvidia.workbench.image-version

com.nvidia.workbench.image-version = "1.0.0"

com.nvidia.workbench.os

com.nvidia.workbench.os = "linux"

com.nvidia.workbench.os-distro

com.nvidia.workbench.os-distro = "ubuntu"

com.nvidia.workbench.os-distro-release

com.nvidia.workbench.os-distro-release = "16.04"

com.nvidia.workbench.schema-version

com.nvidia.workbench.schema-version = "v2"

com.nvidia.workbench.user.uid

com.nvidia.workbench.user.uid = "1001"

com.nvidia.workbench.user.gid

com.nvidia.workbench.user.gid = "1001"

com.nvidia.workbench.user.username

com.nvidia.workbench.user.username = "appuser"

com.nvidia.workbench.package-manager.<package-manager-name>.binary

com.nvidia.workbench.package-managers.pip.binary = "/usr/local/bin/pip"

com.nvidia.workbench.package-manager.<package-manager>.installed-packages

com.nvidia.workbench.package-manager.pip.installed-packages="jupyterlab==4.1.2"

com.nvidia.workbench.package-manager-environment.type

com.nvidia.workbench.package-manager-environment.type = "conda" "venv"

com.nvidia.workbench.package-manager-environment.target

com.nvidia.workbench.package-manager-environment.target = "/opt/conda"

com.nvidia.workbench.application.<application-name>.type

com.nvidia.workbench.application.jupyterlab.type = "jupyter"

com.nvidia.workbench.application.<application-name>.class

com.nvidia.workbench.application.jupyterlab.class = "webapp"

com.nvidia.workbench.application.<application-name>.start-cmd

com.nvidia.workbench.application.jupyterlab.start-cmd = "jupyter notebook --allow-root --port 8888 --ip 0.0.0.0 --no-browser"

com.nvidia.workbench.application.<application-name>.health-check-cmd

com.nvidia.workbench.application.jupyterlab.health-check-cmd = "<您的命令>"

com.nvidia.workbench.application.<application-name>.timeout-seconds

com.nvidia.workbench.application.jupyterlab.timeout-seconds = "90"

com.nvidia.workbench.application.<application-name>.stop-command

com.nvidia.workbench.application.jupyterlab.stop-command = "jupyter notebook stop 8888"

com.nvidia.workbench.application.<application-name>.user-msg

com.nvidia.workbench.application.jupyterlab.user-msg= "应用程序 {{.Name}} 正在 {{.URL}} 运行"

com.nvidia.workbench.application.<application-name>.icon-url

com.nvidia.workbench.application.jupyterlab.icon-url = "https://assets.nvidiagrid.net/ngc/logos/jupyterlab.png"

com.nvidia.workbench.application.<application-name>.webapp.autolaunch

com.nvidia.workbench.application.jupyterlab.webapp.autolaunch=true

com.nvidia.workbench.application.<application-name>.webapp.port

com.nvidia.workbench.application.jupyterlab.webapp.port = "8888"

com.nvidia.workbench.application.<application-name>.webapp.proxy.trim-prefix

com.nvidia.workbench.application.myapp.webapp.proxy.trim-prefix=true

com.nvidia.workbench.application.<application-name>.webapp.url

com.nvidia.workbench.application.jupyterlab.webapp.url = "https://127.0.0.1:6006"

com.nvidia.workbench.application.<application-name>.webapp.url-cmd

com.nvidia.workbench.application.jupyterlab.webapp.url-cmd = "jupyter notebook list | head -n 2 | tail -n 1 | cut -f1 -d' '"

com.nvidia.workbench.application.<application-name>.process.wait-until-finished

com.nvidia.workbench.application.jupyterlab.process.wait-until-finished=true