创建 Azure 机器学习计算群集

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

本文介绍如何在 Azure 机器学习工作区中创建和管理计算群集

可以使用 Azure 机器学习计算群集在云中的 CPU 或 GPU 计算节点群集之间分配训练或批量推理过程。 有关包括 GPU 的 VM 大小的详细信息,请参阅 GPU 优化的虚拟机大小

了解如何:

  • 创建计算群集。
  • 使用低优先级 VM 降低计算群集成本。
  • 为群集设置托管标识

注意

使用无服务器计算将计算生命周期管理转移到 Azure 机器学习,而不是创建计算群集。

先决条件

根据首选的计算群集创建方法,为其余先决条件选择相应的选项卡。

  • 如果未在计算实例上运行代码,请安装 Azure 机器学习 Python SDK。 此 SDK 已安装在计算实例上。

  • 附加到 Python 脚本中的工作区:

    运行此代码来连接到 Azure 机器学习工作区。

    替换以下代码中的订阅 ID、资源组名称和工作区名称。 若要查找这些值:

    1. 登录到 Azure 机器学习工作室
    2. 打开要使用的工作区。
    3. 在右上方的 Azure 机器学习工作室工具栏中,选择你的工作区名称。
    4. 将工作区、资源组和订阅 ID 的值复制到代码中。

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

    # Enter details of your AML workspace
    subscription_id = "<SUBSCRIPTION_ID>"
    resource_group = "<RESOURCE_GROUP>"
    workspace = "<AML_WORKSPACE_NAME>"
    
    # get a handle to the workspace
    from azure.ai.ml import MLClient
    from azure.identity import DefaultAzureCredential
    
    ml_client = MLClient(
        DefaultAzureCredential(), subscription_id, resource_group, workspace
    )
    

    ml_client 是用于管理其他资源和作业的工作区处理程序。

什么是计算群集?

Azure 机器学习计算群集是一个托管的计算基础结构,可让你轻松创建单节点或多节点计算。 计算群集是可以与工作区中的其他用户共享的资源。 提交作业时,计算会自动扩展,并可以放入 Azure 虚拟网络。 计算群集也支持在虚拟网络中部署非公共 IP。 计算在容器化环境中执行,将模型的依赖项打包在 Docker 容器中。

计算群集可以在托管的虚拟网络Azure 虚拟网络中安全地运行作业,无需企业打开 SSH 端口。 作业在容器化环境中执行,并将模型依赖项打包到 Docker 容器中。

限制

  • 可以在你的工作区所在区域以外的区域中创建计算集群。 此功能只可用于计算群集,不可用于计算实例。

    警告

    使用工作区或数据存储所在区域以外的区域中的计算群集时,可能会出现网络延迟加重和数据传输成本增加的情况。 在创建群集以及在该群集上运行作业时,可能会存在这样的延迟和成本。

  • Azure 机器学习计算对可以分配的核心数等属性实施默认限制。 有关详细信息,请参阅管理和请求 Azure 资源的配额

  • 在 Azure 中可以对资源进行锁定,以便其成为只读资源或避免将其删除。 请勿将资源锁应用于包含工作区的资源组。 将锁应用于包含工作区的资源组会阻止对 Azure 机器学习计算群集进行缩放操作。 若要详细了解如何锁定资源,请参阅锁定资源以防止意外更改

创建

时间估算:大约需要五分钟。

注意

如果使用无服务器计算,则不需要创建计算群集。

可在不同的运行中重复使用 Azure 机器学习计算。 计算可与工作区中的其他用户共享,并在每次运行之后保留,它会根据提交的运行数以及群集上设置的 max_nodes 来自动纵向扩展或缩减节点。 min_nodes 设置可控制可用节点数的下限。

每个区域每个 VM 系列配额和创建计算群集时应用的区域总配额的专用内核是统一的,并与 Azure 机器学习训练计算实例配额共享。

重要

若要避免在没有作业运行时产生费用,请将最小节点数设置为 0。 此设置允许 Azure 机器学习在不使用节点时取消分配这些节点。 值大于 0 将使该数量的节点保持运行状态,即使它们未被使用也是如此。

计算在不使用时自动缩减为零个节点。 按需创建专用 VM 来运行作业。

使用以下示例创建计算群集:

若要在 Python 中创建持久性 Azure 机器学习计算资源,请指定 sizemax_instances 属性。 然后,Azure 机器学习将对其他属性使用智能默认值。

  • size:Azure 机器学习计算创建的 VM 系列节点
  • max_instances:在 Azure 机器学习计算中运行作业时,自动纵向扩展到的最大节点数

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

from azure.ai.ml.entities import AmlCompute

cluster_basic = AmlCompute(
    name="basic-example",
    type="amlcompute",
    size="STANDARD_DS3_v2",
    location="chinaeast",
    min_instances=0,
    max_instances=2,
    idle_time_before_scale_down=120,
)
ml_client.begin_create_or_update(cluster_basic)

还可以在创建 Azure 机器学习计算时配置多个高级属性。 使用这些属性可以创建固定大小的持久性群集,或者在订阅中的现有 Azure 虚拟网络内创建持久性群集。 有关详细信息,请参阅 AmlCompute 类

警告

在设置 location 参数时,如果它是你的工作区或数据存储以外的区域,则可能会出现网络延迟加重和数据传输成本增加的情况。 在创建群集以及在该群集上运行作业时,可能会存在这样的延迟和成本。

通过使用低优先级 VM 降低计算群集成本

还可以选择使用低优先级 VM 来运行部分或所有工作负载。 这些 VM 的可用性未没有保证,在使用时可能会被占用。 必须重启已占用的作业。

通过使用 Azure 低优先级虚拟机,可以利用 Azure 未使用的容量,从而大幅节省成本。 每当 Azure 需要回收容量时,Azure 基础结构就会逐出 Azure 低优先级虚拟机。 因此,Azure 低优先级虚拟机非常适合可以处理中断的工作负载。 可用容量可能因大小、区域、一天内的时间等因素而异。 部署 Azure 低优先级虚拟机时,如果有可用的容量,则 Azure 会分配 VM,但这些 VM 将没有 SLA 保障。 Azure 低优先级虚拟机不提供高可用性保证。 每当 Azure 需要回收容量时,Azure 基础结构就会逐出 Azure 低优先级虚拟机。

请使用以下任一方法指定低优先级 VM:

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

from azure.ai.ml.entities import AmlCompute

cluster_low_pri = AmlCompute(
    name="low-pri-example",
    size="STANDARD_DS3_v2",
    min_instances=0,
    max_instances=2,
    idle_time_before_scale_down=120,
    tier="low_priority",
)
ml_client.begin_create_or_update(cluster_low_pri)

删除

当未使用时,计算群集会纵向缩减到零个节点,但未预配的节点会增加配额使用量。 删除计算群集会从工作区中删除计算目标,并释放配额。

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

这会删除本文前面的create_basic对象中创建的基本计算群集。

from azure.ai.ml.entities import AmlCompute

ml_client.compute.begin_delete(cluster_basic.name).wait()

设置托管标识

若要了解如何使用计算群集配置托管标识,请参阅在 Azure 机器学习和其他服务之间设置身份验证

疑难解答

如果用户在 GA 发布之前已通过 Azure 门户创建了自己的 Azure 机器学习工作区,则他们可能无法在该工作区中创建 AmlCompute。 可对服务提出支持请求,也可通过门户或 SDK 创建新的工作区以立即解除锁定。

重要

如果你的计算实例或计算群集基于上述任何系列,请使用另一个 VM 大小重新创建。

以下系列已于 2024 年 8 月 31 日停用:

调整大小时停滞

如果 Azure 机器学习计算群集在根据节点状态重设大小时卡住 (0 -> 0),可能是 Azure 资源锁导致的。

Azure 允许你在资源上放置锁,这样这些资源就无法被删除,或者会处于只读状态。 锁定资源可能会导致意外结果。 某些操作看似不会修改资源,但实际上需要执行被锁阻止的操作。

借助 Azure 机器学习,将删除锁应用于工作区的资源组会阻止对 Azure ML 计算群集进行缩放操作。 若要解决此问题,我们建议删除资源组中的锁,并将锁应用于组中的各个项。

重要

不要将锁应用于以下资源:

资源名称 资源类型
<GUID>-azurebatch-cloudservicenetworksecurityggroup 网络安全组
<GUID>-azurebatch-cloudservicepublicip 公共 IP 地址
<GUID>-azurebatch-cloudserviceloadbalancer 负载均衡器

这些资源用于与计算群集进行通信,并在计算群集上执行缩放等操作。 删除这些资源中的资源锁便应该会允许对你的计算群集执行自动缩放。

若要详细了解资源锁定,请参阅锁定资源以防止意外更改

下一步

使用计算群集执行以下操作: