目录
受支持的 Kubernetes 版本和区域
-
安装 Azure 机器学习扩展的 Kubernetes 群集的版本支持窗口为“N-2”,这与 Azure Kubernetes 服务 (AKS) 版本支持策略一致,其中“N”是 Azure Kubernetes 的最新 GA 次要版本服务。
-
例如,如果 AKS 今天发布了 1.20.a,则 1.20.a、1.20.b、1.19.c、1.19.d、1.18.e 和 1.18.f 均受支持。
-
如果客户在运行不受支持的 Kubernetes 版本,则在请求群集支持时,系统会要求他们升级。 运行不受支持的 Kubernetes 版本的群集未涵盖在 Azure 机器学习扩展支持策略中。
-
-
Azure 机器学习扩展区域可用性:
- Azure 机器学习扩展可以部署到已启用 Azure Arc 的 Kubernetes 区域支持中列出的受支持区域中的 AKS 或已启用 Azure Arc 的 Kubernetes。
建议的资源计划
部署 Azure 机器学习扩展时,某些相关服务将部署到适用于 Azure 机器学习的 Kubernetes 群集。 群集中“相关服务及其资源使用情况”如下表所示:
3(用于生产目的) | ✓ | 空值 | 900 | 2000 | 800 | 1200 |
| online-deployment | 每个部署 1 个 | User-created | 空值 | | | | |
| online-deployment/identity-sidecar | 每个部署 1 个 | ✓ | 空值 | 10 | 50 | 100 | 100 |
| aml-operator | 1 | 不适用 | ✓ | 20 | 1020 | 124 | 2168 |
| volcano-admission | 1 | 不适用 | ✓ | 10 | 100 | 64 | 256 |
| volcano-controller | 1 | 不适用 | ✓ | 50 | 500 | 128 | 512 |
| volcano-schedular | 1 | 不适用 | ✓ | 50 | 500 | 128 | 512 |
除你自己的部署/Pod 外,“总最低系统资源要求”如下:
ARO 或 OCP 群集的先决条件
禁用安全增强型 Linux (SELinux)
启用了 SELinux 的计算机不支持 Azure 机器学习数据集(用于 Azure 机器学习训练作业的 SDK v1 功能)。 因此,需要对所有辅助角色禁用 selinux
才能使用 Azure 机器学习数据集。
ARO 和 OCP 的特权设置
对于 ARO 或 OCP 群集上的 Azure 机器学习扩展部署,授予对 Azure 机器学习服务帐户的特权访问,运行 oc edit scc privileged
命令,并在“users:”下添加以下服务帐户:
system:serviceaccount:azure-arc:azure-arc-kube-aad-proxy-sa
system:serviceaccount:azureml:{EXTENSION-NAME}-kube-state-metrics
system:serviceaccount:azureml:prom-admission
system:serviceaccount:azureml:default
system:serviceaccount:azureml:prom-operator
system:serviceaccount:azureml:load-amlarc-selinux-policy-sa
system:serviceaccount:azureml:azureml-fe-v2
system:serviceaccount:azureml:prom-prometheus
system:serviceaccount:{KUBERNETES-COMPUTE-NAMESPACE}:default
system:serviceaccount:azureml:azureml-ingress-nginx
system:serviceaccount:azureml:azureml-ingress-nginx-admission
备注
{EXTENSION-NAME}
:它是由az k8s-extension create --name
CLI 命令指定的扩展名。{KUBERNETES-COMPUTE-NAMESPACE}
:它是将计算附加到 Azure 机器学习工作区时指定的 Kubernetes 计算的命名空间。 如果KUBERNETES-COMPUTE-NAMESPACE
为default
,则跳过配置system:serviceaccount:{KUBERNETES-COMPUTE-NAMESPACE}:default
。
收集的日志详细信息
关于群集中 Azure 机器学习工作负载的某些日志将通过扩展组件(例如状态、指标、生命周期等)收集。以下列表显示了收集的所有日志详细信息,包括收集的日志类型以及它们发送到或存储的位置。
Azure 机器学习作业与自定义数据存储连接
永久性卷 (PV) 和永久性卷声明 (PVC) 是 Kubernetes 概念,允许用户提供和使用各种存储资源。
- 创建 PV,以 NFS 为例,
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
nfs:
path: /share/nfs
server: 20.98.110.84
readOnly: false
- 使用 ML 工作负载在同一 Kubernetes 命名空间中创建 PVC。 在
metadata
中,必须添加标签ml.azure.com/pvc: "true"
以供 Azure 机器学习识别,并添加注释ml.azure.com/mountpath: <mount path>
以设置装载路径。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
namespace: default
labels:
ml.azure.com/pvc: "true"
annotations:
ml.azure.com/mountpath: "/mnt/nfs"
spec:
storageClassName: ""
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
重要
- 只有命令作业/组件、hyperdrive 作业/组件和批处理部署支持来自 PVC 的自定义数据存储。 > * 实时联机终结点、AutoML 作业和 PRS 作业不支持来自 PVC 的自定义数据存储。
- 此外,只有与 PVC 位于同一 Kubernetes 命名空间中的 Pod 才会装载到卷上。 数据科学家能够访问作业中 PVC 批注中指定的
mount path
。 AutoML 作业和 Prs 作业将无法访问 PVC。
支持的 Azure 机器学习排斥和容许
污点和容忍是 Kubernetes 中的概念,它们协同工作,以确保不会将 Pod 安排到不适当的节点。
与 Azure 机器学习(包括 AKS 和 Arc Kubernetes 群集)集成的 Kubernetes 群集现在支持特定的 Azure 机器学习排斥和容许,允许用户在 Azure 机器学习专用节点上添加特定的 Azure 机器学习排斥,以防止非 Azure 机器学习工作负载安排到这些专用节点上。
我们仅支持在节点上放置 amlarc 特定的排斥,定义如下:
提示
- 对于Azure Kubernetes 服务 (AKS),可以遵循有关 Azure Kubernetes 服务 (AKS) 中的高级计划程序功能的最佳做法中的示例,将污点应用到节点池。
- 对于 Arc Kubernetes 群集(例如本地 Kubernetes 群集),可以使用
kubectl taint
命令向节点添加污点。 有关更多示例,请参阅 Kubernetes 文档。
最佳实践
根据 Azure 机器学习专用节点的计划要求,可以添加“多个特定于 amlarc 的污点”,以限制 Azure 机器学习工作负载可在节点上运行的内容。 我们列出了有关使用 amlarc 排斥的最佳做法:
- 若要防止非 Azure 机器学习工作负载在 Azure 机器学习专用节点/节点池上运行,只需向这些节点添加
aml overall
污点即可。 - 要防止非系统 Pod 在 Azure 机器学习专用节点/节点池上运行,必须添加以下污点:
amlarc overall
排斥amlarc system
排斥
- 要防止非 ml 工作负载在 Azure 机器学习专用节点/节点池上运行,必须添加以下污点:
amlarc overall
排斥amlarc workloads
排斥
- 要防止不是从工作区 X 创建的工作负载在 Azure 机器学习专用节点/节点池上运行,必须添加以下污点:
amlarc overall
排斥amlarc resource group (has this <workspace X>)
排斥amlarc <workspace X>
排斥
- 要防止不是由计算目标 X 创建的工作负载在 Azure 机器学习专用节点/节点池上运行,必须添加以下污点:
amlarc overall
排斥amlarc resource group (has this <workspace X>)
排斥amlarc workspace (has this <compute X>)
排斥amlarc <compute X>
排斥
通过 HTTP 或 HTTPS 将其他入口控制器与 Azure 机器学习扩展集成
除了默认的 Azure 机器学习推理负载均衡器 azureml-fe 外,还可以通过 HTTP 或 HTTPS 将其他负载均衡器与 Azure 机器学习扩展集成。
本教程介绍如何集成 Nginx 入口控制器或 Azure 应用程序网关。
先决条件
- 使用
inferenceRouterServiceType=ClusterIP
和allowInsecureConnections=True
部署 Azure 机器学习扩展,以便 Nginx 入口控制器可以自行处理 TLS 终止,而不是当通过 HTTPS 公开服务时将其移交给 azureml-fe。 - 若要与 Nginx 入口控制器集成,需要使用 Nginx 入口控制器设置 Kubernetes 群集。
- 创建基本控制器:如果是从头开始,请参阅这些说明。
- 若要与 Azure 应用程序网关集成,需要使用 Azure 应用程序网关入口控制器设置 Kubernetes 群集。
- 若要在此应用程序上使用 HTTPS,则需 x509 证书及其私钥。
通过 HTTP 公开服务
为了公开 azureml-fe,我们将使用以下入口资源:
# Nginx Ingress Controller example
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: azureml-fe
namespace: azureml
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
backend:
service:
name: azureml-fe
port:
number: 80
pathType: Prefix
此入口会将 azureml-fe
服务和所选部署作为 Nginx 入口控制器的默认后端公开。
# Azure Application Gateway example
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: azureml-fe
namespace: azureml
spec:
ingressClassName: azure-application-gateway
rules:
- http:
paths:
- path: /
backend:
service:
name: azureml-fe
port:
number: 80
pathType: Prefix
此入口会将 azureml-fe
服务和所选部署作为应用程序网关的默认后端公开。
请将以上入口资源另存为 ing-azureml-fe.yaml
。
-
通过运行以下命令部署
ing-azureml-fe.yaml
:kubectl apply -f ing-azureml-fe.yaml
-
检查入口控制器的日志以了解部署状态。
-
azureml-fe
应用程序现在应该可用。 可以通过访问以下位置进行检查:- Nginx 入口控制器:Nginx 入口控制器的公共 LoadBalancer 地址
- Azure 应用程序网关:应用程序网关的公共地址。
-
备注
调用前,将 scoring_uri 中的 IP 替换为 Nginx 入口控制器的公共 LoadBalancer 地址。
通过 HTTPS 公开服务
-
在部署入口之前,需创建 Kubernetes 机密来托管证书和私钥。 可通过运行以下命令来创建 Kubernetes 机密
kubectl create secret tls <ingress-secret-name> -n azureml --key <path-to-key> --cert <path-to-cert>
-
定义以下入口。 在入口的
secretName
节中指定机密的名称。# Nginx Ingress Controller example apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: azureml-fe namespace: azureml spec: ingressClassName: nginx tls: - hosts: - <domain> secretName: <ingress-secret-name> rules: - host: <domain> http: paths: - path: / backend: service: name: azureml-fe port: number: 80 pathType: Prefix
# Azure Application Gateway example apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: azureml-fe namespace: azureml spec: ingressClassName: azure-application-gateway tls: - hosts: - <domain> secretName: <ingress-secret-name> rules: - host: <domain> http: paths: - path: / backend: service: name: azureml-fe port: number: 80 pathType: Prefix
备注
将上述入口资源中的
<domain>
和<ingress-secret-name>
替换为指向 Nginx 入口控制器/应用程序网关的 LoadBalancer 的域和你的机密名称。 将以上入口资源存储在名为ing-azureml-fe-tls.yaml
的文件中。 -
通过运行部署 ing-azureml-fe-tls.yaml
kubectl apply -f ing-azureml-fe-tls.yaml
-
检查入口控制器的日志以了解部署状态。
-
现在,
azureml-fe
应用程序在 HTTPS 上可用。 可以通过访问 Nginx 入口控制器的公共 LoadBalancer 地址来检查这一点。 -
备注
调用前,将 scoring_uri 中的协议和 IP 替换为指向 Nginx 入口控制器或应用程序网关的 LoadBalancer 的 https 和域。
使用 ARM 模板部署扩展
可以使用 ARM 模板部署托管群集上的扩展。 可从 deployextension.json 中找到示例模板,其中包含演示参数文件 deployextension.parameters.json
若要使用示例部署模板,请使用正确的值编辑参数文件,然后运行以下命令:
az deployment group create --name <ARM deployment name> --resource-group <resource group name> --template-file deployextension.json --parameters deployextension.parameters.json
有关如何使用 ARM 模板的详细信息,请参阅 ARM 模板文档