使用 Azure CLI 管理 Azure 机器学习工作区
本文介绍如何使用 Azure CLI 创建和管理 Azure 机器学习工作区。 Azure CLI 提供了一些命令来管理 Azure 资源,这些命令旨在让用户快速使用 Azure(侧重于自动化)。 Azure CLI 机器学习扩展提供用于处理 Azure 机器学习资源的命令。
还可以使用以下方法来创建并管理 Azure 机器学习工作区:
先决条件
限制
创建新的工作区时,可以自动创建工作区所需的服务或使用现有的服务。 如果要使用来自不同于工作区所在的 Azure 订阅的现有服务,则必须在包含这些服务的订阅中注册 Azure 机器学习命名空间。 例如,在订阅 A 中创建一个使用订阅 B 中的存储帐户的工作区时,必须在订阅 B 中注册 Azure 机器学习命名空间,然后该工作区才能使用该存储帐户。
Azure 机器学习的资源提供程序是 Microsoft.MachineLearningServices。 有关如何查看是否已注册或需要注册命名空间,请参阅《Azure 资源提供程序和类型》。
重要
此信息仅适用于工作区创建期间提供的资源:Azure 存储帐户、Azure 容器注册表、Azure Key Vault 和 Application Insights。
连接到 Azure 订阅
可使用多种方法通过 CLI 以本地方式向 Azure 订阅进行身份验证。 最简单的方法是使用浏览器。
若要以交互方式进行身份验证,请打开命令行或终端,然后运行 az login
。 如果 CLI 可以打开默认的浏览器,则会打开该浏览器并加载登录页面。 否则,请按照命令行说明将浏览器打开到 https://aka.ms/deviceloginchina 并输入设备授权代码。
提示
登录后,你将看到与你的 Azure 帐户关联的订阅列表。 在 isDefault: true
的情况下显示的订阅信息是 Azure CLI 命令的当前已激活的订阅。 此订阅必须与包含 Azure 机器学习工作区的订阅相同。 可以在 Azure 门户中工作区的概述页面上找到订阅信息。
若要选择用于 Azure CLI 命令的另一个订阅,请运行 az account set -s <subscription>
命令并指定要切换到哪个订阅名称或 ID。 有关订阅选择的详细信息,请参阅使用多个 Azure 订阅。
有关其他身份验证方法,请参阅使用 Azure CLI 登录。
创建资源组
必须在现有的或新的资源组中创建 Azure 机器学习工作区。 若要创建新资源组,请运行以下命令。 将 <resource-group-name>
替换为要用于此资源组的名称,将 <location>
替换为要用于此资源组的 Azure 区域。
注意
务必选择可使用 Azure 机器学习的区域。 有关详细信息,请参阅 各区域的产品可用性。
az group create --name <resource-group-name> --location <azure-region>
对此命令的响应类似于以下 JSON。 可以使用输出值来定位已创建的资源,或将其作为输入传递给其他 Azure CLI 命令或自动化。
{
"id": "/subscriptions/<subscription-GUID>/resourceGroups/<resourcegroupname>",
"location": "<location>",
"managedBy": null,
"name": "<resource-group-name>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": null
}
要详细了解如何使用资源组,请参阅 az group。
创建工作区
部署的 Azure 机器学习工作区需要各种其他服务作为依赖的关联资源。 使用 Azure CLI 创建工作区时,可以通过 CLI 创建新的关联资源,也可以附加现有资源。
若要创建一个具有自动创建的新依赖服务的新工作区,请运行以下命令:
az ml workspace create -n <workspace-name> -g <resource-group-name>
若要创建一个使用现有资源的新工作区,请先在 YAML 配置文件中定义资源,如下一部分所述。 然后在 Azure CLI 工作区创建命令中引用 YAML 文件,如下所示:
az ml workspace create -g <resource-group-name> --file <configuration-file>.yml
工作区创建命令的输出类似于以下 JSON。 可以使用输出值来定位已创建的资源,或将其作为输入传递给其他 Azure CLI 命令。
{
"applicationInsights": "/subscriptions/<subscription-GUID>/resourcegroups/<resource-group-name>/providers/microsoft.insights/components/<application-insight-name>",
"containerRegistry": "/subscriptions/<subscription-GUID>/resourcegroups/<resource-group-name>/providers/microsoft.containerregistry/registries/<container-registry-name>",
"creationTime": "2019-08-30T20:24:19.6984254+00:00",
"description": "",
"friendlyName": "<workspace-name>",
"id": "/subscriptions/<subscription-GUID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-id>",
"identityPrincipalId": "<GUID>",
"identityTenantId": "<GUID>",
"identityType": "SystemAssigned",
"keyVault": "/subscriptions/<subscription-GUID>/resourcegroups/<resource-group-name>/providers/microsoft.keyvault/vaults/<key-vault-name>",
"location": "<location>",
"name": "<workspace-name>",
"resourceGroup": "<resource-group-name>",
"storageAccount": "/subscriptions/<subscription-GUID>/resourcegroups/<resource-group-name>/providers/microsoft.storage/storageaccounts/<storage-account-name>",
"type": "Microsoft.MachineLearningServices/workspaces",
"workspaceid": "<GUID>"
}
YAML 配置文件
若要将现有资源用于新的工作区,请在 YAML 配置文件中定义资源。 以下示例显示了 YAML 工作区配置文件:
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-basicex-prod
location: eastus
display_name: Bring your own dependent resources-example
description: This configuration specifies a workspace configuration with existing dependent resources
storage_account: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT>
container_registry: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerRegistry/registries/<CONTAINER_REGISTRY>
key_vault: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT>
application_insights: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.insights/components/<APP_INSIGHTS>
tags:
purpose: demonstration
不必在配置文件中指定所有关联的依赖资源。 可以指定一个或多个资源,而让其他资源自动创建。
必须提供 YAML 文件中现有资源的 ID。 可以通过查看 Azure 门户中的资源“属性”或运行以下 Azure CLI 命令来获取这些 ID:
- Azure Application Insights:
az monitor app-insights component show --app <application-insight-name> -g <resource-group-name> --query "id"
- Azure 容器注册表:
az acr show --name <container-registry-name> -g <resource-group-name> --query "id"
- Azure Key Vault:
az keyvault show --name <key-vault-name> --query "id"
- Azure 存储帐户:
az storage account show --name <storage-account-name> --query "id"
查询结果类似于以下字符串:
"/subscriptions/<subscription-GUID>/resourceGroups/<resource-group-name>/providers/<provider>/<subresource>/<id>"
。
关联的依赖资源
以下注意事项和限制适用于与工作区关联的依赖资源。
Application Insights
提示
创建工作区时,将创建一个 Azure Application Insights 实例。 如果需要,可以在创建群集后删除 Application Insights 实例。 删除它会限制从工作区收集的信息,并且故障排除可能会更加困难。 如果删除工作区创建的 Application Insights 实例,则重新创建它的唯一方法是删除并重新创建工作区。
若要详细了解如何使用此 Application Insights 实例,请参阅《从机器学习 Web 服务终结点监视和收集数据》。
存储帐户
如果将现有存储帐户用于工作区,则它必须满足以下条件。 这些要求仅适用于默认存储帐户。
- 该帐户不能是 Premium_LRS 或 Premium_GRS。
- Azure Blob 和 Azure 文件功能都必须启用。
- 必须为 Azure Data Lake Storage 禁用分层命名空间。
保护 Azure CLI 通信
所有 Azure 机器学习 V2 az ml
命令都会将操作数据(例如 YAML 参数和元数据)传达给 Azure 资源管理器。 某些 Azure CLI 命令通过 Internet 与 Azure 资源管理器通信。
如果 Azure 机器学习工作区是公共的且不在虚拟网络后面,则使用 HTTPS/TLS 1.2 可以保护通信安全。 无需进行额外配置。
如果 Azure 机器学习工作区使用专用终结点和虚拟网络,则必须选择以下配置之一来使用 Azure CLI:
若要通过公共 Internet 进行通信,请将
--public-network-access
参数设置为Enabled
。为了避免出于安全原因通过公共 Internet 进行通信,请将 Azure 机器学习配置为使用通过 Azure 专用链接终结点完成的专用网络连接,如下一部分所述。
专用网络连接
根据用例和组织要求,可以将 Azure 机器学习配置为使用专用网络连接。 可以使用 Azure CLI 为工作区资源部署工作区和专用链接终结点。
如果对 Azure 容器注册表和 Azure 机器学习都使用专用链接终结点,则无法使用容器注册表任务来生成 Docker 环境映像, 而必须使用 Azure 机器学习计算群集来生成映像。
在 YAML 工作区配置文件中,必须将 image_build_compute
属性设置为一个用于生成 Docker 映像环境的计算群集名称。 还可通过将 public_network_access
属性设置为 Disabled
来指定专用链接工作区不可通过 Internet 进行访问。
以下代码显示了专用网络连接的示例工作区配置文件。
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-privatelink-prod
location: eastus
display_name: Private Link endpoint workspace-example
description: When using private link, you must set the image_build_compute property to a cluster name to use for Docker image environment building. You can also specify whether the workspace should be accessible over the internet.
image_build_compute: cpu-compute
public_network_access: Disabled
tags:
purpose: demonstration
创建工作区后,请使用 Azure 网络 CLI 命令为工作区创建专用链接终结点。
az network private-endpoint create \
--name <private-endpoint-name> \
--vnet-name <virtual-network-name> \
--subnet <subnet-name> \
--private-connection-resource-id "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>" \
--group-id amlworkspace \
--connection-name workspace -l <location>
若要为工作区创建专用域名系统 (DNS) 区域条目,请使用以下命令:
# Add privatelink.api.ml.azure.cn
az network private-dns zone create \
-g <resource-group-name> \
--name 'privatelink.api.ml.azure.cn'
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name 'privatelink.api.ml.azure.cn' \
--name <link-name> \
--virtual-network <virtual-network-name> \
--registration-enabled false
az network private-endpoint dns-zone-group create \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name <zone-group-name> \
--private-dns-zone 'privatelink.api.ml.azure.cn' \
--zone-name 'privatelink.api.ml.azure.cn'
# Add privatelink.notebooks.chinacloudapi.cn
az network private-dns zone create \
-g <resource-group-name> \
--name 'privatelink.notebooks.chinacloudapi.cn'
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name 'privatelink.notebooks.chinacloudapi.cn' \
--name <link-name> \
--virtual-network <virtual-network-name> \
--registration-enabled false
az network private-endpoint dns-zone-group add \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name <zone-group-name> \
--private-dns-zone 'privatelink.notebooks.chinacloudapi.cn' \
--zone-name 'privatelink.notebooks.chinacloudapi.cn'
有关将专用终结点和虚拟网络与工作区结合使用的详细信息,请参阅以下文章:
高级配置
可以将其他几种高级配置应用于工作区。 有关复杂的资源配置,另请参阅基于模板的部署选项,包括 Azure 资源管理器。
客户管理的密钥
默认情况下,工作区元数据存储在 Microsoft 维护的 Azure Cosmos DB 实例中,并使用 Azure 托管的密钥加密。 可以提供自己的密钥,而不使用 Azure 托管的密钥。 使用你自己的密钥可以在 Azure 订阅中创建一组额外的资源来存储数据。
注意
Azure Cosmos DB 不用于存储模型性能信息、试验记录的信息或模型部署中记录的信息。
若要创建使用你自己的密钥的工作区,请使用 YAML 工作区配置文件中的 customer_managed_key
参数,并指定保管库内密钥的包含 key_vault
的资源 ID 和 key_uri
。
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-cmkexample-prod
location: eastus
display_name: Customer managed key encryption-example
description: This configurations shows how to create a workspace that uses customer-managed keys for encryption.
customer_managed_key:
key_vault: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT>
key_uri: https://<KEY_VAULT>.vault.azure.net/keys/<KEY_NAME>/<KEY_VERSION>
tags:
purpose: demonstration
若要详细了解在使用你自己的密钥进行加密时创建的资源,请参阅使用 Azure 机器学习进行数据加密。
注意
若要管理添加的数据加密资源,请使用“标识和访问管理”为机器学习应用授予对你的订阅的“参与者”权限。
重大业务影响工作区
若要限制 Microsoft 在你的工作区上收集的数据,可以通过将 YAML 配置文件中的 hbi_workspace
属性设置为 TRUE
来指定重大业务影响工作区。 只有在创建工作区时才可以设置重大业务影响。 在创建工作区后,不能更改此设置。
有关客户管理的密钥和极大影响业务的工作区的详细信息,请参阅 Azure 机器学习的企业安全性。
使用 Azure CLI 管理工作区
可以使用 az ml workspace 命令来管理工作区。
获取工作区信息
若要获取有关工作区的信息,请使用以下命令:
az ml workspace show -n <workspace-name> -g <resource-group-name>
有关详细信息,请参阅 az ml workspace show。
更新工作区
若要更新工作区,请使用以下命令:
az ml workspace update -n <workspace-name> -g <resource-group-name>
例如,以下命令将工作区更新为启用公用网络访问:
az ml workspace update -n <workspace-name> -g <resource-group-name> --public-network-access enabled
有关详细信息,请参阅 az ml workspace update。
同步依赖资源的密钥
如果更改工作区使用的资源之一的访问密钥,则工作区需要大约一个小时才能与新密钥同步。 若要强制工作区立即同步新密钥,请使用以下命令:
az ml workspace sync-keys -n <workspace-name> -g <resource-group-name>
- 有关
sync-keys
命令的详细信息,请参阅 az ml workspace sync-keys。 - 有关更改密钥的详细信息,请参阅重新生成存储访问密钥。
移动工作区
移动 Azure 机器学习工作区的功能目前为预览版。 有关详细信息,请参阅在订阅之间移动 Azure 机器学习工作区(预览版)。
创建工作区
若要删除不再需要的工作区,请使用以下命令:
az ml workspace delete -n <workspace-name> -g <resource-group-name>
Azure 机器学习的默认行为是软删除工作区。 不会立即删除工作区,而是会将其标记为要删除。 有关详细信息,请参阅软删除。
警告
如果为工作区启用了软删除,则可以在删除后恢复它。 如果未启用软删除,或者选择永久删除工作区的选项,则无法恢复该工作区。 有关详细信息,请参阅恢复已删除的工作区。
删除某个工作区不会删除该工作区使用的 Application Insights、存储帐户、密钥保管库或容器注册表。 若要删除工作区、依赖资源以及资源组中的所有其他 Azure 资源,可以删除资源组。 若要删除资源组,请使用以下命令:
az group delete -g <resource-group-name>
有关详细信息,请参阅 az ml workspace delete。
排查资源提供程序错误
创建 Azure 机器学习工作区或工作区使用的资源时,可能会收到类似于以下消息的错误:
No registered resource provider found for location {location}
The subscription is not registered to use namespace {resource-provider-namespace}
大多数资源提供程序会自动注册,但并非全部。 如果收到此消息,则需要注册所提到的提供程序。
下表包含 Azure 机器学习所需的资源提供程序的列表:
资源提供程序 | 为什么需要它 |
---|---|
Microsoft.MachineLearningServices | 创建 Azure 机器学习工作区。 |
Microsoft.Storage | Azure 存储帐户用作该工作区的默认存储。 |
Microsoft.ContainerRegistry | Azure 容器注册表被工作区用来生成 Docker 映像。 |
Microsoft.KeyVault | 该工作区使用 Azure Key Vault 来存储机密。 |
Microsoft.Notebooks | Azure 机器学习计算实例上集成的笔记本。 |
Microsoft.ContainerService | 如果计划将训练后的模型部署到 Azure Kubernetes 服务。 |
如果计划将客户管理的密钥与 Azure 机器学习一起使用,则必须注册以下服务提供程序:
资源提供程序 | 为什么需要它 |
---|---|
Microsoft.DocumentDB | 用于记录工作区元数据的 Azure CosmosDB 实例。 |
Microsoft.Search | Azure 搜索为工作区提供索引编制功能。 |
如果打算将托管虚拟网络与 Azure 机器学习配合使用,必须注册 Microsoft.Network 资源提供程序。 为托管虚拟网络创建专用终结点时,工作区会使用此资源提供程序。
有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误。