為 Azure Machine Learning 設定 Kubernetes 叢集的參考

本文包含使用 Azure 機器學習 設定 Kubernetes 的參考資訊。

支援的 Kubernetes 版本和區域

  • 安裝 Azure 機器學習 延伸模組的 Kubernetes 叢集具有 “N-2” 的版本支持視窗,與 Azure Kubernetes Service (AKS) 版本支持原則一致,其中 'N' 是 Azure Kubernetes Service 的最新 GA 次要版本。

    • 例如,如果 AKS 今天引進 1.20.a,則支援 1.20.a、1.20.b、1.19.c、1.19.d、1.18.e 和 1.18.f 版。

    • 如果客戶執行不支援的 Kubernetes 版本,則會要求在要求叢集支援時升級。 Azure 機器學習 擴充功能支持原則並未涵蓋執行不支援 Kubernetes 版本的叢集。

  • Azure 機器學習 擴充功能區域可用性:

    • Azure 機器學習 擴充功能可以部署至 AKS 或已啟用 Azure Arc 的 Kubernetes,而 Azure Arc 已啟用 Kubernetes 的區域則位於已啟用 Azure Arc 的 Kubernetes 區域支援中。

當您部署 Azure 機器學習 擴充功能時,某些相關服務會部署到適用於 Azure 的 Kubernetes 叢集 機器學習。 下表列出 相關服務及其叢集中的資源使用量 :

部署/精靈集 複製品# 訓練 推斷 CPU 要求(m) CPU 限制(m) 記憶體要求(Mi) 記憶體限制(Mi)
metrics-controller-manager 1 ✓ ✓ 10 100 20 300
Prometheus 運算子 1 ✓ ✓ 100 400 128 512
普羅 米修斯 1 ✓ ✓ 100 1000 512 4096
kube-state-metrics 1 ✓ ✓ 10 100 32 256
閘道 1 ✓ ✓ 50 500 256 2048
fluent-bit 每個節點1個 ✓ ✓ 10 200 100 300
inference-operator-controller-manager 1 ✓ N/A 100 1000 128 1024
amlarc-identity-controller 1 ✓ N/A 200 1000 200 1024
amlarc-identity-proxy 1 ✓ N/A 200 1000 200 1024
azureml-ingress-nginx-controller 1 ✓ N/A 100 1000 64 512
azureml-fe-v2 1 (用於測試目的)
或
3 (生產用途)
✓ N/A 900 2000 800 1200
線上部署 每個部署1個 使用者建立 N/A <使用者定義> <使用者定義> <使用者定義> <使用者定義>
online-deployment/identity-sidecar 每個部署1個 ✓ N/A 10 50 100 100
aml-operator 1 N/A ✓ 20 1020 124 2168
火山入院 1 N/A ✓ 10 100 64 256
火山控制器 1 N/A ✓ 50 500 128 512
火山-施德拉爾 1 N/A ✓ 50 500 128 512

排除您自己的部署/Pod, 最低系統資源需求 總數如下:

案例 已啟用推斷 已啟用訓練 CPU 要求(m) CPU 限制(m) 記憶體要求(Mi) 記憶體限制(Mi) 節點計數 建議的 VM 大小下限 對應的 AKS VM SKU
針對測試 ✓ N/A 1780 8300 2440 12296 1 個節點 2 個 vCPU、7 GiB 記憶體、6400 IOPS、1500Mbps BW DS2v2
針對測試 N/A ✓ 410 4420 1492 10960 1 個節點 2 個 vCPU、7 GiB 記憶體、6400 IOPS、1500Mbps BW DS2v2
針對測試 ✓ ✓ 1910 10420 2884 15744 1 個節點 4 vCPU、14 GiB 記憶體、12800 IOPS、1500Mbps BW DS3v2
針對生產環境 ✓ N/A 3600 12700 4240 15296 3 節點(秒) 4 vCPU、14 GiB 記憶體、12800 IOPS、1500Mbps BW DS3v2
針對生產環境 N/A ✓ 410 4420 1492 10960 1 個節點(秒) 8 vCPU、28GiB Memroy、25600 IOPS、6000Mbps BW DS4v2
針對生產環境 ✓ ✓ 3730 14820 4684 18744 3 節點(秒) 4 vCPU、14 GiB 記憶體、12800 IOPS、1500Mbps BW DS4v2

注意

  • 為了 進行測試,您應該參考資源 要求。
  • 為了 生產目的,您應該參考資源 限制。

重要

以下是一些其他參考考慮:

  • 如需 較高的網路頻寬和更佳的磁碟 I/O 效能,我們建議使用較大的 SKU。
    • 以 DV2/DSv2 為例,使用大型 SKU 可以減少提取映射的時間,以提升網路/記憶體效能。
    • 如需 AKS 保留的詳細資訊,請參閱 AKS 保留。
  • 如果您使用 AKS 叢集,您可能需要考慮 AKS 中容器映射的大小限制,您可以在 AKS 容器映射大小限制中找到更多資訊。

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 計算命名空間。 如果 system:serviceaccount:{KUBERNETES-COMPUTE-NAMESPACE}:default 是 KUBERNETES-COMPUTE-NAMESPACE,則略過設定default。

收集的記錄詳細數據

叢集中有關 Azure 機器學習 工作負載的一些記錄會透過擴充元件收集,例如狀態、計量、生命週期等。下列清單顯示收集的所有記錄詳細數據,包括收集的記錄類型,以及傳送至或儲存的記錄類型。

莢 資源描述 詳細記錄資訊
amlarc-identity-controller 透過受控識別要求及更新 Azure Blob/Azure Container Registry 權杖。 只有在安裝擴充功能時設定時才使用 enableInference=true 。 它有追蹤記錄,以取得端點的身分識別,以向 Azure 機器學習 服務進行驗證。
amlarc-identity-proxy 透過受控識別要求及更新 Azure Blob/Azure Container Registry 權杖。 只有在安裝擴充功能時設定時才使用 enableInference=true 。 它有追蹤記錄,以取得叢集身分識別以向 Azure 機器學習 服務進行驗證的狀態。
aml-operator 管理定型工作的生命週期。 記錄包含 Azure 機器學習 叢集中的訓練作業 Pod 狀態。
azureml-fe-v2 將傳入推斷要求路由至已部署服務的前端元件。 存取要求層級的記錄,包括要求標識符、開始時間、回應時間、錯誤詳細數據和要求延遲的持續時間。 服務元數據變更的追蹤記錄、執行狀況良好的服務狀態等等,以供偵錯之用。
閘道 閘道用於通訊及來回傳送資料。 追蹤從 Azure 機器學習 服務到叢集的要求記錄。
healthcheck -- 記錄包含azureml命名空間資源(Azure 機器學習 擴充功能)狀態,以診斷擴充功能無法運作的情況。
inference-operator-controller-manager 管理推斷端點的生命週期。 記錄包含 Azure 機器學習 推斷端點和叢集中的部署 Pod 狀態。
metrics-controller-manager 管理 Prometheus 的設定。 追蹤記錄,以取得上傳定型作業的狀態,以及CPU使用率和記憶體使用率的推斷部署計量。
轉寄伺服器 轉接伺服器只有在已連線的叢集中才需要,而且不會安裝在 AKS 叢集中。 轉送伺服器可與 Azure 轉送搭配運作來與雲端服務通訊。 記錄包含來自 Azure 轉播的要求層級資訊。

Azure 機器學習 作業會與自定義數據記憶體連線

永續性磁碟區 (PV) 和永續性磁碟區宣告 (PV) 是 Kubernetes 概念,可讓使用者提供及取用各種記憶體資源。

  1. 建立 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
  1. 在具有 ML 工作負載的相同 Kubernetes 命名空間中建立PVC。 在 中metadata,您必須新增要由 Azure 機器學習 辨識的標籤ml.azure.com/pvc: "true",並新增註釋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(s) 相同 Kubernetes 命名空間中的 Pod 才會掛接磁碟區。 資料科學家能夠存取 mount path 作業中PVC批注中指定的 。 AutoML 作業和 Prs 作業將無法存取PVC(s)。

支援的 Azure Machine Learning 污點和容差

Taint 和 Toleration 是 Kubernetes 概念,可共同運作,以確保 Pod 不會排程到不適當的節點上。

與 Azure 機器學習 整合的 Kubernetes 叢集(包括 AKS 和 Arc Kubernetes 叢集)現在支援特定的 Azure 機器學習 污點和容忍,讓使用者在 Azure 機器學習 專用節點上新增特定的 Azure 機器學習 污點,以防止非 Azure 機器學習 工作負載排程到這些專用節點上節點。

我們僅支援將 amlarc 特定污點放在您的節點上,其定義如下:

污點 機碼 值 影響 描述
amlarc 整體 ml.azure.com/amlarc 是 NoSchedule、NoExecute 或 PreferNoSchedule 所有 Azure 機器學習 工作負載,包括擴充系統服務 Pod 和機器學習工作負載 Pod 都會容許此amlarc overall污點。
amlarc 系統 ml.azure.com/amlarc-system 是 NoSchedule、NoExecute 或 PreferNoSchedule 只有 Azure 機器學習 擴充系統服務 Pod 可以容忍此amlarc system污點。
amlarc 工作負載 ml.azure.com/amlarc-workload 是 NoSchedule、NoExecute 或 PreferNoSchedule 只有機器學習工作負載 Pod 可以容忍這種 amlarc workload 污點。
amlarc 資源群組 ml.azure.com/resource-group <資源組名> NoSchedule、NoExecute 或 PreferNoSchedule 只有從特定資源群組建立的機器學習工作負載 Pod 才會容許此 amlarc resource group 污點。
amlarc 工作區 ml.azure.com/workspace <工作區名稱> NoSchedule、NoExecute 或 PreferNoSchedule 只有從特定工作區建立的機器學習工作負載 Pod 會容許此 amlarc workspace 污點。
amlarc 計算 ml.azure.com/compute <計算名稱> NoSchedule、NoExecute 或 PreferNoSchedule 只有使用特定計算目標建立的機器學習工作負載 Pod 才會容許這種 amlarc compute 污點。

提示

  1. 針對 Azure Kubernetes Service(AKS),您可以遵循 Azure Kubernetes Service (AKS) 中進階排程器功能的最佳做法中的範例,將污點套用至節點集區。
  2. 針對 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,讓 Nginx 輸入控制器可以自行處理 TLS 終止,而不是在透過 HTTPS 公開服務時將其移交給 allowInsecureConnections=True。
  • 若要與 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。

  1. 執行下列內容來部署 ing-azureml-fe.yaml:

    kubectl apply -f ing-azureml-fe.yaml
    
  2. 檢查輸入控制器的記錄以取得部署狀態。

  3. 現在,azureml-fe 應用程式應該可供使用。 您可以造訪下列項目來檢查:

    • Nginx 輸入控制器:Nginx 輸入控制器的公用 LoadBalancer 位址
    • Azure 應用程式閘道:應用程式閘道 的公用位址。
  4. 建立推斷作業並叫用。

    注意

    在叫用之前,將 scoring_uri 中的ip取代為 Nginx 輸入控制器的公用 LoadBalancer 位址。

透過 HTTPS 公開服務

  1. 部署輸入之前,您必須建立 kubernetes 祕密來裝載憑證和私密金鑰。 您可以執行下列內容來建立 kubernetes 祕密

    kubectl create secret tls <ingress-secret-name> -n azureml --key <path-to-key> --cert <path-to-cert>
    
  2. 定義下列輸入。 在輸入中,指定 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 中。

  3. 執行 來部署 ing-azureml-fe-tls.yaml

    kubectl apply -f ing-azureml-fe-tls.yaml
    
  4. 檢查輸入控制器的記錄以取得部署狀態。

  5. 現在應用程式 azureml-fe 可在 HTTPS 上使用。 您可以造訪 Nginx 輸入控制器的公用 LoadBalancer 位址來檢查此情況。

  6. 建立推斷作業並叫用。

    注意

    使用指向 Nginx 輸入控制器的 LoadBalancer 或叫用之前 應用程式閘道 的 https 和網域取代 scoring_uri 中的通訊協定和 IP。

使用 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樣本檔

AzuremML 擴充功能版本資訊

注意

新功能會在兩周的行事曆上發行。

日期 版本 版本描述
2025年10月8日 1.1.88 修正易受攻擊的映像。
2025年9月3日 1.1.86 修正易受攻擊的映像。
2025 年 6 月 30 日 1.1.83 修正易受攻擊的映像。
2025年4月6日 1.1.76 修正易受攻擊的映像。 已將 nginx-ingress-controller 更新為 v1.12.1
2025年1月28日 1.1.71 修正易受攻擊的映像。
2025年1月20日 1.1.70 修正 AKS 1.30 的 AKS 自動調整相容問題。
2024年9月26日 1.1.64 修復漏洞。
2023年11月21日 1.1.39 修復漏洞。 精簡錯誤訊息。 提升中繼伺服器 API 的穩定性。
2023 年 11 月 1 日 1.1.37 更新數據平面 Envoy 版本。
2023 年 10 月 11 日 1.1.35 修正易受攻擊的映像。 錯誤修正。
2023 年 8 月 25 日 1.1.34 修正易受攻擊的映像。 傳回更詳細的身分識別錯誤。 錯誤修正。
2023 年 7 月 18 日 1.1.29 新增識別運算子錯誤。 錯誤修正。
2023年6月4日 1.1.28 改善自動調整程式以處理多個節點集區。 錯誤修正。
2023年4月18日 1.1.26 錯誤修正和弱點修正。
2023年3月27日 1.1.25 新增 Azure 機器學習 作業節流。 當 SSH 設定失敗時,訓練作業的快速失敗。 將 Prometheus 的刮傷間隔縮減為 30 秒。 改善推斷的錯誤訊息。 修正易受攻擊的映像。
2023年3月7日 1.1.23 將預設實例類型變更為使用 2Gi 記憶體。 更新計分費的計量組態,以新增 15s scrape_interval。 新增 mdc sidecar 的資源規格。 修正易受攻擊的映像。 錯誤修正。
2023 年 2 月 14 日 1.1.21 錯誤修正。
2023年2月7日 1.1.19 改善推斷的錯誤傳回訊息。 更新預設實例類型以使用 2Gi 記憶體限制。 進行叢集健康情況檢查,以取得 Pod 健全狀況、資源配額、Kubernetes 版本和擴充功能版本。 錯誤修正
2022年12月27日 1.1.17 將 Fluent-bit 從 DaemonSet 移至 Sidecars。 新增 MDC 支援。 精簡錯誤訊息。 支援叢集模式 (windows, linux) 作業。 錯誤修正
2022年11月29日 1.1.16 新增CRD的實例類型驗證。 支援容錯。 縮短 SVC 名稱。 工作負載核心小時。 多個 Bug 修正和改善。
2022 年 9 月 13 日 1.1.10 錯誤修正。
2022 年 8 月 29 日 1.1.9 改善健康情況檢查邏輯。 錯誤修正。
2022年6月23日 1.1.6 錯誤修正。
2022年6月15日 1.1.5 已更新訓練,以使用新的通用運行時間來執行作業。 已移除 AKS 擴充功能的 Azure 轉譯使用量。 已從擴充功能中移除服務總線使用量。 已更新安全性內容使用方式。 已將 azureml-fe 推斷更新為 v2。 已更新為使用火山作為訓練工作排程器。 錯誤修正。
2021年10月14日 1.0.37 AMLArc 訓練作業中的PV/PV磁碟區掛接支援。
2021年9月16日 1.0.29 新的區域可供使用,WestUS、CentralUS、NorthCentralUS、KoreaCentral。 作業佇列可擴充性。 請參閱 Azure 機器學習 Workspace Studio 中的作業佇列詳細數據。 自動終止原則。 在 ScriptRunConfig 中支援max_run_duration_seconds。 如果執行時間超過設定值,系統就會嘗試自動取消執行。 叢集自動調整支援的效能改善。 從內部部署容器登錄部署Arc代理程式和ML擴充功能。
2021 年 8 月 24 日 1.0.28 作業 YAML 支援計算實例類型。 將受控識別指派給AMLArc計算。
2021 年 8 月 10 日 1.0.20 新的 Kubernetes 散發支援 K3S - 輕量型 Kubernetes。 將 Azure 機器學習 擴充功能部署至 AKS 叢集,而不需透過 Azure Arc 連線。透過 Python SDK 自動化 機器學習 (AutoML)。 使用 2.0 CLI 將 Kubernetes 叢集連結至 Azure 機器學習 工作區。 優化 Azure 機器學習 擴充元件 CPU/記憶體資源使用率。
2021 年 7 月 2 日 1.0.13 新的 Kubernetes 散發套件支援、OpenShift Kubernetes 和 GKE (Google Kubernetes Engine)。 自動調整支援。 如果使用者管理的 Kubernetes 叢集啟用自動調整,叢集就會根據作用中執行和部署的數量自動相應放大或相應縮小。 作業啟動器上的效能改善,可縮短作業運行時間,以大幅縮短作業運行時間。