在 Azure Kubernetes 服务 (AKS) 或已启用 Azure Arc 的 Kubernetes 群集上部署 Azure 机器学习 扩展

若要启用Azure Kubernetes 服务 (AKS)或已启用Azure Arc的 Kubernetes 群集来运行训练作业或推理工作负荷,请先部署Azure 机器学习扩展。 Azure 机器学习 扩展是适用于 AKS 的 标准群集扩展,也是适用于已启用 Azure Arc 的 Kubernetes 的 群集扩展。 可以使用 Azure CLI k8s-extension 来管理其生命周期。

在本文中,你将了解:

  • 先决条件
  • 限制
  • 查看 Azure 机器学习扩展配置设置
  • Azure 机器学习扩展部署方案
  • 验证 Azure 机器学习扩展部署
  • 查看 Azure 机器学习扩展组件
  • 管理 Azure 机器学习扩展

先决条件

  • 在 Azure 中运行的 AKS 群集。 如果以前未使用群集扩展,则需要 注册 KubernetesConfiguration 服务提供程序。
  • 或者已启用Azure Arc的 Kubernetes 群集,该群集已启动并正在运行。 按照将现有 Kubernetes 群集连接到 Azure Arc 中的说明操作。
    • 如果群集是Azure Red Hat OpenShift(ARO)服务群集或 OpenShift 容器平台(OCP)群集,则必须满足有关配置 Kubernetes 群集文章的参考中所述的其他先决条件步骤。
  • 出于生产目的,Kubernetes 群集必须至少具有 4 个 vCPU 核心和 14 GB 内存。 有关资源及群集大小建议的详细信息,请参阅建议的资源计划。
  • 在 出站代理服务器 或 防火墙 后面运行的群集需要额外的 网络配置。
  • 安装或升级 Azure CLI 到版本 2.51.0 或更高版本。
  • 安装或升级 Azure CLI 扩展 k8s-extension,确保其版本为 1.2.3 或更高版本。

限制

  • Azure 机器学习 不支持将服务主体与 AKS 配合使用。 AKS 群集而应使用 托管标识。 同时支持系统分配的托管标识和用户分配的托管标识。 有关详细信息,请参阅在 Azure Kubernetes 服务中使用托管标识。
    • 将 AKS 群集从使用服务主体转换为使用托管标识时,需要在安装扩展之前删除并重新创建所有节点池。 无法直接更新节点池。
  • Azure 机器学习 不支持对 AKS 禁用本地帐户。 部署 AKS 群集时,默认启用本地帐户。
  • 如果你的 AKS 群集启用了 用于访问 API 服务器的授权 IP 范围,则必须为该 AKS 群集启用 Azure 机器学习控制平面的 IP 范围。 Azure 机器学习控制平面跨配对区域部署。 如果没有 API 服务器的访问权限,则无法部署机器学习 Pod。 在 AKS 群集中启用 IP 范围时,请为两个 配对区域都使用这些 IP 范围。
  • Azure 机器学习不支持跨订阅附加 AKS 群集。 如果其他订阅中有 AKS 群集,必须先 将其连接到 Azure Arc ,并在与 Azure 机器学习工作区相同的订阅中指定。
  • Azure 机器学习不保证支持 AKS 中的所有预览阶段功能。 例如,不支持 Microsoft Entra Pod 托管标识(已弃用)。
  • 如果按照 Azure 机器学习 AKS v1 文档中的步骤创建或附加 AKS 作为推理群集,请使用以下链接来清理旧的 azureml-fe 相关资源,然后再继续下一步。
  • ARM64 体系结构目前不支持Azure 机器学习扩展。 对该扩展,请使用采用 x86_64(amd64)架构的节点池。 AKS 节点池不能混用 amd64 和 ARM64 VM SKU,因此请选择采用受支持体系结构的节点池 VM SKU,并且不要在同一节点池中混用不同的体系结构。 如果群集具有混合节点池,则用于 nodeSelector 将扩展和工作负载定向到具有受支持体系结构的节点。

查看 Azure 机器学习扩展配置设置

使用 Azure CLI 命令 az k8s-extension create 部署Azure 机器学习扩展。 该az k8s-extension create命令通过key=value或--config参数接受以空格分隔的--config-protected对形式的配置设置。 下表列出了可在部署期间指定的可用配置设置。

配置设置键名 说明 培训 推理 训练和推理
enableTraining True 或 False,默认为 False。 对于支持机器学习模型训练和批量评分的 Azure 机器学习扩展部署,此项必须设置为 True。 ✓ 不适用 ✓
enableInference True 或 False,默认为 False。 必须将其设置为 True,以用于支持机器学习推理的 Azure 机器学习扩展部署。 不适用 ✓ ✓
allowInsecureConnections True 或 False,默认为 False。 Can 可设置为 True,以使用推理 HTTP 端点进行开发或测试。 不适用 可选 可选
inferenceRouterServiceType loadBalancer, nodePort 或 clusterIP。 如果 ,则为enableInference=True。 不适用 ✓ ✓
internalLoadBalancerProvider 此配置目前仅适用于 Azure Kubernetes 服务 (AKS) 群集。 设置为 azure 以允许推理路由器使用内部负载均衡器。 不适用 可选 可选
sslSecret azureml 命名空间中 Kubernetes Secret 的名称。 此配置用于存储 cert.pem(PEM 编码的 TLS/SSL 证书)和 key.pem(PEM 编码的 TLS/SSL 密钥),当 allowInsecureConnections 设置为 False 时,这是支持推理 HTTPS 终结点所必需的。 有关 sslSecret 的示例 YAML 定义,请参阅配置 sslSecret。 使用此配置,或使用由 sslCertPemFile 和 sslKeyPemFile 保护的配置设置组合。 不适用 可选 可选
sslCname 推理 HTTPS 终结点使用 TLS/SSL CNAME。 必填,如果 allowInsecureConnections=False 不适用 可选 可选
inferenceRouterHA True 或 False,默认为 True。 默认情况下,Azure 机器学习扩展会部署 3 个推理路由器副本来实现高可用性,这需要在群集中至少提供 3 个工作器节点。 如果群集的工作器节点少于 3 个,则将此项设置为 False。在这种情况下只会部署一个推理路由器服务。 不适用 可选 可选
nodeSelector 默认情况下,部署的 Kubernetes 资源和机器学习工作负载将随机部署到群集的一个或多个节点,而 DaemonSet 资源将部署到所有节点。 若要将扩展部署和训练/推理工作负载限制为具有标签 key1=value1 和 key2=value2 的特定节点,请相应地使用 nodeSelector.key1=value1、nodeSelector.key2=value2。 可选 可选 可选
installNvidiaDevicePlugin True 或 False,默认为 False。 NVIDIA GPU 硬件上的 ML 工作负载需要 NVIDIA 设备插件。 默认情况下,无论 Kubernetes 群集是否配备 GPU 硬件,Azure 机器学习扩展的部署都不会安装 NVIDIA 设备插件。 用户可以将此设置指定为 True 以进行安装,但请确保满足先决条件。 可选 可选 可选
installPromOp True 或 False,默认为 True。 Azure 机器学习扩展需要 prometheus 运算符来管理 prometheus。 将其设置为 False 以复用现有的 Prometheus Operator。 有关重用现有 Prometheus Operator 的更多信息,请参阅 重用 Prometheus Operator 可选 可选 可选
installVolcano True 或 False,默认为 True。 Azure 机器学习扩展需要使用 volcano 计划程序来计划作业。 设置为 False 以复用现有的 Volcano 调度器。 有关重用现有 Volcano 调度器的详细信息,请参阅重用 Volcano 调度器 可选 不适用 可选
installDcgmExporter True 或 False,默认为 False。 Dcgm-exporter 可以公开 Azure 机器学习工作负载的 GPU 指标,可以在 Azure 门户中对其进行监视。 将 installDcgmExporter 设置为 True 以安装 dcgm-exporter。 但如果您想使用自己的 dcgm-exporter,请参阅 DCGM exporter 可选 可选 可选
受保护配置设置键名称 说明 培训 推理 训练和推理
sslCertPemFile,sslKeyPemFile 当 allowInsecureConnections 设置为 False 时,TLS/SSL 证书和密钥文件(经过 PEM 编码)的路径是支持推理 HTTPS 终结点的 Azure 机器学习扩展部署所必需的。 注意:不支持带有密码保护的 PEM 文件 不适用 可选 可选

如配置设置表所示,不同配置设置的组合支持针对不同的 ML 工作负载场景部署 Azure 机器学习扩展:

  • 对于训练作业和批处理推理工作负载,请指定 enableTraining=True
  • 对于仅推理工作负载,请指定 enableInference=True
  • 对于所有类型的 ML 工作负载,请同时指定 enableTraining=True 和 enableInference=True

如果计划为实时推理工作负载部署 Azure 机器学习扩展并想要指定 enableInference=True,请注意以下与实时推理工作负载相关的配置设置:

  • 实时推理支持需要 azureml-fe 路由器服务,并需要为 inferenceRouterServiceType 指定 azureml-fe 配置设置。 路由器部署为 azureml-fe-v2 Kubernetes 部署,可在 扩展组件中看到该部署。 azureml-fe 可以采用以下 inferenceRouterServiceType 之一部署:
    • 键入 loadBalancer。 使用云提供商的负载均衡器对外暴露 azureml-fe。 若要指定此值,请确保群集支持负载均衡器预配。 请注意,大多数本地 Kubernetes 群集可能不支持外部负载均衡器。
    • 键入 nodePort。 通过每个节点 IP 上的静态端口暴露 azureml-fe。 您可以通过请求 azureml-fe,从集群外部访问 <NodeIP>:<NodePort>。 使用 nodePort 还可为 azureml-fe 设置你自己的负载均衡解决方案和 TLS/SSL 终止。 有关如何配置自己的入口的详细信息,请参阅 通过 HTTP 或 HTTPS 将其他入口控制器与 Azure 机器学习 扩展集成。
    • 键入 clusterIP。 在群集内部 IP 中公开 azureml-fe,这样就只能从群集内部访问 azureml-fe。 若要让 azureml-fe 为来自群集外部的推理请求提供服务,你需要为 azureml-fe 设置自己的负载均衡解决方案和 TLS/SSL终止。 有关如何配置自己的入口的详细信息,请参阅 通过 HTTP 或 HTTPS 将其他入口控制器与 Azure 机器学习 扩展集成。
  • 为确保 azureml-fe 路由服务的高可用性,Azure 机器学习扩展部署默认将为包含 3 个或更多节点的群集创建 3 个 azureml-fe 副本。 如果您的集群的节点数少于 3 个,请设置 inferenceRouterHA=False。
  • 还需要考虑使用 HTTPS 来限制对模型终结点的访问,以及保护客户端提交的数据。 为此,需要指定 sslSecret 配置设置,或者同时指定 sslKeyPemFile 和 sslCertPemFile 这两个受配置保护的设置。
  • 默认情况下,Azure 机器学习扩展部署要求为 HTTPS 支持提供配置设置。 出于开发或测试目的,可通过配置设置轻松启用allowInsecureConnections=True支持。

Azure 机器学习扩展部署 - CLI 示例和 Azure 门户

若要使用 CLI 部署Azure 机器学习扩展,请使用 az k8s-extension create 命令并为必需参数提供值。

以下列表描述了四种典型的扩展部署方案。 若要为生产使用情况部署扩展,请仔细阅读 配置设置的完整列表。

  • 在 Azure中使用 AKS 群集,快速证明概念以运行各种 ML 工作负荷,例如运行训练作业或将模型部署为联机/批处理终结点

    对于 AKS 群集上的Azure 机器学习扩展部署,请为 managedClusters 参数指定 --cluster-type 值。 运行以下 Azure CLI 命令以部署 Azure 机器学习扩展:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer allowInsecureConnections=True inferenceRouterHA=False --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • 使用 Azure Arc 启用的 Kubernetes 群集,在 Azure 之外进行快速概念验证,仅用于运行训练作业。

    对于已启用 Azure Arc 的 Kubernetes 群集上的 Azure 机器学习扩展部署,需要为connectedClusters参数指定--cluster-type值。 运行以下 Azure CLI 命令以部署 Azure 机器学习扩展:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • 在 Azure 中启用 AKS 群集,用于生产训练和推理工作负载 对于在 AKS 上部署 Azure 机器学习 扩展,请为 managedClusters 参数指定 --cluster-type 值。 假设群集包含 3 个以上的节点,并且你需要使用 Azure 公共负载均衡器和 HTTPS 来提供推理工作负载支持。 运行以下 Azure CLI 命令以部署 Azure 机器学习扩展:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=loadBalancer sslCname=<ssl cname> --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <your-RG-name> --scope cluster
    
  • 使用 NVIDIA GPU 在任何位置 启用已启用 Azure Arc 的 Kubernetes 群集,以便进行生产训练和推理工作负荷

    对于在 已启用 Azure Arc 的 Kubernetes 群集上部署 Azure 机器学习 扩展,请将 connectedClusters 参数指定为 --cluster-type。 假设群集包含 3 个以上的节点,并且你需要使用 NodePort 服务类型和 HTTPS 来提供推理工作负荷支持,请运行以下 Azure CLI 命令来部署 Azure 机器学习扩展:

    az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True enableInference=True inferenceRouterServiceType=nodePort sslCname=<ssl cname> installNvidiaDevicePlugin=True installDcgmExporter=True --config-protected sslCertPemFile=<file-path-to-cert-PEM> sslKeyPemFile=<file-path-to-cert-KEY> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <your-RG-name> --scope cluster
    

验证 Azure 机器学习扩展部署

  1. 运行适用的 CLI 命令来检查 Azure 机器学习扩展详细信息:

    AKS

    az k8s-extension show --name <extension-name> --cluster-type managedClusters --cluster-name <your-AKS-cluster-name> --resource-group <resource-group>
    

    已启用 Azure Arc 的 Kubernetes

    az k8s-extension show --name <extension-name> --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
    
  2. 在响应中,查找 "name" 和 "provisioningState": "Succeeded"。 它可能在最初几分钟内显示为 "provisioningState": "Pending"。

  3. 如果 provisioningState 显示“成功”,请在计算机上运行以下命令,其中包含指向群集的 kubeconfig 文件,检查命名空间下 azureml 的所有 Pod 是否处于 Running 状态:

     kubectl get pods -n azureml
    

查看 Azure 机器学习扩展组件

Azure 机器学习扩展部署完成后,请使用 kubectl get deployments -n azureml 查看群集中创建的资源列表。 列表通常由以下资源的子集组成,具体取决于指定的配置设置。

资源名称 资源类型 培训 推理 训练和推理 说明 与云通信
中继服务器 Kubernetes 部署 ✓ ✓ ✓ 部署仅为已启用 Azure Arc 的 Kubernetes 群集创建中继服务器,并在 AKS 群集中创建 not。 中继服务器与 Azure 中继配合使用,以便与云服务通信。 从云服务接收作业创建和模型部署请求;将作业状态与云服务同步。
网关 Kubernetes 部署 ✓ ✓ ✓ 网关用于来回通信和发送数据。 将节点和群集资源信息发送到云服务。
aml-operator Kubernetes 部署 ✓ 不适用 ✓ 管理训练任务的生命周期。 与云令牌服务交换令牌,以便对 Azure 容器注册表进行身份验证和授权。
指标控制器管理器 Kubernetes 部署 ✓ ✓ ✓ 管理 Prometheus 的配置 不适用
{EXTENSION-NAME}-kube-state-metrics Kubernetes 部署 ✓ ✓ ✓ 将群集相关的指标导出到 Prometheus。 不适用
{EXTENSION-NAME}-prometheus-operator Kubernetes 部署 可选 可选 可选 提供 Prometheus 和相关监控组件的 Kubernetes 原生部署与管理。 不适用
amlarc-identity-controller Kubernetes 部署 不适用 ✓ ✓ 通过托管标识请求和续订 Azure Blob/Azure 容器注册表令牌。 与云令牌服务交换令牌,以便对推理/模型部署使用的 Azure 容器注册表和 Azure Blob 进行身份验证和授权。
amlarc-identity-proxy Kubernetes 部署 不适用 ✓ ✓ 通过托管标识请求和续订 Azure Blob/Azure 容器注册表令牌。 与云令牌服务交换令牌,以便对推理/模型部署使用的 Azure 容器注册表和 Azure Blob 进行身份验证和授权。
azureml-fe-v2 Kubernetes 部署 不适用 ✓ ✓ 用于将传入推理请求路由到已部署服务的前端组件。 将服务日志发送到 Azure Blob 存储。
inference-operator-controller-manager Kubernetes 部署 不适用 ✓ ✓ 管理推理终结点的生命周期。 不适用
volcano-admission Kubernetes 部署 可选 不适用 可选 Volcano 许可 Webhook。 不适用
volcano-controllers Kubernetes 部署 可选 不适用 可选 管理 Azure 机器学习训练作业 Pod 的生命周期。 不适用
volcano-scheduler Kubernetes 部署 可选 不适用 可选 用于执行群集内作业计划。 不适用
fluent-bit Kubernetes DaemonSet ✓ ✓ ✓ 收集组件的系统日志。 将组件的系统日志上传到云。
{EXTENSION-NAME}-dcgm-exporter Kubernetes DaemonSet 可选 可选 可选 dcgm-exporter 公开 Prometheus 的 GPU 指标。 不适用
nvidia-device-plugin-daemonset Kubernetes DaemonSet 可选 可选 可选 nvidia-device-plugin-daemonset 在群集的每个节点上公开 GPU 不适用
prometheus-prom-prometheus Kubernetes 有状态集群 ✓ ✓ ✓ 收集作业指标并将其发送到云。 将 CPU/GPU/内存利用率等作业指标发送到云。

重要

  • Azure 中继资源与 Arc 群集资源位于同一资源组中。 它用于与 Kubernetes 群集通信。 修改它会导致已附加的计算目标失效。
  • 默认情况下,部署资源随机部署到群集的一个或多个节点,守护程序集资源将部署到所有节点。 若要将扩展部署限制为特定节点,请使用nodeSelector配置设置表中所述的配置设置。

注意

  • {EXTENSION-NAME}: 是使用 az k8s-extension create --name CLI 命令指定的扩展名称。

后续步骤