使用 CLI 第 1 版建立 Azure Machine Learning 計算叢集

適用於:Azure CLI ml 延伸模組 v1Python SDK azureml v1

了解如何在您的 Azure Machine Learning 工作區中建立和管理計算叢集

您可以使用 Azure Machine Learning 計算叢集,將定型或批次推斷程序散發到雲端中 CPU 或 GPU 計算節點的叢集。 如需包含 GPU 的 VM 大小有關的詳細資訊,請參閱 GPU 最佳化虛擬機器大小

在本文中,了解如何:

  • 建立計算叢集
  • 降低您的計算叢集成本
  • 為叢集設定受控識別

必要條件

什麼是計算叢集?

Azure Machine Learning 計算叢集是一種受控的計算基礎結構,可讓您輕鬆建立單一或多重節點計算。 計算叢集是可以與您工作區中的其他使用者共用的資源。 計算會在提交作業時自動相應增加,而且可以放在 Azure 虛擬網路中。 計算叢集在虛擬網路中也不支援公用 IP 部署。 計算會在容器化環境中執行,並在 Docker 容器中封裝模型的相依性。

計算叢集可在虛擬網路環境中安全地執行作業,而無須企業開啟 SSH 連接埠。 作業會在容器化環境中執行,並在 Docker 容器中封裝模型的相依性。

限制

  • 您可以在工作區以外的不同區域和 VNet 中建立計算叢集。 不過,此功能僅適用於 SDK v2、CLI v2 或 Studio。 如需詳細資訊,請參閱 v2 版的安全定型環境

  • 我們目前僅支援透過 ARM 範本來建立 (而不是更新) 叢集。 若要更新計算,目前建議您使用 SDK、Azure CLI 或 UX。

  • Azure Machine Learning Compute 有預設限制,例如可配置的核心數目。 如需詳細資訊,請參閱管理和要求 Azure 資源的配額

  • Azure 可讓您對資源施加鎖定,使其無法被刪除,或處於唯讀狀態。 請勿將資源鎖定套用至包含您工作區的資源群組。 將鎖定套用至包含您工作區的資源群組,將會防止 Azure Machine Learning 計算叢集的調整作業。 如需鎖定資源的詳細資訊,請參閱鎖定資源以防止非預期的變更

提示

只要有足夠的配額可滿足所需的核心數目,叢集一般可以擴大為 100 個節點。 例如,叢集預設會設定為已在叢集節點之間啟用節點間通訊,以便支援 MPI 作業。 不過,您也可以將叢集擴大為數千個節點,只要提出支援票證,並要求將訂用帳戶 (或工作區) 列入允許清單,或要求特定叢集以停用節點間通訊即可。

建立​​

估計時間:約 5 分鐘。

Azure Machine Learning Compute 可以跨回合重複使用。 計算可與工作區中的其他使用者共用,並在回合之間保留,且會根據所提交的回合數目以及叢集上設定的 max_nodes 自動擴大或縮小節點。 min_nodes 設定可以控制可用的節點數目下限。

適用於計算叢集建立的專用核心每個區域、VM 系列配額與總計區域配額會統一,並與 Azure Machine Learning 定型計算叢集配額共用。

重要

若要避免在未執行作業時產生費用,請將節點數下限設定為 0。 這項設定可讓 Azure Machine Learning 將未使用的節點解除配置。 任何大於 0 的值都會保持執行該數量的節點,即使不使用節點也一樣。

未使用時,計算會自動向下調整為零節點。 視需要建立專用的虛擬機器以執行您的作業。

若要使用 Python 建立持續性 Azure Machine Learning Compute 資源,請指定 vm_sizemax_nodes 屬性。 Azure Machine Learning 接著會對於其他屬性使用智慧型預設值。

  • vm_size:Azure Machine Learning Compute 建立的 VM 系列節點。
  • max_nodes:在 Azure Machine Learning Compute 上執行作業時,自動向上調整的最大節點數。

適用於:Python SDK azureml v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

建立 Azure Machine Learning Compute 時,您也可以設定多個進階屬性。 這些屬性可讓您建立固定大小的持續性叢集,也可以在您訂用帳戶中現有的 Azure 虛擬網路內建立。 如需詳細資料,請參閱 AmlCompute 類別

警告

設定 location 參數時,如果其在與您的工作區或資料存放區不同的區域,您可能會看到網路延遲和資料傳輸成本增加。 建立叢集以及在叢集上執行作業時,可能會產生延遲和成本。

降低您的計算叢集成本

您也可以選擇使用低優先順序的 VM 來執行部分或所有的工作負載。 這些 VM 沒有保證可用性,可能會在使用時被佔用。 您將必須重新啟動先佔作業。

適用於:Python SDK azureml v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

設定受控身分識別

Azure Machine Learning 計算叢集也支援受控身分識別,以驗證對 Azure 資源的存取,而不在您的程式碼中包含認證。 受控身分識別有兩種:

  • 系統指派的受控識別會直接在 Azure Machine Learning 計算叢集和計算執行個體上啟用。 系統指派的身分識別生命週期會直接繫結至計算叢集或執行個體。 若已刪除計算叢集或執行個體,Azure 會自動清除 Microsoft Entra ID 中的認證和身分識別。
  • 使用者指派的受控身分識別是透過 Azure 受控識別服務提供的獨立 Azure 資源。 您可以將使用者指派的受控身分識別指派給多個資源,且可視需要持續保存。 您必須事先建立此受控身分識別,然後以 identity_id 做為必要參數傳遞。

適用於:Python SDK azureml v1

  • 在佈建設定中設定受控識別:

    • 在名為 ws 的工作區中建立系統使用者指派的受控識別

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • 在名為 ws 的工作區中建立使用者指派的受控識別

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • 將受控識別新增至名為 cpu_cluster 的現有計算叢集

    • 系統指派的受控識別:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • 使用者指派的受控識別:

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

注意

Azure Machine Learning 計算叢集僅支援一個系統指派的身分識別,或多個使用者指派的身分識別,無法同時支援兩者。

受控識別使用方式

預設受控身分識別是系統指派的受控身分識別,或第一個使用者指派的受控身分識別。

在執行期間,有兩種身分識別的應用程式:

  1. 系統會使用身分識別來設定使用者的儲存體裝載、容器登錄和資料存放區。

    • 在此情況下,系統會使用預設的受控識別。
  2. 使用者套用身分識別,為已提交的執行從程式碼存取資源

    • 在此情況下,請針對您要用來擷取認證的受控身分識別,提供對應的 client_id
    • 或是透過 DEFAULT_IDENTITY_CLIENT_ID 環境變數,取得使用者指派身分識別的用戶端識別碼。

    例如,若要使用預設受控身分識別來取得資料存放區的權杖:

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

疑難排解

在 GA 發行之前就從 Azure 入口網站建立 Azure Machine Learning 工作區的部分使用者,可能會無法在該工作區上建立 AmlCompute。 您可以對該服務提出支援要求,或透過入口網站或 SDK 來建立新的工作區,以立即自行解除鎖定。

停滯在調整大小

如果您的 Azure Machine Learning 計算叢集在調整大小時出現停滯 (0-> 0) 的節點狀態,這可能是因為 Azure 資源鎖定所致。

Azure 可讓您對資源施加鎖定,使其無法被刪除,或處於唯讀狀態。 鎖定資源可能會導致非預期的結果。 某些看似不會修改資源的作業,實際上需要會被鎖定封鎖的動作。

有了 Azure Machine Learning,將刪除鎖定套用至工作區的資源群組,將會防止 Azure ML 計算叢集的調整作業。 若要解決此問題,建議您從資源群組中移除鎖定,並改為將其套用至群組中的個別項目。

重要

請勿將鎖定套用至下列資源:

資源名稱 資源類型
<GUID>-azurebatch-cloudservicenetworksecurityggroup 網路安全性群組
<GUID>-azurebatch-cloudservicepublicip 公用 IP 位址
<GUID>-azurebatch-cloudserviceloadbalancer 負載平衡器

這些資源是用來與計算叢集進行通訊及執行調整規模等作業。 從這些資源中移除資源鎖定應該會允許您的計算叢集進行自動調整。

如需資源鎖定的詳細資訊,請參閱鎖定資源以防止非預期的變更

下一步

使用您的計算叢集,以便: