使用 Azure 机器学习 CLI、SDK 和 REST API 训练模型

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

Azure 机器学习提供了多种提交 ML 训练作业的方法。 在本文中,你将了解如何使用以下方法提交作业:

  • 用于机器学习的 Azure CLI 扩展:ml 扩展,也称为 CLI v2。
  • 用于 Azure 机器学习的 Python SDK v2。
  • REST API:CLI 和 SDK 所基于的 API。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。 尝试试用版订阅
  • Azure 机器学习工作区。 如果没有,可以使用创建资源以开始使用一文中的步骤。

若要使用 SDK 信息,请安装适用于 Python 的 Azure 机器学习 SDK v2

克隆示例存储库

本文中的代码片段基于 Azure 机器学习示例 GitHub 存储库中的示例。 若要将存储库克隆到开发环境,请使用以下命令:

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

提示

使用 --depth 1 仅克隆最新提交到存储库的内容,从而减少完成操作所需的时间。

示例作业

本文中的示例使用鸢尾花数据集来训练 MLFlow 模型。

在云中训练

在云中训练时,必须连接到 Azure 机器学习工作区并选择将用于运行训练作业的计算资源。

1.连接到工作区

提示

使用以下选项卡选择要用于训练模型的方法。 选择选项卡会自动将本文中的所有选项卡切换为同一选项卡。你可以随时选择另一个选项卡。

若要连接到工作区,需要提供标识符参数 - 订阅、资源组和工作区名称。 你将在 azure.ai.ml 命名空间的 MLClient 中使用这些详细信息来获取所需 Azure 机器学习工作区的句柄。 若要进行身份验证,请使用默认 Azure 身份验证。 请查看此示例,了解有关如何配置凭据和连接到工作区的更多详细信息。

#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

2. 创建用于训练的计算资源

注意

若要尝试无服务器计算,请跳过此步骤并前进到 3。提交训练作业

Azure 机器学习计算群集是一种完全托管的计算资源,可用于运行训练作业。 在以下示例中,创建了名为 cpu-compute 的计算群集。

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

3.提交训练作业

若要运行此脚本,你将使用 ./sdk/python/jobs/single-step/lightgbm/iris/src/ 下用于执行 main.py Python 脚本的 command。 该命令通过将其作为 job 提交到 Azure 机器学习来运行。

注意

若要使用无服务器计算,请删除此代码中的 compute="cpu-cluster"

from azure.ai.ml import command, Input
# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.services["Studio"].endpoint

在上述示例中,你配置了以下内容:

  • code - 用于运行命令的代码所在的路径
  • command - 需要运行的命令
  • environment - 运行训练脚本所需的环境。 在此示例中,我们使用 Azure 机器学习所提供的名为 AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu 的精选或现成环境。 通过使用 @latest 指令来使用此环境的最新版本。 你还可以通过指定基本 docker 映像并为其指定 conda yaml 来使用自定义环境。
  • inputs - 命令的输入字典,采用名称值对的形式。 键是作业上下文中的输入名称,值是输入值。 在 command 中使用 ${{inputs.<input_name>}} 表达式引用输入。 若要将文件或文件夹用作输入,可以使用 Input 类。 有关详细信息,请参阅 SDK 和 CLI v2 表达式

有关详细信息,请参阅参考文档

提交作业时,会向 Azure 机器学习工作室中的作业状态返回一个 URL。 使用工作室 UI 查看工作进度。 你还可以使用 returned_job.status 检查作业的当前状态。

注册已训练的模型

以下示例介绍如何在 Azure 机器学习工作区中注册模型。

提示

训练作业返回的 name 属性用作模型路径的一部分。

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=AssetTypes.MLFLOW_MODEL
)

ml_client.models.create_or_update(run_model)

后续步骤

训练模型后,了解如何使用在线终结点部署该模型

更多示例,请参阅 Azure 机器学习示例 GitHub 存储库。

有关本文中使用的 Azure CLI 命令、Python SDK 类或 REST API 的详细信息,请参阅以下参考文档: