AI Workbench 项目规范#
每个AI Workbench 项目都包含一个名为 spec.yaml 的规范文件,用于定义和配置项目。该规范文件包含有关项目的信息,例如名称、描述、容器镜像、软件包和应用程序。AI Workbench 读取规范文件,并使用这些信息为项目构建和运行容器化的开发环境。
使用本文档了解以下内容
示例 AI Workbench 项目规范文件#
以下是 AI Workbench 项目 spec.yaml 文件的示例。
1specVersion: v2
2specMinorVersion: 1
3meta:
4 name: example-project
5 image: project-example-project
6 description: An example project using PyTorch
7 labels: []
8 createdOn: "2024-01-04T23:32:17Z"
9 defaultBranch: main
10layout:
11- path: code/
12 type: code
13 storage: git
14- path: models/
15 type: models
16 storage: gitlfs
17- path: data/
18 type: data
19 storage: gitlfs
20- path: data/scratch/
21 type: data
22 storage: gitignore
23environment:
24 base:
25 registry: nvcr.io
26 image: nvidia/ai-workbench/pytorch:1.0.2
27 build_timestamp: "20231212000523"
28 name: PyTorch
29 supported_architectures: []
30 cuda_version: "12.2"
31 description: A Pytorch 2.1 environment with CUDA 12.2
32 entrypoint_script: ""
33 labels:
34 - cuda12.2
35 - pytorch2.1
36 apps:
37 - name: jupyterlab
38 type: jupyterlab
39 class: webapp
40 start_command: jupyter lab --allow-root --port 8888 --ip 0.0.0.0 --no-browser
41 --NotebookApp.base_url=\$PROXY_PREFIX --NotebookApp.default_url=/lab --NotebookApp.allow_origin='*'
42 health_check_command: '[ \$(echo url=\$(jupyter lab list | head -n 2 | tail
43 -n 1 | cut -f1 -d'' '' | grep -v ''Currently'' | sed "s@/?@/lab?@g") | curl
44 -o /dev/null -s -w ''%{http_code}'' --config -) == ''200'' ]'
45 timeout_seconds: 90
46 stop_command: jupyter lab stop 8888
47 user_msg: ""
48 icon_url: ""
49 webapp_options:
50 autolaunch: true
51 port: "8888"
52 proxy:
53 trim_prefix: false
54 url_command: jupyter lab list | head -n 2 | tail -n 1 | cut -f1 -d' ' | grep
55 -v 'Currently'
56 - name: tensorboard
57 type: tensorboard
58 class: webapp
59 start_command: tensorboard --logdir \$TENSORBOARD_LOGS_DIRECTORY --path_prefix=\$PROXY_PREFIX
60 --bind_all
61 health_check_command: '[ \$(curl -o /dev/null -s -w ''%{http_code}'' https://127.0.0.1:\$TENSORBOARD_PORT\$PROXY_PREFIX/)
62 == ''200'' ]'
63 timeout_seconds: 90
64 stop_command: ""
65 user_msg: ""
66 icon_url: ""
67 webapp_options:
68 autolaunch: true
69 port: "6006"
70 proxy:
71 trim_prefix: false
72 url: https://127.0.0.1:6006
73 programming_languages:
74 - python3
75 icon_url: ""
76 image_version: 1.0.3
77 os: linux
78 os_distro: ubuntu
79 os_distro_release: "22.04"
80 schema_version: v2
81 user_info:
82 uid: "1001"
83 gid: "1001"
84 username: "appuser"
85 package_managers:
86 - name: apt
87 binary_path: /usr/bin/apt
88 installed_packages:
89 - curl
90 - git
91 - git-lfs
92 - vim
93 - name: pip
94 binary_path: /usr/local/bin/pip
95 installed_packages:
96 - jupyterlab==4.0.7
97 package_manager_environment:
98 name: ""
99 target: ""
100execution:
101 apps: []
102 resources:
103 gpu:
104 requested: 1
105 sharedMemoryMB: 1024
106 secrets: []
107 mounts:
108 - type: project
109 target: /project/
110 description: project directory
111 options: rw
112 - type: volume
113 target: /data/tensorboard/logs/
114 description: Tensorboard Log Files
115 options: volumeName=tensorboard-logs-volume
AI Workbench 项目规范定义#
项目元数据#
规范文件包括项目元数据,例如版本、名称、描述和目录结构。以下是项目元数据字段。
字段 |
描述 |
用法示例 |
---|---|---|
|
当前项目规范的架构版本号。 |
1specVersion: v2
|
|
当前项目规范的架构次版本号。 |
1specMinorVersion: 1
|
|
项目元数据,用于在 AI Workbench 应用程序中正确显示。 |
— |
|
项目的名称。 |
1name: hello-world
|
|
项目容器镜像的名称。此镜像名称在计算机本地,不会推送到容器注册表。 |
1image: project-hello-world
|
|
项目的描述。 |
1description: An example project using PyTorch
|
|
项目的标签列表。 |
— |
|
项目创建时间,格式为 RFC 3339 字符串。 |
1createdOn: "2024-01-04T23:32:17Z"
|
|
项目的默认 Git 分支。 |
1defaultBranch: main
|
|
有关项目目录的信息列表。AI Workbench 使用此信息来协调配置,例如通过向 .gitignore 或 .gitattributes 文件添加路径。
|
1layout:
2 - path: data/scratch/
3 type: data
4 storage: gitignore
|
项目环境信息#
规范文件包括环境信息,例如项目的容器镜像以及其中安装的其他软件包。您可以手动配置规范的此部分,但通常情况下,它会从您创建项目时选择的环境镜像的标签自动填充。
警告
当环境版本更新时,对 spec.yaml 文件的 environment.base
部分中的数据进行的任何手动修改都将被覆盖。
在规范文件的 environment
部分中,所有字段都是 base
字段的子字段。
1environment:
2 base:
3 ... all fields
以下是 environment.base
字段。
字段 |
描述 |
用法示例 |
---|---|---|
|
具有镜像的容器注册表。 |
1registry: nvcr.io
|
|
项目容器在其之上构建的容器镜像。 |
1image: nvidia/pytorch:23.12-py3
|
|
上次镜像构建的时间戳。对于时间戳,请指定年、月、日、小时、分钟、秒。 |
1build_timestamp: "20231212000523"
|
|
容器的名称。 |
1name: PyTorch
|
|
镜像兼容的受支持架构列表。 |
1supported_architectures:
2
3 - "amd64"
4 - "arm64"
|
|
环境中安装的 CUDA 版本(如果适用)。此字段告诉 AI Workbench 主机驱动程序必须支持的 CUDA 版本。如果此值未正确设置,您可能会遇到运行时错误,而 AI Workbench 在启动容器时未能发出警告。 |
1cuda_version: "12.2"
|
|
容器的描述。 |
1description: A Pytorch 2.1 environment with CUDA 12.2
|
|
项目容器启动时运行的脚本的路径。 |
1entrypoint_script: /path/to/script.sh
|
|
容器的标签列表,例如搜索词关键字或描述符。 |
1labels:
2 - cuda12.2
3 - pytorch2.1
4 - python3
5 - jupyterlab
|
|
容器中安装的应用程序列表。有关 |
1apps:
2- name: jupyterlab
3 ... more fields
4- name: tensorboard
5 ... more fields
|
|
容器中安装的编程语言列表。 |
1programming_languages:
2 - python3
|
|
容器的图标或图像的链接。 |
1icon_url: https://my-website.com/my-image.png
|
|
容器镜像的版本号(如果有)。 |
1image_version: 1.0.3
|
|
容器操作系统的名称。 |
1os: linux
|
|
容器操作系统发行版的名称。 |
1os_distro: ubuntu
|
|
容器操作系统发行版的发行版本。 |
1os_distro_release: "22.04"
|
|
AI Workbench 当前读取的容器标签架构版本的元数据。 |
1schema_version: v2
|
|
有关容器进程应以哪个用户身份运行的信息。 |
1user_info:
2 uid: "1001"
3 gid: "1001"
4 username: "appuser"
|
|
容器中安装的软件包管理器列表,以及每个软件包管理器的可选已安装软件包列表。 |
1package_managers:
2- name: conda
3 binary_path: /opt/conda/bin/conda
4 installed_packages:
5 - python=3.9.18
6 - pip
7- name: apt
8 binary_path: /usr/bin/apt
9 installed_packages:
10 - ca-certificates
11 - curl
12- name: pip
13 binary_path: /opt/conda/bin/pip
14 installed_packages: []
|
|
应在安装软件包和启动应用程序之前激活的软件包管理器环境。如果您的容器在构建时使用虚拟环境或 conda,则此功能很有用。 |
1package_manager_environment:
2 name: ""
3 target: ""
|
项目应用程序信息#
规范文件包括有关环境中安装的应用程序和自定义应用程序的信息,例如运行它们的命令和参数。以下是应用程序信息字段。
字段 |
描述 |
用法示例 |
---|---|---|
|
应用程序的名称。此名称显示在用户界面中。 |
1name: jupyterlab
|
|
应用程序的类型,用于确定运行哪些特定于应用程序的自动化。 |
1type: jupyterlab
|
|
应用程序的类别,用于确定哪些可选配置选项可用。有效值为 |
1class: webapp
|
|
用于启动应用程序的 shell 命令。不得是阻塞命令。 |
1start_command: jupyter lab...
|
|
用于检查应用程序的运行状况或状态的 shell 命令。返回零表示应用程序正在运行且运行状况良好。返回非零表示应用程序未运行或运行状况不佳。 |
1health_check_command: '<code>'
|
|
AI Workbench 等待 |
1timeout_seconds: 90
|
|
用于停止应用程序的 shell 命令。 |
1stop_command: jupyter lab stop 8888
|
|
应用程序运行时向用户显示的可选消息。如果 |
1user_msg: ""
|
|
用于应用程序的图标或图像的可选链接。 |
1icon_url: ""
|
|
如果
如果
|
1webapp_options:
2 autolaunch: true
3 port: "8888"
4 proxy:
5 trim_prefix: false
6 url_command: <your command>
1webapp_options:
2 autolaunch: true
3 port: "6006"
4 proxy:
5 trim_prefix: false
6 url: https://127.0.0.1:6006
1process_options:
2 wait_until_finished: true
|
项目运行时信息#
规范文件包括运行时信息,例如环境变量、要挂载在容器中的 GPU 数量以及自定义应用程序信息。以下是运行时信息字段。
字段 |
描述 |
用法示例 |
---|---|---|
|
有关如何运行项目的信息。 |
— |
|
项目中安装的自定义应用程序列表,这些应用程序不是容器环境的一部分。有关 |
1apps:
2- name: jupyterlab
3 ... more fields
4- name: mychat
5 ... more fields
|
|
运行项目请求或需要的主机资源。
有关详细信息,请参阅硬件。 |
1resources:
2 gpu:
3 requested: 0
4 sharedMemoryMB: 0
|
|
要在项目启动前设置的敏感环境变量列表。仅指定每个变量的名称和描述。每个变量的值不是规范文件的一部分,而是在运行时配置的。有关详细信息,请参阅密钥(敏感环境变量)。 |
1secrets:
2- variable: secret1
3 description: Secret 1
|
|
项目使用的外部文件夹和文件列表,以及它们在项目容器中的位置。配置挂载所需的必填值(如源目录)不是规范文件的一部分,而是在运行时配置的。
有关详细信息,请参阅AI Workbench 挂载。 |
1mounts:
2 - type: project
3 target: /project/
4 description: project directory
5 options: rw
|
自定义您的容器#
如果您想更改单个项目的容器环境的行为,您可以手动编辑 spec.yaml 文件中包含的元数据。首先,按照以下描述修改您的 spec.yaml 文件,然后重新构建您的项目环境。
注意
如果您想使用预构建的容器之一并进行简单的自定义,例如添加软件包,请参阅演练:自定义您的环境和环境配置。
如果您想创建完全自定义的容器,以便用于您自己的项目,或者您可以发布并与其他 AI Workbench 用户共享,请参阅使用您自己的容器。这是一个高级场景。
使用以下列表来确定要对规范文件进行的更改。
必需更改 — 必须发生的更改才能自定义项目容器。没有这些更改,您的项目将无法正确构建。
建议更改 — 您应该对项目容器进行的最佳实践更改。这些是 NVIDIA AI Workbench 客户端软件使用的字段。您的项目可能仍然可以构建,组件可能仍然可以运行;但是,您在 AI Workbench UI 中处理项目的体验可能会受到负面影响。
可选更改 — 仅当这些字段与您的项目相关时才更改它们。
要自定义您的容器,请导航到项目的 .project/spec.yaml
文件,并滚动到 environment
部分。使用下表中的信息来编辑您的规范文件。每个字段的完整描述和用法示例都在AI Workbench 项目规范定义中。
字段 |
更改? |
建议操作 |
---|---|---|
|
必需 |
指定您感兴趣的容器的容器注册表;如果您有 Dockerfile,您可能需要先构建容器并将其推送到注册表。 |
|
必需 |
指定您感兴趣的容器的容器镜像(以及标签,如果有);如果您有 Dockerfile,您可能需要先构建容器并将其推送到注册表。如果需要,还包括命名空间,但不包括注册表。 |
|
可选 |
无需手动更新。当您构建环境时,AI Workbench 会更新此字段。 |
|
必需 |
指定容器的名称。如果保持不变,AI Workbench 会在 UI 中显示旧的容器信息。 |
|
建议 |
指定容器支持的架构列表,或者如果不适用,则留空列表。 |
|
必需 |
指定此容器中安装的 CUDA 版本,或者如果不适用,则留空。如果未更新,AI Workbench 会错误地匹配驱动程序。 |
|
必需 |
指定容器的简明且信息丰富的描述。如果保持不变,AI Workbench 会在 UI 中显示旧的容器信息。 |
|
可选 |
如果您的项目在容器启动时需要任何自定义操作,我们提供了一个您可能想要使用的入口点脚本的位置。在此处指定脚本的位置。 |
|
建议 |
指定要附加到容器旁边的搜索词关键字或标签列表。将这些视为容器的搜索词关键字或描述符。 |
|
建议 |
指定容器中安装的应用程序。有关详细信息,请参阅项目应用程序信息。 |
|
建议 |
指定此容器中安装的编程语言,或者如果不适用,则留空。 |
|
可选 |
如果您希望 AI Workbench 显示图标作为此容器的一部分,请在此处链接到图标图像的 URL,或者将其留空以使用默认值。 |
|
建议 |
指定容器镜像的版本号(如果有)。 |
|
建议 |
指定容器操作系统的名称。 |
|
建议 |
指定容器操作系统发行版的名称。 |
|
建议 |
指定容器操作系统发行版的发行版本。 |
|
可选 |
无需更新此字段。但是,如果错误,项目会中断。当前版本为 |
|
建议 |
当您运行容器时,AI Workbench 会自动为您配置用户,但此字段会覆盖该用户。 |
|
建议 |
对于容器中的每个软件包管理器,指定软件包管理器的名称、管理器二进制文件的完整路径以及该管理器安装的软件包的逗号分隔列表。如果此项保持不变,则软件包管理器小部件可能无法正常工作,尤其是在您使用 venv 或 conda 环境时。 |
|
建议 |
指定应在安装软件包和启动应用程序之前激活的软件包管理器环境。如果您的容器在构建时使用虚拟环境或 conda,则此功能很有用。 |