创建和使用自定义环境

已完成

如果需要在 Azure 机器学习中创建自己的环境,用来列出运行脚本所需的所有包、库和依赖项,可以创建自定义环境。

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

从 Docker 映像创建自定义环境

最简单的方法可能就是从 Docker 映像创建环境。 Docker 映像可以托管在公共注册表(如 Docker Hub)中,也可以以私密方式存储在 Azure 容器注册表中。

许多开源框架封装在公用映像中,可以在 Docker Hub 上找到。 例如,可以找到一个公用 Docker 映像,其中包含使用 PyTorch 训练深度学习模型所需的所有包。

若要从 Docker 映像创建环境,可以使用 Python SDK:

from azure.ai.ml.entities import Environment

env_docker_image = Environment(
    image="pytorch/pytorch:latest",
    name="public-docker-image-example",
    description="Environment created from a public Docker image.",
)
ml_client.environments.create_or_update(env_docker_image)

此外,还可以使用 Azure 机器学习基础映像来创建环境(该环境类似于策展环境使用的映像):

from azure.ai.ml.entities import Environment

env_docker_image = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    name="aml-docker-image-example",
    description="Environment created from a Azure ML Docker image.",
)
ml_client.environments.create_or_update(env_docker_image)

使用 conda 规范文件创建自定义环境

尽管 Docker 映像包含了使用特定框架时的所有必要包,但你可能还需要包含其他包才能运行代码。

例如,你可能想要使用 PyTorch 训练模型,并使用 MLflow 跟踪模型。

如果需要在环境中包含其他包或库,可以在创建环境时将 conda 规范文件添加到 Docker 映像。

conda 规范文件是 YAML 文件,其中列出了需要使用 condapip 安装的包。 这样的 YAML 文件可能如下所示:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.7
  - scikit-learn
  - pandas
  - numpy
  - matplotlib

提示

有关 conda 文件的标准格式,请查看有关如何手动创建环境的 conda 文档。

若要从基础 Docker 映像和 conda 规范文件创建环境,可以使用以下代码:

from azure.ai.ml.entities import Environment

env_docker_conda = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./conda-env.yml",
    name="docker-image-plus-conda-example",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)

注意

由于所有策展环境都带有 AzureML- 前缀,所以你不能创建一个具有相同前缀的环境。

使用环境

最常见的情况是,如果要将脚本作为(命令)作业运行,就会使用环境。

若要指定用来运行脚本的环境,请使用 <curated-environment-name>:<version><curated-environment-name>@latest 语法引用环境。

例如,以下代码展示了如何使用 Python SDK 配置命令作业,它使用了一个包括 Scikit-Learn 在内的策展环境:

from azure.ai.ml import command

# configure job
job = command(
    code="./src",
    command="python train.py",
    environment="docker-image-plus-conda-example:1",
    compute="aml-cluster",
    display_name="train-custom-env",
    experiment_name="train-custom-env"
)

# submit job
returned_job = ml_client.create_or_update(job)

提交作业时,将会生成环境。 当你首次使用环境时,生成环境可能需要 10-15 分钟的时间。 可以在作业日志中查看环境生成日志。

当 Azure 机器学习生成新的环境时,它会被添加到工作区中的自定义环境列表。 环境映像托管在与工作区关联的 Azure 容器注册表中。 每当将同一环境用于另一个作业(和另一个脚本)时,该环境已准备就绪,无需再次生成。