在 AKS 集群上部署 Azure 机器学习扩展

要使 AKS 群集能够运行训练作业或推理工作负载,必须先在 AKS 群集上部署 AzureML 扩展。 AzureML 扩展基于 AKS 群集扩展构建,其生命周期可以通过 Azure CLI k8s 扩展轻松管理。

本文介绍以下内容:

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

先决条件

  • 在 Azure 中运行的 AKS 群集。 如果以前没有使用过群集扩展,则需要注册 KubernetesConfiguration 服务提供程序。
  • 出于生产目的,Kubernetes 群集必须至少具有 4 个 vCPU 核心和 14 GB 内存。 有关资源及群集大小建议的详细信息,请参阅建议的资源计划
  • 在出站代理服务器或防火墙后面运行的群集需要额外的网络配置
  • 安装或升级 Azure CLI,确保其版本为 2.24.0 或更高版本。
  • 安装或升级 Azure CLI 扩展 k8s-extension,确保其版本为 1.2.3 或更高版本。

限制

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

可以使用 Azure 机器学习 CLI 命令 k8s-extension create 来部署 Azure 机器学习扩展。 借助 CLI k8s-extension create,你可以使用 --config--config-protected 参数以 key=value 格式指定一组配置设置。 以下列出了 Azure 机器学习扩展部署期间要指定的可用配置设置。

配置设置键名 说明 培训 推理 训练和推理
enableTraining TrueFalse,默认为 False。 对于支持机器学习模型训练和批量评分的 Azure 机器学习扩展部署,此项必须设置为 True 空值
enableInference TrueFalse,默认为 False。 对于支持机器学习推理的 Azure 机器学习扩展部署,此项必须设置为 True 空值
allowInsecureConnections TrueFalse,默认为 False。 可以设置为 True 以将推理 HTTP 终结点用于开发或测试。 空值 可选 可选
inferenceRouterServiceType loadBalancernodePortclusterIP。 必需(如果 enableInference=True)。 空值
internalLoadBalancerProvider 此配置目前仅适用于 Azure Kubernetes 服务 (AKS) 群集。 设置为 azure 以允许推理路由器使用内部负载均衡器。 空值 可选 可选
sslSecret Kubernetes 机密在 azureml 命名空间中的名称。 此配置用于存储 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 scheduler 的详细信息,请参阅重用 volcano scheduler 可选 空值 可选
installDcgmExporter TrueFalse,默认为 False。 Dcgm-exporter 可以公开 Azure 机器学习工作负载的 GPU 指标,可以在 Azure 门户中对其进行监视。 将 installDcgmExporter 设置为 True 以安装 dcgm-exporter。 但若要使用自己的 dcgm-exporter,请参阅 DCGM 导出程序 可选 可选 可选
受保护配置设置键名称 说明 培训 推理 训练和推理
sslCertPemFilesslKeyPemFile allowInsecureConnections 设置为 False 时,TLS/SSL 证书和密钥文件(经过 PEM 编码)的路径是支持推理 HTTPS 终结点的 Azure 机器学习扩展部署所必需的。 注意:不支持带有密码保护的 PEM 文件 空值 可选 可选

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

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

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

  • 实时推理支持需要 azureml-fe 路由器服务,并需要为 azureml-fe 指定 inferenceRouterServiceType 配置设置。 azureml-fe 可以采用以下 inferenceRouterServiceType 之一部署:
    • 键入 LoadBalancer。 使用云提供商的负载均衡器在外部公开 azureml-fe。 若要指定此值,请确保群集支持负载均衡器预配。 请注意,大多数本地 Kubernetes 群集可能不支持外部负载均衡器。
    • 键入 NodePort。 在静态端口上的每个节点 IP 中公开 azureml-fe。 可以通过请求 <NodeIP>:<NodePort> 从群集外部联系 azureml-fe。 使用 NodePort 还可为 azureml-fe 设置你自己的负载均衡解决方案和 TLS/SSL 终止。
    • 键入 ClusterIP。 在群集内部 IP 中公开 azureml-fe,这样就只能从群集内部访问 azureml-fe。 若要让 azureml-fe 为来自群集外部的推理请求提供服务,你需要为 azureml-fe 设置自己的负载均衡解决方案和 TLS/SSL终止。
  • 为确保 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 命令传入强制参数的值。

我们列出了 4 种典型的扩展部署场景以供参考。 若要为生产用途部署扩展,请仔细阅读配置设置的完整列表。

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

    对于 AKS 群集上的 Azure 机器学习扩展部署,请确保为 --cluster-type 参数指定 managedClusters 值。 运行以下 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 中为生产训练和推理工作负载启用 AKS 群集 对于 AKS 上的 Azure 机器学习扩展部署,请确保为 --cluster-type 参数指定 managedClusters 值。 假设群集包含 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
    

验证 Azure 机器学习扩展部署

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

    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 显示 Succeeded,请在将 kubeconfig 文件指向你的群集的情况下,在计算机上运行以下命令,以检查 azureml 命名空间下的所有 pod 是否都处于“Running”状态:

     kubectl get pods -n azureml
    

查看 Azure 机器学习扩展组件

Azure 机器学习扩展部署完成后,可以使用 kubectl get deployments -n azureml 查看群集中创建的资源列表。 其中通常包含每个指定配置设置的以下资源的子集。

资源名称 资源类型 培训 推理 训练和推理 说明 与云通信
gateway Kubernetes 部署 网关用于来回通信和发送数据。 将节点和群集资源信息发送到云服务。
aml-operator Kubernetes 部署 空值 管理训练作业的生命周期。 与云令牌服务交换令牌,以便对 Azure 容器注册表进行身份验证和授权。
metrics-controller-manager Kubernetes 部署 管理 Prometheus 的配置 空值
{EXTENSION-NAME}-kube-state-metrics Kubernetes 部署 将群集相关的指标导出到 Prometheus。 空值
{EXTENSION-NAME}-prometheus-operator Kubernetes 部署 可选 可选 可选 提供 Prometheus 和相关监视组件的 Kubernetes 本机部署和管理。 空值
azureml-fe-v2 Kubernetes 部署 空值 用于将传入推理请求路由到已部署服务的前端组件。 将服务日志发送到 Azure 存储。
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 statefulset 收集作业指标并将其发送到云。 将 CPU/GPU/内存利用率等作业指标发送到云。

重要

  • 默认情况下,Kubernetes 部署资源将随机部署到群集上的 1 个或多个节点,而守护程序集资源将部署到所有节点。 若要将扩展部署限制为特定的节点,请按配置设置表所述使用 nodeSelector 配置设置。

注意

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

后续步骤