Azure Resource Manager テンプレートを使用して Azure Machine Learning のワークスペースを作成します。
この記事では、Azure Resource Manager テンプレートを使用して Azure Machine Learning ワークスペースを作成するさまざまな方法について説明します。 Resource Manager テンプレートを使用すると、1 つの調整された操作でリソースを簡単に作成できます。 テンプレートは、デプロイに必要なリソースを定義する JSON ドキュメントです。 デプロイ パラメーターを指定することもできます。 パラメーターは、テンプレートの使用時に入力値を指定するために使用します。
詳細については、「 Azure リソース マネージャーのテンプレートを使用したアプリケーションのデプロイ」を参照してください。
前提条件
Azure サブスクリプション。 お持ちでない場合は、無料版または有料版の Azure Machine Learning をお試しください。
CLI からテンプレートを使用するには、Azure PowerShell または Azure CLI が必要です。
制限事項
新しいワークスペースを作成する場合は、ワークスペースに必要なサービスを自動的に作成するか、既存のサービスを使用することができます。 ワークスペースとは異なる Azure サブスクリプション の既存のサービスを使用する場合は、それらのサービスを含むサブスクリプションに Azure Machine Learning 名前空間を登録する必要があります。 たとえば、サブスクリプション B 内のストレージ アカウントを使用するワークスペースをサブスクリプション A 内に作成する場合、そのワークスペースでそのストレージ アカウントを使用する前に、Azure Machine Learning 名前空間をサブスクリプション B 内に登録する必要があります。
Azure Machine Learning のリソース プロバイダーは、Microsoft.MachineLearningServices です。 それが登録済みかどうか確認する方法、またはそれを登録する方法については、「Azure リソース プロバイダーと種類」をご覧ください。
重要
この情報は、ワークスペースの作成時に提供されるリソース (Azure Storage アカウント、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 portal または CLI を使用して) 手動で設定します。 次に、Azure portal を使用してテンプレートを生成します。
Azure Resource Manager テンプレートの概要
このドキュメント全体で使用する Azure Resource Manager テンプレートは、Azure クイックスタート テンプレートの GitHub リポジトリの microsoft.machineleaerningservices/machine-learning-workspace-vnet ディレクトリにあります。
このテンプレートでは、次の Azure サービスが作成されます。
- Azure Storage アカウント
- Azure Key Vault
- Azure Application Insights
- Azure Container Registry
- Azure Machine Learning ワークスペース
リソース グループは、サービスを保持するコンテナーです。 Azure Machine Learning ワークスペースは、データ、シークレット、ログ、Docker イメージの保存などの機能にこれらのサービスを使用します。
サンプルのテンプレートには、次に示す 2 つの必須パラメーターがあります。
リソースが作成される場所。
このテンプレートでは、大部分のリソース用に選択する場所が使用されます。 例外は Application Insights サービスです。このサービスは、他のサービスが存在するすべての場所で使用できません。 使用できない場所を選択すると、米国中南部の場所にサービスが作成されます。
workspaceName は、Azure Machine Learning ワークスペースのフレンドリ名です。
注意
ワークスペース名では、大文字と小文字は区別されません。
その他のサービスの名前はランダムに生成されます。
ヒント
このドキュメントに関連付けられているテンプレートでは新しい Azure コンテナー レジストリが作成されますが、コンテナー レジストリを作成せずに新しいワークスペースを作成することもできます。 コンテナー レジストリが必要な操作を実行すると、それが 1 つ作成されます。 たとえば、モデルのトレーニングやデプロイなどです。
新しいコンテナー レジストリまたはストレージ アカウントを作成するのではなく、Azure Resource Manager テンプレートで既存のものを参照することもできます。 これを行う場合、マネージド ID を使用するか (プレビュー)、コンテナー レジストリの管理者アカウントを有効にする必要があります。
警告
ワークスペースに対して Azure Container Registry が作成されたら、削除しないでください。 それを行うと、Azure Machine Learning ワークスペースが破損します。
テンプレートの詳細については、次の記事を参照してください。
- Azure リソース マネージャーのテンプレートの作成
- Azure Resource Manager テンプレートを使用したアプリケーションのデプロイ
- Microsoft.MachineLearningServices resource types (Microsoft.MachineLearningServices リソースの種類)
テンプレートのデプロイ
テンプレートをデプロイするには、リソース グループを作成する必要があります。
グラフィカル ユーザー インターフェイスを使用する場合は、Azure portal に関するセクションを参照してください。
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 Storage アカウントを使用する場合は、Premium アカウント (Premium_LRS と Premium_GRS) にすることはできません。 また、階層的名前空間 (Azure Data Lake Storage Gen2 で使用されます) を含めることもできません。 ワークスペースの既定のストレージ アカウントでは、Premium Storage と階層型名前空間はサポートされていません。 ワークスペースの既定のストレージ アカウントでは、Premium Storage と階層型名前空間はサポートされていません。 "既定以外" のストレージ アカウントでは、Premium Storage または階層型名前空間を使用できます。
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"
暗号化ワークスペースのデプロイ
次のテンプレート例では、3 つの設定を使用してワークスペースを作成する方法を示します。
- ワークスペースの高機密性の設定を有効にする。 この構成により、新しい Azure Cosmos DB インスタンスが作成されます。
- ワークスペースの暗号化を有効にする。
- 既存の Azure Key Vault を使用して、カスタマー マネージド キーを取得する。 カスタマー マネージド キーは、ワークスペースの新しい Azure Cosmos DB インスタンスを作成するために使用されます。
重要
ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。
詳細については、カスタマー マネージド キーに関するセクションを参照してください。
重要
このテンプレートを使用する前に、サブスクリプションで満たしている必要がある特定の要件がいくつかあります。
- 暗号化キーを含む既存の Azure Key Vault が必要です。
- Azure Key Vault は、Azure Machine Learning ワークスペースの作成を計画しているリージョンと同じリージョンにある必要があります。
- Azure Key Vault の ID と、暗号化キーの URI を指定する必要があります。
コンテナーとキーを作成する手順については、カスタマー マネージド キーの構成に関するページを参照してください。
cmk_keyvault
(Key Vault の ID) およびこのテンプレートで必要な resource_cmk_uri
(キー URI) パラメーターの値を取得するには、次の手順を使用します。
Key Vault ID を取得するには、次のコマンドを使用します。
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}
のような値が返されます。
重要
ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。
カスタマー マネージド キーの使用を有効にするには、テンプレートをデプロイするときに次のパラメーターを設定します。
- 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 での保存時の暗号化」を参照してください。
データに指定できるもう 1 つの構成は、confidential_data パラメーターを true に設定することです。 こうすることで、次の動作が有効になります。
サブスクリプションで以前にクラスターを作成していない場合に、Azure Machine Learning コンピューティング クラスターに対してローカル スクラッチ ディスクの暗号化を開始します。 以前にサブスクリプションでクラスターを作成したことがある場合は、サポート チケットを開き、ご利用のコンピューティング クラスターでスクラッチ ディスクの暗号化を有効にします。
ジョブとジョブの間にローカル スクラッチ ディスクをクリーンアップします。
キー コンテナーを使用して、ストレージ アカウント、コンテナー レジストリ、SSH アカウントの資格情報を実行層からコンピューティング クラスターに安全に渡します。
IP フィルタリングを有効にして、AzureMachineLearningService 以外の外部サービスが基になるバッチ プールを呼び出せないようにします。
重要
ワークスペースが作成されたら、機密データ、暗号化、Key Vault ID、またはキー識別子の設定を変更することはできません。 これらの値を変更するには、新しい値を使用して新しいワークスペースを作成する必要があります。
詳細については、「保存時の暗号化」を参照してください。
仮想ネットワークの背後にワークスペースをデプロイする
vnetOption
パラメーターの値を new
または existing
に設定すると、ワークスペースが使用するリソースを仮想ネットワークの背後に作成できます。
重要
コンテナー レジストリでは、"Premium" 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 に設定する必要があります。 ただし、デプロイの前に、各リソースの仮想ネットワークにサービス エンドポイントを作成する必要があります。 新しい仮想ネットワークのデプロイと同様に、1 つまたはすべてのリソースを仮想ネットワークの背後にデプロイできます。
重要
サブネットには 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 文字で指定する必要があります。 使用できるのは英数字と '-' のみです。
- 場所: リソースを作成する場所を選択します。
[Review + create](レビュー + 作成) を選択します。
[Review + create](レビュー + 作成) 画面で、表示された使用条件に同意して [作成] を選択します。
詳細については、「カスタム テンプレートからリソースをデプロイする」を参照してください。
トラブルシューティング
リソース プロバイダーのエラー
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 Storage アカウントは、ワークスペースの既定のストレージとして使用されます。 |
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 Search では、ワークスペースのインデックス作成機能を提供します。 |
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
セクションの使用方法の詳細については、accessPolicies
を参照してください。Key Vault リソースが既に存在しているかどうかを確認します。 存在している場合は、テンプレートを使ってそれを再作成しないでください。 たとえば、新規作成するのではなく、既存の Key Vault を使用するには、テンプレートに次の変更を加えます。
既存の Key Vault リソースの ID を受け入れるパラメーターを追加します。
"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'))]",
の行を削除します。 また、keyVaultId
パラメーターを参照するために、ワークスペースのproperties
セクションのkeyVault
エントリを変更します。{ "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 リソースの ID を指定できます。 その後、テンプレートは、ワークスペースの
keyVault
プロパティをその ID に設定することによって、キー コンテナーを再利用します。Key Vault の ID を取得するには、元のテンプレート ジョブの出力を参照するか、Azure CLI を使用します。 次のコマンドは、Azure CLI を使用して Key Vault リソースの ID を取得する例です。
az keyvault show --name mykeyvault --resource-group myresourcegroup --query id
このコマンドにより、次のテキストのような値が返されます。
/subscriptions/{subscription-guid}/resourceGroups/myresourcegroup/providers/Microsoft.KeyVault/vaults/mykeyvault