在 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 RedHat OpenShift (ARO) 服务群集或 OpenShift 容器平台 (OCP) 群集,则必须满足配置 Kubernetes 群集的参考一文中所述的其他先决条件步骤。
  • 出于生产目的,Kubernetes 群集必须至少具有 4 个 vCPU 核心和 14 GB 内存。 有关资源及群集大小建议的详细信息,请参阅建议的资源计划
  • 出站代理服务器防火墙 后面运行的群集需要额外的 网络配置
  • 安装或升级 Azure CLI 到版本 2.51.0 或更高版本。
  • 安装或升级 Azure CLI 扩展 k8s-extension,确保其版本为 1.2.3 或更高版本。

限制

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

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

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

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

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

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

  • 实时推理支持需要 azureml-fe 路由器服务,并需要为 inferenceRouterServiceType 指定 azureml-fe 配置设置。 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 配置设置,或者同时指定 sslKeyPemFilesslCertPemFile 这两个受配置保护的设置。
  • 默认情况下,Azure 机器学习扩展部署要求为 HTTPS 支持提供配置设置。 出于开发或测试目的,可通过配置设置allowInsecureConnections=True轻松启用HTTP支持。

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 命令指定的扩展名称。

后续步骤