若要启用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 机器学习 不支持将服务主体与 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 相关资源,然后再继续下一步。
查看 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可以采用以下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轻松启用HTTP支持。
Azure 机器学习扩展部署 - CLI 示例和 Azure 门户
- 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 机器学习扩展部署
运行适用的 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>在响应中,查找
"name"和"provisioningState": "Succeeded"。 它可能在最初几分钟内显示为"provisioningState": "Pending"。如果 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 --nameCLI 命令指定的扩展名称。