使用 Azure Resource Manager 範本建立 Azure Machine Learning 的工作區

在本文中,您將了解使用 Azure Resource Manager 範本建立 Azure Machine Learning 工作區的數種方式。 Resource Manager 範本可讓您輕鬆地以單一、協調的作業建立資源。 範本是 JSON 文件,其定義部署所需的資源。 它也可以指定部署參數。 參數用來在使用範本時提供輸入值。

如需詳細資訊,請參閱 使用 Azure Resource Manager 範本部署應用程式

必要條件

限制

  • 建立新的工作區時,您可以自動建立工作區所需的服務,或使用現有的服務。 若要使用有別於工作區的不同 Azure 訂閱的現有服務,您必須在包含這些服務的訂閱中註冊 Azure Machine Learning 命名空間。 例如,若要在訂閱 A (使用訂閱 B 的儲存體帳戶) 中建立工作區,則必須先在訂閱 B 中註冊 Azure Machine Learning 命名空間,然後才能在工作區使用儲存體帳戶。

    Azure Machine Learning 的資源提供者為 Microsoft.MachineLearningServices。 如需如何檢查是否已註冊及如何註冊的相關資訊,請參閱《Azure 資源提供者和類型》一文。

    重要

    這僅適用於建立工作區期間所提供的資源;Azure 儲存體帳戶、Azure Container Register、Azure Key Vault 和 Application Insights。

  • 範例範本不一定會使用 Azure Machine Learning 的最新 API 版本。 使用範本之前,建議您先修改,以使用最新的 API 版本。 如需 Azure Machine Learning 的最新 API 版本相關資訊,請參閱 Azure Machine Learning REST API

    提示

    每個 Azure 服務都有其自己的一組 API 版本。 如需特定服務的 API 相關資訊,請查看 Azure REST API 參考中的服務資訊。

    若要更新 API 版本,請尋找資源類型的 "apiVersion": "YYYY-MM-DD" 項目,並將其更新為最新版本。 以下是 Azure Machine Learning 的項目範例:

    "type": "Microsoft.MachineLearningServices/workspaces",
    "apiVersion": "2023-10-01",
    

相同 VNet 中的多個工作區

此範本不支援相同 VNet 中部署的多個 Azure Machine Learning 工作區。 這是因為此範本會在部署期間建立新的 DNS 區域。

如果您要建立範本在相同 VNet 中部署多個工作區,請手動設定 (使用 Azure 入口網站或 CLI),然後使用 Azure 入口網站來產生範本

工作區 Resource Manager 範本

您可以在 Azure 快速入門範本 GitHub 存放庫的 microsoft.machineleaerningservices/machine-learning-workspace-vnet 目錄中,找到本文件中使用的 Azure Resource Manager 範本。

此範本會建立下列 Azure 服務:

  • Azure 儲存體帳戶
  • Azure Key Vault
  • Azure Application Insights
  • Azure Container Registry
  • Azure Machine Learning 工作區

資源群組是保存服務的容器。 各種服務是 Azure Machine Learning 工作區的必要項。

範例範本有兩個必要參數:

  • location,將建立資源的位置。

    範本將會針對大部分的資源使用您選取的位置。 例外狀況是 Application Insights 服務,該服務在其他服務可用的所有位置都無法使用。 如果您選取的位置無法使用,服務會建立在美國中南部位置。

  • workspaceName,Azure Machine Learning 工作區的自訂名稱。

    注意

    工作區名稱不區分大小寫。

    其他服務的名稱會隨機產生。

提示

雖然與本文件建立關聯的範本會建立新 Azure Container Registry,但您也可建立新的工作區,而不需要建立容器登錄。 當執行需要容器登錄的作業時,將會建立一個。 例如,定型或部署模型。

您也可以在 Azure Resource Manager 範本中參考現有的容器登錄或儲存體帳戶,而不是建立一個新的。 這樣做時,您必須使用受控識別 (預覽),或對容器登錄啟用管理員帳戶

警告

為工作區建立 Azure Container Registry 之後,請勿將其刪除。 這樣做將會造成您的 Azure Machine Learning 工作區中斷。

如需範本的詳細資訊,請參閱下列文章:

部署範本

若要部署範本,您必須建立資源群組。

如果您偏好使用圖形化使用者介面,請參閱 Azure 入口網站一節。

az group create --name "examplegroup" --location "eastus"

成功建立資源群組後,使用下列命令來部署範本:

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" location="eastus"

範本中建立的所有資源預設都是新資源。 不過,您也可以選擇使用現有的資源。 您可以提供其他參數給範本,以使用現有的資源。 例如,如果要使用現有的儲存體帳戶,請將 storageAccountOption 值設定為 existing,並在 storageAccountName 參數中提供儲存體帳戶的名稱。

重要

如果要使用現有的 Azure 儲存體帳戶,則不能是進階帳戶 (Premium_LRS 和 Premium_GRS)。 也不能有階層命名空間 (用於 Azure Data Lake Storage Gen2)。 工作區的預設儲存體帳戶不支援進階儲存體或階層命名空間。 工作區的「預設」儲存體帳戶不支援進階儲存體或階層命名空間。 進階儲存體或階層命名空間可以搭配 [非預設] 儲存體帳戶一起使用。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      storageAccountOption="existing" \
      storageAccountName="existingstorageaccountname"

部署加密工作區

下列範例範本示範如何建立具有三項設定的工作區:

  • 啟用工作區的高機密性設定。 這會建立新的 Azure Cosmos DB 執行個體。
  • 啟用工作區的加密。
  • 使用現有的 Azure Key Vault 來擷取客戶自控金鑰。 客戶自控金鑰是用來為工作區建立新的 Azure Cosmos DB 執行個體。

重要

建立工作區之後,即無法變更機密資料、加密、金鑰保存庫識別碼或金鑰識別碼的設定。 若要變更這些值,則必須使用新的值來建立新工作區。

如需詳細資訊,請參閱客戶自控金鑰

重要

使用此範本之前,訂用帳戶必須符合一些特定需求:

  • 您必須具有包含加密金鑰的現有 Azure Key Vault。
  • Azure Key Vault 必須位於打算建立 Azure Machine Learning 工作區的相同區域中。
  • 您必須指定 Azure Key Vault 的識別碼和加密金鑰的 URI。

如需關於建立保存庫和金鑰的步驟,請參閱設定客戶管理的金鑰

若要取得此範本所需 cmk_keyvault (Key Vault 的識別碼) 和 resource_cmk_uri (金鑰 URI) 參數的值,請使用下列步驟:

  1. 若要取得 Key Vault 識別碼,請使用下列命令:

    az keyvault show --name <keyvault-name> --query 'id' --output tsv    
    

    此命令會傳回如下值:/subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>

  2. 若要取得客戶管理金鑰的 URI 值,請使用下列命令:

    az keyvault key show --vault-name <keyvault-name> --name <key-name> --query 'key.kid' --output tsv    
    

此命令會傳回如下值:https://mykeyvault.vault.azure.net/keys/mykey/{guid}

重要

建立工作區之後,即無法變更機密資料、加密、金鑰保存庫識別碼或金鑰識別碼的設定。 若要變更這些值,則必須使用新的值來建立新工作區。

若要啟用客戶自控金鑰,請在部署範本時設定下列參數:

  • encryption_status 設為 Enabled
  • cmk_keyvault 設為先前步驟中取得的 cmk_keyvault 值。
  • resource_cmk_uri 設為先前步驟中取得的 resource_cmk_uri 值。
az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      encryption_status="Enabled" \
      cmk_keyvault="/subscriptions/{subscription-guid}/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>" \
      resource_cmk_uri="https://mykeyvault.vault.azure.net/keys/mykey/{guid}" \

使用客戶自控金鑰時,Azure Machine Learning 會建立次要資源群組,其中包含 Azure Cosmos DB 執行個體。 如需詳細資訊,請參閱 Azure Cosmos DB 中的待用加密

您可以為資料提供的另一項設定是將 confidential_data 參數設定為 true。 這樣做有下列用途:

  • 開始加密 Azure Machine Learning 計算叢集的本機暫存磁碟,前提是您先前未在訂用帳戶中建立任何叢集。 如果您先前已在訂用帳戶中建立叢集,請開啟支援票證,請求加密計算叢集已啟用的暫存磁碟。

  • 清除作業之間的本機暫存磁碟。

  • 使用金鑰保存庫,將儲存體帳戶、容器登錄和 SSH 帳戶的認證,從執行層安全傳遞至計算叢集。

  • 啟用 IP 篩選,確保 AzureMachineLearningService 以外的任何外部服務不可呼叫基礎批次集區。

    重要

    建立工作區之後,即無法變更機密資料、加密、金鑰保存庫識別碼或金鑰識別碼的設定。 若要變更這些值,則必須使用新的值來建立新工作區。

    如需詳細資訊,請參閱待用加密

在虛擬網路後方部署工作區

您可以將 vnetOption 參數值設定為 newexisting,以建立資源供虛擬網路後方的工作區使用。

重要

針對容器登錄,只支援「進階」sku。

重要

Application Insights 不支援在虛擬網路後方部署。

只在私人端點後方部署工作區

如果相關聯的資源不在虛擬網路後方,您可以將 privateEndpointType 參數設定為 AutoAprovalManualApproval,以在私人端點後方部署工作區。 新的和現有的工作區皆可如此。 更新現有的工作區時,請將現有工作區的資訊填入範本參數。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      privateEndpointType="AutoApproval"

使用新的虛擬網路

若要在新的虛擬網路後方部署資源,請將 vnetOption 設定為 new,還要提供個別資源的虛擬網路設定。 下列部署示範如何在新的虛擬網路後方部署工作區及儲存體帳戶資源。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true"
      privateEndpointType="AutoApproval"

或者,您可以在虛擬網路後方部署多個或所有的相依資源。

az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="new" \
      vnetName="examplevnet" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium"
      privateEndpointType="AutoApproval"

使用現有的虛擬網路和資源

若要使用現有相關聯的資源來部署工作區,您必須將 vnetOption 參數設定為 existing,還要設定子網路參數。 不過,在部署之前,您必須在虛擬網路中為每個資源建立服務端點。 如同新的虛擬網路部署,您可以將一個或所有資源放在虛擬網路後方。

重要

子網路應該具有 Microsoft.Storage 服務端點

重要

子網路不允許建立私人端點。 停用私人端點以啟用子網路。

  1. 啟用資源的服務端點。

    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.Storage"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.KeyVault"
    az network vnet subnet update --resource-group "examplegroup" --vnet-name "examplevnet" --name "examplesubnet" --service-endpoints "Microsoft.ContainerRegistry"
    
  2. 部署工作區

    az deployment group create \
    --name "exampledeployment" \
    --resource-group "examplegroup" \
    --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace-vnet/azuredeploy.json" \
    --parameters workspaceName="exampleworkspace" \
      location="eastus" \
      vnetOption="existing" \
      vnetName="examplevnet" \
      vnetResourceGroupName="examplegroup" \
      storageAccountBehindVNet="true" \
      keyVaultBehindVNet="true" \
      containerRegistryBehindVNet="true" \
      containerRegistryOption="new" \
      containerRegistrySku="Premium" \
      subnetName="examplesubnet" \
      subnetOption="existing"
      privateEndpointType="AutoApproval"
    

使用 Azure 入口網站

  1. 遵循從自訂範本部署資源的步驟。 當您到達 [選取範本] 畫面時,請選擇 [快速入門] 項目。 出現時,請選取標示為「按一下這裡開啟範本存放庫」的連結。 此連結會帶您前往 Azure 快速入門範本存放庫中的 quickstarts 目錄。

  2. 在快速入門範本清單中,選取 microsoft.machinelearningservices。 最後,選取 [Deploy to Azure]。

  3. 出現範本時,請根據您的部署情節,提供下列必要資訊和任何其他參數。

    • 訂用帳戶:選取要用於這些資源的 Azure 訂用帳戶。
    • 資源群組:選取或建立資源群組以包含服務。
    • 區域:選取將建立資源的 Azure 區域。
    • 工作區名稱:要用於將建立之 Azure Machine Learning 工作區的名稱。 工作區名稱必須介於 3 到 33 個字元之間。 只能包含英數字元和 '-'。
    • 位置:選取將建立資源的位置。
  4. 選取 [檢閱 + 建立]。

  5. 在 [檢閱 + 建立] 畫面中,同意列出的條款及條件,然後選取 [建立]

如需詳細資訊,請參閱從自訂範本部署資源

疑難排解

資源提供者錯誤

建立 Azure Machine Learning 工作區或工作區所使用的資源時,您可能會收到類似下列訊息的錯誤:

  • No registered resource provider found for location {location}
  • The subscription is not registered to use namespace {resource-provider-namespace}

大部分資源提供者都會自動註冊,但並非全部。 如果您收到此訊息,則需要註冊先前提及的提供者。

下表包含 Azure Machine Learning 所需的資源提供者清單:

資源提供者 需要的原因
Microsoft.MachineLearningServices 建立 Azure Machine Learning 工作區。
Microsoft.Storage Azure 儲存體帳戶用來做為工作區的預設儲存體。
Microsoft.ContainerRegistry 工作區會使用 Azure Container Registry 來建置 Docker 映像。
Microsoft.KeyVault 工作區會使用 Azure Key Vault 來儲存秘密。
Microsoft.Notebooks Azure Machine Learning 計算執行個體上的整合式筆記本。
Microsoft.ContainerService 若您打算將已定型的模型部署至 Azure Kubernetes Service。

若您打算搭配 Azure Machine Learning 使用客戶自控金鑰,則必須註冊下列服務提供者:

資源提供者 需要的原因
Microsoft.DocumentDB 記錄工作區中繼資料的 Azure CosmosDB 執行個體。
Microsoft.Search Azure 搜尋可為工作區提供索引編製功能。

如果您打算搭配 Azure Machine Learning 使用受控虛擬網路,則必須註冊 Microsoft.Network 資源提供者。 建立受控虛擬網路的私人端點時,工作區會使用此資源提供者。

如需有關註冊資源提供者的詳細資訊,請參閱解決資源提供者註冊的錯誤

Azure Key Vault 存取原則和 Azure Resource Manager 範本

當多次使用 Azure Resource Manager 範本來建立工作區和相關聯資源 (包括 Azure Key Vault) 時。 例如,多次使用範本並搭配相同的參數,以作為持續整合和部署管線的一部分。

大部分透過範本的資源建立作業均為等冪,但 Key Vault 會在每次使用範本時清除存取原則。 清除存取原則會針對正在使用它的任何現有工作區,中斷對 Key Vault 的存取權。 例如,Azure Notebooks VM 的停止/建立功能可能會失敗。

若要避免這個問題,建議採用下列其中一種方法:

  • 不要針對相同的參數多次部署範本。 或刪除現有的資源,然後使用範本予以重建。

  • 檢查 Key Vault 的存取原則,然後使用這些原則來設定範本的 accessPolicies 屬性。 若要檢視存取原則,請使用下列 Azure CLI 命令:

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query properties.accessPolicies
    

    如需使用範本 accessPolicies 區段的詳細資訊,請參閱 AccessPolicyEntry 物件參考

  • 檢查 Key Vault 資源是否已存在。 如果有,請不要透過範本予以重建。 例如,若要使用現有的 Key Vault,而不是建立新的,請對範本進行下列變更:

    • 新增可接受現有 Key Vault 資源識別碼的參數:

      "keyVaultId":{
        "type": "string",
        "metadata": {
          "description": "Specify the existing Key Vault ID."
        }
      }
      
    • 移除建立 Key Vault 資源的區段:

      {
        "type": "Microsoft.KeyVault/vaults",
        "apiVersion": "2018-02-14",
        "name": "[variables('keyVaultName')]",
        "location": "[parameters('location')]",
        "properties": {
          "tenantId": "[variables('tenantId')]",
          "sku": {
            "name": "standard",
            "family": "A"
          },
          "accessPolicies": [
          ]
        }
      },
      
    • 從工作區的 dependsOn 區段移除"[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]", 行。 此外,變更工作區中 properties 區段的 keyVault 項目,以參考 keyVaultId 參數:

      {
        "type": "Microsoft.MachineLearningServices/workspaces",
        "apiVersion": "2019-11-01",
        "name": "[parameters('workspaceName')]",
        "location": "[parameters('location')]",
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
          "[resourceId('Microsoft.Insights/components', variables('applicationInsightsName'))]"
        ],
        "identity": {
          "type": "systemAssigned"
        },
        "sku": {
          "tier": "[parameters('sku')]",
          "name": "[parameters('sku')]"
        },
        "properties": {
          "friendlyName": "[parameters('workspaceName')]",
          "keyVault": "[parameters('keyVaultId')]",
          "applicationInsights": "[resourceId('Microsoft.Insights/components',variables('applicationInsightsName'))]",
          "storageAccount": "[resourceId('Microsoft.Storage/storageAccounts/',variables('storageAccountName'))]"
        }
      }
      

    這些變更之後,即可在執行範本時指定現有 Key Vault 資源的識別碼。 然後範本會將工作區的 keyVault 屬性設定為其識別碼,以重複使用 Key Vault。

    若要取得 Key Vault 的識別碼,可參考原始範本作業的輸出,或使用 Azure CLI。 下列命令是使用 Azure CLI 取得 Key Vault 資源識別碼的範例:

    az keyvault show --name mykeyvault --resource-group myresourcegroup --query id
    

    此命令會傳回類似下列文字的值:

    /subscriptions/{subscription-guid}/resourceGroups/myresourcegroup/providers/Microsoft.KeyVault/vaults/mykeyvault
    

下一步