使用 Azure Resource Manager 範本建立 Azure Machine Learning 的工作區
在本文中,您將了解使用 Azure Resource Manager 範本建立 Azure Machine Learning 工作區的數種方式。 Resource Manager 範本可讓您輕鬆地以單一、協調的作業建立資源。 範本是 JSON 文件,其定義部署所需的資源。 它也可以指定部署參數。 參數用來在使用範本時提供輸入值。
如需詳細資訊,請參閱 使用 Azure Resource Manager 範本部署應用程式。
必要條件
Azure 訂用帳戶。 如果您沒有訂用帳戶,則可試用免費或付費版本的 Azure Machine Learning。
若要從 CLI 使用範本,您需要 Azure PowerShell 或 Azure CLI。
限制
建立新的工作區時,您可以自動建立工作區所需的服務,或使用現有的服務。 若要使用有別於工作區的不同 Azure 訂閱的現有服務,您必須在包含這些服務的訂閱中註冊 Azure Machine Learning 命名空間。 例如,若要在訂用帳戶 A (使用訂用帳戶 B 的儲存體帳戶) 中建立工作區,則必須先在訂用帳戶 B 中註冊 Azure Machine Learning 命名空間,然後工作區才能使用該儲存體帳戶。
Azure Machine Learning 的資源提供者為 Microsoft.MachineLearningServices。 如需查看是否已註冊或正在註冊它的相關資訊,請參閱 Azure 資源提供者和類型。
重要
此資訊僅適用建立工作區期間所提供的資源:Azure 儲存體帳戶、Azure Container Registry、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",
相同虛擬網路中的多個工作區
此範本不支援相同虛擬網路中部署的多個 Azure Machine Learning 工作區。 此限制是因為此範本會在部署期間建立新的 DNS 區域。
如果您想要建立範本,以在相同的虛擬網路中部署多個工作區,請手動設定它 (使用 Azure 入口網站或 CLI)。 然後使用 Azure 入口網站來產生範本。
關於 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 工作區會將這些服務用於儲存資料、祕密、記錄和 Docker 映像等功能。
範例範本有兩個必要參數:
location,將建立資源的位置。
範本會針對大部分的資源使用您選取的位置。 例外狀況是 Application Insights 服務,該服務在其他服務可用的所有位置都無法使用。 如果您選取的位置無法使用,服務會建立在美國中南部位置。
workspaceName,Azure Machine Learning 工作區的自訂名稱。
注意
工作區名稱不區分大小寫。
其他服務的名稱會隨機產生。
提示
雖然與本文件建立關聯的範本會建立新 Azure Container Registry,但您也可建立新的工作區,而不需要建立容器登錄。 當執行需要容器登錄的作業時,將會建立一個。 例如,定型或部署模型。
您也可以在 Azure Resource Manager 範本中參考現有的容器登錄或儲存體帳戶,而不是建立一個新的。 這樣做時,您必須使用受控識別 (預覽),或對容器登錄啟用管理員帳戶。
警告
建立工作區的 Azure Container Registry 之後,請勿將其刪除。 這樣做將會造成您的 Azure Machine Learning 工作區中斷。
如需範本的詳細資訊,請參閱下列文章:
- 編寫 Azure Resource Manager 範本
- 使用 Azure Resource Manager 範本部署應用程式
- Microsoft.MachineLearningServices resource 類型
部署範本
若要部署範本,您必須建立資源群組。
如果您偏好使用圖形化使用者介面,請參閱 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) 參數的值,請使用下列步驟:
若要取得 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>
。若要取得客戶管理金鑰的 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
參數值設定為 new
或 existing
,以建立資源供虛擬網路後方的工作區使用。
重要
針對容器登錄,只支援「進階」sku。
重要
Application Insights 不支援在虛擬網路後方部署。
只在私人端點後方部署工作區
如果相關聯的資源不在虛擬網路後方,您可以將 privateEndpointType 參數設定為 AutoAproval
或 ManualApproval
,以在私人端點後方部署工作區。 此設定可用於新的和現有的工作區。 更新現有的工作區時,請將現有工作區的資訊填入範本參數。
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
服務端點
重要
子網路不允許建立私人端點。 停用私人端點以啟用子網路。
啟用資源的服務端點。
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"
部署工作區
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 入口網站
遵循從自訂範本部署資源的步驟。 當您到達 [自訂部署] 畫面時,請選擇 [快速入門範本] 項目。
在快速入門範本的下拉式清單中,選取
microsoft.machinelearningservices/machine-learning-workspace-vnet
項目。 最後,使用Select template
。出現範本時,請根據您的部署情節,提供下列必要資訊和任何其他參數。
- 訂用帳戶:選取要用於這些資源的 Azure 訂用帳戶。
- 資源群組:選取或建立資源群組以包含服務。
- 區域:選取將建立資源的 Azure 區域。
- 工作區名稱:要用於將建立之 Azure Machine Learning 工作區的名稱。 工作區名稱必須介於 3 到 33 個字元之間。 其中只能包含英數字元和 '-'。
- 位置:選取將建立資源的位置。
選取 [檢閱 + 建立]。
在 [檢閱 + 建立] 畫面中,同意列出的條款及條件,然後選取 [建立]。
如需詳細資訊,請參閱從自訂範本部署資源。
疑難排解
資源提供者錯誤
建立 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