使用 CLI 和 SDK 管理Azure 机器学习环境(v2)

适用于:Azure CLI ml extension v2(当前版本)Python SDK azure-ai-ml v2(当前版本)

Azure 机器学习环境定义作业或部署的执行环境,并封装代码的依赖项。 Azure 机器学习使用环境规范创建训练或评分代码在指定计算目标上运行的 Docker 容器。 可以从 conda 规范、Docker 映像或 Docker 生成上下文定义环境。

本文介绍如何使用 SDK 和 CLI 创建和管理Azure 机器学习环境(v2)。

先决条件

  • Azure 机器学习工作区。 有关创建工作区的说明,请参阅 “创建工作区”。

  • Azure CLI 和 ml 扩展或 Azure 机器学习 Python SDK v2:

    若要安装 Azure CLI 和 ml 扩展,请参阅 Install 并设置 CLI (v2)

    本文中的示例假定使用 Bash shell 或兼容的 shell。 例如,可以在 Linux 系统上使用 shell 或 适用于 Linux 的 Windows 子系统

提示

对于功能齐全的开发环境,请使用 Visual Studio Code 和 Azure 机器学习 扩展管理Azure 机器学习资源训练机器学习模型

克隆示例存储库

若要运行训练示例,请首先克隆示例存储库。 对于 CLI 示例,请更改为 cli 目录。 对于 SDK 示例,请更改为 sdk/python/assets/environment 目录:

git clone --depth 1 https://github.com/Azure/azureml-examples

--depth 1 参数仅克隆存储库中的最近一次提交,从而减少完成操作所需的时间。

连接到工作区

提示

使用以下选项卡选择要用于处理环境的方法。 选择选项卡会自动将本文中的所有选项卡切换到同一选项卡。可以随时选择另一个选项卡。

使用Azure CLI时,需要标识符参数 - 订阅、资源组和工作区名称。 尽管可以为每个命令指定这些参数,但你也可以设置将用于所有命令的默认值。 使用以下命令设置默认值。 将 <subscription ID><Azure 机器学习 workspace name><resource group> 替换为配置的值:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

精心策划的环境

Azure 机器学习中有两种类型的环境:特选环境和自定义环境。 特选环境是包含常用 ML 框架和工具的预定义环境。 自定义环境是用户定义的环境,可以通过 az ml environment create 创建。

特选环境由Azure 机器学习提供,默认可用。 Azure 机器学习定期使用最新的框架版本更新这些环境,并维护这些环境以获取 bug 修复和安全修补程序。 这些环境由缓存的 Docker 映像提供支持,从而降低了作业准备成本和模型部署时间。

通过引用特定版本或最新版本,您可以直接使用这些预配置环境进行训练或部署。 使用以下语法:azureml://registries/azureml/environment/<curated-environment-name>/versions/<version-number>azureml://registries/azureml/environment/<curated-environment-name>/labels/latest。 还可以通过修改支持这些特选环境的 Dockerfile,将其用作你自己的自定义环境的参考。

可以在 Azure 机器学习工作室 UI 中或通过 az ml environment list 使用 CLI(v2)查看可用特选环境集。

提示

在 CLI 或 SDK 中使用特选环境时,环境名称以后跟特选环境的名称开头 AzureML- 。 使用 Azure Machine Learning Studio 时,没有这样的前缀。 造成这种差异的原因是工作室 UI 在单独的选项卡上显示特选环境和自定义环境,因此不需要前缀。 CLI 和 SDK 没有这种分离,因此使用前缀来区分特选环境和自定义环境。

创建自定义环境

可以从 Docker 映像、Docker 生成上下文和具有 Docker 映像的 conda 规范定义环境。

注释

映像生成过程使用Microsoft Entra令牌访问与工作区关联的Azure 容器注册表。 令牌生存期不可配置,范围为 60-90 分钟。 如果映像生成花费的时间超过此时间,则生成可能会由于令牌过期而失败。 有关令牌生存期的详细信息,请参阅 Access 令牌

从 Docker 映像创建环境

若要从 Docker 映像定义环境,请提供托管在注册表中的映像 URI,例如 Docker Hub 或 Azure 容器注册表。

以下示例是从 Docker 映像定义的某个环境的 YAML 规范文件。 Docker Hub上的官方 PyTorch 存储库中的映像是通过 YAML 文件中的 image 属性指定的。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-example
image: pytorch/pytorch:latest
description: Environment created from a Docker image.

若要创建环境,请运行以下命令:

az ml environment create --file assets/environment/docker-image.yml

提示

Azure 机器学习 维护一组基于 Ubuntu Linux 的 CPU 和 GPU 的基本映像,并包含常见的系统依赖项。 例如,GPU 映像包含 Miniconda、OpenMPI、CUDA、cuDNN 和 NCCL。 你可以将这些映像用于环境,或者在生成自己的自定义映像时使用其对应的 Dockerfile 作为参考。

有关基础镜像集合及其相应的 Dockerfiles,请参阅 AzureML-Containers 存储库

从 Docker 构建上下文创建环境

如果不从预生成的映像定义环境,也可以从 Docker 构建上下文定义环境。 为此,请指定充当生成上下文的目录。 此目录应包含 Dockerfile(不大于 1MB)以及用于生成映像的任何其他文件。

以下示例是从构建上下文定义的环境的 YAML 规格文件。 生成上下文文件夹的本地路径在 build.path 字段中指定,该生成上下文文件夹中 Dockerfile 的相对路径在 build.dockerfile_path 字段中指定。 如果在 YAML 文件中省略 build.dockerfile_path,Azure 机器学习在生成上下文的根目录中查找名为 Dockerfile 的 Dockerfile。

在此示例中,生成上下文包含一个名为 Dockerfile 的 Dockerfile 和一个用于安装Python包的 Dockerfile 中引用的 requirements.txt 文件。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-context-example
build:
  path: docker-contexts/python-and-pip

若要创建环境,请运行以下命令:

az ml environment create --file assets/environment/docker-context.yml

Azure 机器学习在创建环境时开始从生成上下文生成映像。 可以在工作室 UI 中监视生成状态和查看生成日志。

从 conda 规范创建环境

可以使用包含 conda 环境依赖项的标准 conda YAML 配置文件来定义环境。 有关此标准格式的信息,请参阅手动创建环境

此外,必须为此环境指定基础 Docker 映像。 Azure 机器学习在提供的 Docker 映像的基础上生成 conda 环境。 如果在 Docker 映像中安装一些Python依赖项,则执行环境中不存在这些包,从而导致运行时失败。 默认情况下,Azure 机器学习生成具有指定依赖项的 Conda 环境,并在该环境中运行作业,而不是使用在基础映像上安装的任何Python库。

以下示例是通过 conda 规范所定义环境的 YAML 规范文件。 此处通过 conda_file 属性指定Azure 机器学习环境 YAML 文件中 conda 文件的相对路径。 或者,可以使用 conda_file 属性以内联方式定义 conda 规范,而不是在单独的文件中定义。

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-plus-conda-example
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: conda-yamls/pydata.yml
description: Environment created from a Docker image plus Conda environment.

若要创建环境,请运行以下命令:

az ml environment create --file assets/environment/docker-image-plus-conda.yaml

Azure 机器学习 会在作业或部署中使用环境时,根据此环境规范生成最终的 Docker 镜像。 也可以在工作室 UI 中手动触发环境的生成。

管理环境

SDK 和 CLI(v2)还允许管理Azure 机器学习环境资产的生命周期。

列表

列出工作区中的所有环境:

az ml environment list

列出给定名称下的所有环境版本:

az ml environment list --name docker-image-example

显示

获取特定环境的详细信息:

az ml environment show --name docker-image-example --version 1

更新

更新特定环境的可变属性:

az ml environment update --name docker-image-example --version 1 --set description="This is an updated description."

重要

对于环境,只能更新 descriptiontags。 所有其他属性都是不可变的;如果需要更改其中的任何属性,应创建一个新版本的环境。

存档

默认情况下,将环境存档后会在列表查询 (az ml environment list) 中隐藏。 你仍然可以继续在工作流中引用和使用已存档的环境。 你可以存档环境的所有版本,也可只存档特定版本。

如果未指定版本,则会存档该给定名称下环境的所有版本。 如果在已存档环境容器下创建新的环境版本,该新版本也将自动设置为已存档。

存档环境的所有版本:

az ml environment archive --name docker-image-example

存档特定环境版本:

az ml environment archive --name docker-image-example --version 1

重要

存档环境版本不会删除容器注册表中的缓存映像。 如果要删除与特定环境关联的缓存映像,可以在环境的关联存储库上使用命令 az acr repository delete

还原

还原存档环境会使它在列表查询(az ml environment list)中再次可见。 如果存档了整个环境容器,则可以还原容器,该容器将还原该名称下的所有版本。 如果仅存档了特定版本,则可以单独还原该版本。

还原环境的所有版本:

az ml environment restore --name docker-image-example

还原特定环境版本:

az ml environment restore --name docker-image-example --version 1

使用环境进行训练

若要将自定义环境用于训练作业,请指定作业 YAML 配置的 字段。environment 可以通过 environment: azureml:<environment-name>:<environment-version>environment: azureml:<environment-name>@latest(引用环境最新版本)引用现有的已注册Azure 机器学习环境,也可以内联定义环境规范。 如果以内联方式定义环境,请不要指定 nameversion 字段,因为这些环境被视为“未注册”环境,不会在环境资产注册表中进行跟踪。

提交训练作业时,生成新环境可能需要几分钟时间。 具体的持续时间取决于所需依赖项的大小。 环境由服务缓存。 因此,只要环境定义保持不变,完整安装就只会发生一次。


有关如何在作业中使用环境的详细信息,请参阅训练模型

使用环境进行模型部署

还可以将环境用于模型部署,以进行联机评分和批量评分。 为此,请在部署 YAML 配置中指定 environment 字段。

有关如何在部署中使用环境的详细信息,请参阅使用联机终结点部署机器学习模型并为其评分

后续步骤