你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
本文提供有关使用 Azure 机器学习 SDK v1 的信息。 自 2025 年 3 月 31 日起,SDK v1 已弃用,其支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。
建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 Python SDK v2 和 SDK v2 参考。
本文介绍如何使用自定义 Docker 映像通过 Azure 机器学习训练模型。 示例脚本演示如何通过创建卷积神经网络对图像进行分类。
Azure 机器学习提供了一个默认的 Docker 基础映像。 还可以使用 Azure 机器学习环境来指定不同的基础映像,例如维护的 Azure 机器学习基础映像 或你自己的 自定义映像。 使用自定义基础映像可以密切管理依赖项,并在运行训练作业时保持对组件版本的更严格控制。
先决条件
若要运行示例代码,配置必须包含以下环境之一:
使用预加载了机器学习 SDK 和示例存储库的专用笔记本服务器的 Azure 机器学习计算实例。
此配置不需要下载或其他安装。 若要准备此环境,请参阅 创建资源以开始使用。
Jupyter Notebook 服务器。 以下这些资源提供了指示,帮助你配置此环境:
- 创建工作区配置文件。
- 安装 Azure 机器学习 SDK。
- 创建可在 Internet 上使用的 Azure 容器注册表 或其他 Docker 注册表。
设置训练试验
第一个任务是通过初始化机器学习工作区、定义环境以及配置计算目标来设置训练试验。
初始化工作区
Azure 机器学习工作区是服务的顶级资源。 它为你提供了一个集中的位置来处理你创建的所有工件。 在 Python SDK 中,可以通过创建 Workspace
对象来访问工作区项目。
根据需要,从已创建作为Workspace
的 config.json 文件中创建一个对象。
from azureml.core import Workspace
ws = Workspace.from_config()
定义环境
创建一个 Environment
对象。
from azureml.core import Environment
fastai_env = Environment("fastai2")
以下代码中指定的基础映像支持 fast.ai 库,后者支持分布式深度学习功能。 有关详细信息,请参阅 fast.ai Docker Hub 存储库。
使用自定义 Docker 映像时,可能已正确设置 Python 环境。 在这种情况下,请将 user_managed_dependencies
标志设置为 True
,以使用自定义映像的内置 Python 环境。 默认情况下,Azure 机器学习构建包含指定依赖项的 Conda 环境。 该服务在该环境中运行脚本,而不是使用已安装在基础映像中的任何 Python 库。
fastai_env.docker.base_image = "fastdotai/fastai2:latest"
fastai_env.python.user_managed_dependencies = True
重要
Azure 机器学习仅支持提供以下软件的 Docker 映像:
- Ubuntu 18.04 或更高版本
- Conda 4.7.# 或更高版本
- Python 3.7+
- 用于训练的任何容器映像中必须包含一个位于 /bin/sh 的符合 POSIX 标准的 shell。
若要详细了解如何创建和管理 Azure 机器学习环境,请参阅创建和使用软件环境。
创建或附加计算目标
你需要创建一个计算目标来训练模型。 在本教程中,你将创建 AmlCompute
作为训练计算资源。
创建 AmlCompute
需要几分钟时间。 如果你的工作区中已有 AmlCompute
资源,则此代码会跳过创建流程。
与其他 Azure 服务一样,与 Azure 机器学习服务关联的某些资源(例如 AmlCompute
)存在限制。 有关详细信息,请参阅默认限制以及如何请求更高的配额。
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
# Choose a name for your cluster
cluster_name = "gpu-cluster"
try:
compute_target = ComputeTarget(workspace=ws, name=cluster_name)
print('Found existing compute target.')
except ComputeTargetException:
print('Creating a new compute target...')
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
max_nodes=4)
# Create the cluster
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
compute_target.wait_for_completion(show_output=True)
# Use get_status() to get a detailed status for the current AmlCompute
print(compute_target.get_status().serialize())
重要
为计算上的任何映像生成使用 CPU SKU。
配置训练作业
对于本教程,请使用 GitHub 上的训练脚本 train.py。 实际上,你可以原样接受任何自定义的训练脚本并使用 Azure 机器学习运行它。
创建 ScriptRunConfig
资源,以将作业配置为在所需的计算目标上运行。
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory='fastai-example',
script='train.py',
compute_target=compute_target,
environment=fastai_env)
提交训练作业
使用 ScriptRunConfig
对象提交训练运行时,submit
方法返回 ScriptRun
类型的对象。 返回的 ScriptRun
对象使你能够以编程方式访问有关训练运行的信息。
from azureml.core import Experiment
run = Experiment(ws,'Tutorial-fastai').submit(src)
run.wait_for_completion(show_output=True)
警告
Azure 机器学习通过复制整个源目录来运行训练脚本。 如果你有不想上传的敏感数据,请使用 .ignore 文件或不将其包含在源目录中。 请改为使用数据存储来访问数据。