通过门户或 Python SDK (v2) 管理 Azure 机器学习工作区
适用于:Python SDK azure-ai-ml v2(当前版本)
在本文中,我们将使用 Azure 门户或 SDK for Python 为 Azure 机器学习创建、查看和删除 Azure 机器学习工作区。
随着需求的变化或自动化要求的增加,可以通过 CLI、Azure PowerShell 或 Visual Studio Code 扩展来管理工作区。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。 立即尝试试用版订阅。
- 使用 Python SDK:
安装 azure-identity:
pip install azure-identity
。 如果在笔记本单元格中,请使用%pip install azure-identity
。提供订阅的详细信息:
适用范围:Python SDK azure-ai-ml v2(最新版)
# Enter details of your subscription subscription_id = "<SUBSCRIPTION_ID>" resource_group = "<RESOURCE_GROUP>"
获取订阅的句柄。 本文中的所有 Python 代码都使用
ml_client
:# get a handle to the subscription from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
(可选)如果有多个帐户,请添加要在
DefaultAzureCredential
中使用的 Microsoft Entra ID 的租户 ID。 在 Azure 门户的“Microsoft Entra ID 外部标识”下找到你的租户 ID。DefaultAzureCredential(interactive_browser_tenant_id="<TENANT_ID>")
限制
创建新的工作区时,可以自动创建工作区所需的服务或使用现有的服务。 如果要使用来自不同于工作区所在的 Azure 订阅的现有服务,则必须在包含这些服务的订阅中注册 Azure 机器学习命名空间。 例如,在订阅 A 中创建一个使用订阅 B 中的存储帐户的工作区时,必须在订阅 B 中注册 Azure 机器学习命名空间,然后该工作区才能使用该存储帐户。
Azure 机器学习的资源提供程序是 Microsoft.MachineLearningServices。 有关如何查看是否已注册或需要注册命名空间,请参阅《Azure 资源提供程序和类型》。
重要
此信息仅适用于工作区创建期间提供的资源:Azure 存储帐户、Azure 容器注册表、Azure Key Vault 和 Application Insights。
对于通过联机终结点进行的网络隔离,你可以使用其他资源组(而非你的工作区中的资源组)中的工作区关联资源(Azure 容器注册表 (ACR)、存储帐户、Key Vault 和 Application Insights)。 但这些资源必须属于与工作区相同的订阅和租户。 若要了解适用于使用工作区的托管虚拟网络保护托管联机终结点的限制,请参阅使用托管联机终结点进行网络隔离。
默认情况下,创建工作区时还会创建 Azure 容器注册表 (ACR)。 由于 ACR 当前不支持在资源组名称中使用 unicode 字符,因此请使用一个会避免使用这些字符的资源组。
对于工作区的默认存储帐户,Azure 机器学习不支持分层命名空间(Azure Data Lake Storage Gen2 功能)。
提示
创建工作区时,将创建一个 Azure Application Insights 实例。 如果需要,可以在创建群集后删除 Application Insights 实例。 删除它会限制从工作区收集的信息,并且故障排除可能会更加困难。 如果删除工作区创建的 Application Insights 实例,则重新创建它的唯一方法是删除并重新创建工作区。
若要详细了解如何使用此 Application Insights 实例,请参阅《从机器学习 Web 服务终结点监视和收集数据》。
创建工作区
可以直接在 Azure 机器学习工作室中创建工作区,但可用的选项有限。 也可使用以下方法之一来更好地控制选项:
适用范围:Python SDK azure-ai-ml v2(最新版)
入门的基本配置:如果没有规范,会自动创建关联的资源和 Azure 资源组。 此代码会在
eastus2
中创建一个名为myworkspace
的工作区、几个从属 Azure 资源(存储帐户、Key Vault、容器注册表、Application Insights)和一个名为myresourcegroup
的资源组。# Creating a unique workspace name with current datetime to avoid conflicts from azure.ai.ml.entities import Workspace import datetime basic_workspace_name = "mlw-basic-prod-" + datetime.datetime.now().strftime( "%Y%m%d%H%M" ) ws_basic = Workspace( name=basic_workspace_name, location="eastus", display_name="Basic workspace-example", description="This example shows how to create a basic workspace", hbi_workspace=False, tags=dict(purpose="demo"), ) ml_client.workspaces.begin_create(ws_basic)
使用现有的 Azure 资源。 若要引入现有的 Azure 资源,请按照 Azure 资源 ID 格式引用它们。 请通过 Azure 门户或 SDK 查找特定的 Azure 资源 ID。 此示例假设已存在资源组、存储帐户、Key Vault、Application Insights 和容器注册表。
# Creating a unique workspace name with current datetime to avoid conflicts import datetime from azure.ai.ml.entities import Workspace basic_ex_workspace_name = "mlw-basicex-prod-" + datetime.datetime.now().strftime( "%Y%m%d%H%M" ) ws_with_existing = Workspace( name=basic_ex_workspace_name, location="eastus", display_name="Bring your own dependent resources-example", description="This sample 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=dict(purpose="demonstration"), ) # uncomment this line after providing details of subscription, resource group and other details above # ml_client.begin_create_or_update(ws_with_existing)
(预览)使用现有中心工作区。 可以重复使用中心工作区的共享环境,而不是使用自己的安全设置和关联的资源创建默认工作区。 新的“项目”工作区将从中心获取安全设置和共享配置(包括计算和连接)。 此示例假定已经存在中心工作区。
from azure.ai.ml.entities import Project my_project_name = "myexampleproject" my_location = "East US" my_display_name = "My Example Project" my_hub = Project(name=my_hub_name, location=my_location, display_name=my_display_name, hub_id=created_hub.id) created_project_workspace = ml_client.workspaces.begin_create(workspace=my_hub).result()
有关详细信息,请查看工作区 SDK 参考。
如果在访问订阅时遇到问题,请参阅为 Azure 机器学习资源和工作流设置身份验证和 Azure 机器学习中的身份验证笔记本。
网络
重要
有关将专用终结点和虚拟网络与工作区结合使用的详细信息,请参阅网络隔离和隐私。
适用范围:Python SDK azure-ai-ml v2(最新版)
# Creating a unique workspace name with current datetime to avoid conflicts
import datetime
from azure.ai.ml.entities import Workspace
basic_private_link_workspace_name = (
"mlw-privatelink-prod-" + datetime.datetime.now().strftime("%Y%m%d%H%M")
)
ws_private_link = Workspace(
name=basic_private_link_workspace_name,
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=dict(purpose="demonstration"),
)
ml_client.workspaces.begin_create(ws_private_link)
此类需要现有虚拟网络。
加密
默认情况下,Azure Cosmos DB 实例存储工作区元数据。 Microsoft 会维护此 Cosmos DB 实例。 Azure 管理的密钥加密此数据。
使用自己的数据加密密钥
你可以提供自己的密钥来加密数据。 提供自己的密钥会创建在 Azure 订阅中存储元数据的 Azure Cosmos DB 实例。 有关详细信息,请参阅客户管理的密钥。
通过以下步骤提供你自己的密钥:
适用范围:Python SDK azure-ai-ml v2(最新版)
from azure.ai.ml.entities import Workspace, CustomerManagedKey
# specify the workspace details
ws = Workspace(
name="my_workspace",
location="chinaeast2",
display_name="My workspace",
description="This example shows how to create a workspace",
customer_managed_key=CustomerManagedKey(
key_vault="/subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RESOURCE_GROUP>/providers/microsoft.keyvault/vaults/<VAULT_NAME>"
key_uri="<KEY-IDENTIFIER>"
)
tags=dict(purpose="demo")
)
ml_client.workspaces.begin_create(ws)
标识
在门户中,通过“标识”页配置托管标识、存储帐户访问和数据影响。 有关 Python SDK,请参阅以下部分中的链接。
托管的标识
可以为工作区提供系统分配的标识或用户分配的标识。 此标识用于访问订阅中的资源。 有关详细信息,请参阅在 Azure 机器学习和其他服务之间设置身份验证。
存储帐户访问
在连接到默认存储帐户时,在“基于凭据的访问”和“基于标识的访问”之间进行选择。 对于基于标识的身份验证,必须向存储帐户上的工作区托管标识授予存储 Blob 数据参与者角色。
数据影响
若要限制 Microsoft 在你的工作区中收集的数据,请在门户中选择“高业务影响工作区”,或在 Python 中设置 。 有关此设置的详细信息,请参阅静态加密。
重要
只能在创建工作区时选择高业务影响。 在创建工作区后,不能更改此设置。
标记
标记是名称/值对,可让你通过将相同的标记应用到多个资源和资源组,对资源进行分类并查看合并的账单。
通过输入名称/值对,为工作区分配标记。 有关详细信息,请参阅使用标记来组织 Azure 资源。
还可以使用标记[强制实施工作区策略](#enforce-policies)。
下载配置文件
如果在计算实例上运行代码,请跳过此步骤。 计算实例会为你创建并存储此文件的副本。
若要在本地环境使用引用此工作区的代码,请下载此文件:
在 Azure 工作室中选择工作区
在右上角选择工作区名称,然后选择“下载 config.json”
将此文件放入保存 Python 脚本或 Jupyter Notebook 的目录结构中。 同一目录、某个名为 .azureml 的子目录或某个父目录可以保存此文件。 创建计算实例时,此文件会添加到 VM 上的正确目录中。
执行策略
可以打开/关闭工作区的这些功能:
- 工作区中的反馈机会。 机会包括偶尔的产品内调查和工作区横幅中的微笑-皱眉反馈工具。
这些功能默认处于打开状态。 若要将其关闭,请执行以下操作:
创建工作区时,请关闭标记部分的功能:
- 通过添加“ADMIN_HIDE_SURVEY: TRUE”对来关闭反馈
- 通过添加“AZML_DISABLE_PREVIEW_FEATURE”:“TRUE”对来关闭预览
对于现有工作区,请关闭“标记”部分的功能:
- 转到 Azure 门户中的工作区资源
- 从左侧导航面板打开“标签”
- 通过添加“ADMIN_HIDE_SURVEY: TRUE”对来关闭反馈
- 通过添加“AZML_DISABLE_PREVIEW_FEATURE: TRUE”对来关闭预览
- 选择“应用”。
可以在订阅级别关闭预览,确保该订阅中的所有工作区都关闭了预览。 在这种情况下,在选择工作区之前,订阅中的用户也无法访问预览工具。 对于希望确保不在其组织中使用预览功能的管理员,此设置非常有用。
如果在订阅级别禁用预览设置,则不会在各个工作区上设置它。
若要在订阅级别禁用预览功能,请执行以下操作:
- 转到 Azure 门户中的订阅资源
- 从左侧导航面板打开“标签”
- 通过添加“AZML_DISABLE_PREVIEW_FEATURE”:“TRUE”对来关闭订阅中所有工作区的预览
- 选择“应用”。
连接到工作区
使用 SDK 运行机器学习任务时,需要一个 MLClient 对象,该对象指定到工作区的连接。 可以通过参数或配置文件创建 MLClient
对象。
适用于:Python SDK azure-ai-ml v2(当前版)
使用配置文件:此代码读取配置文件的内容以查找你的工作区。 如果你尚未进行身份验证,它会打开一个登录提示。
from azure.ai.ml import MLClient # read the config from the current directory ws_from_config = MLClient.from_config(credential=DefaultAzureCredential())
通过参数:如果使用此方法,则无需提供 config.json 文件。
from azure.ai.ml import MLClient from azure.ai.ml.entities import Workspace from azure.identity import DefaultAzureCredential # uncomment this line after providing details of subscription, resource group and workspace name # ws = MLClient(DefaultAzureCredential(), subscription_id='<SUBSCRIPTION_ID>', resource_group_name='<RESOURCE_GROUP>', workspace_name='<AML_WORKSPACE_NAME>')
如果在访问订阅时遇到问题,请参阅为 Azure 机器学习资源和工作流设置身份验证和 Azure 机器学习中的身份验证笔记本。
查找工作区
查看可以使用的所有工作区的列表。 还可以在工作室中搜索工作区。 请参阅搜索 Azure 机器学习资产(预览版)。
适用范围:Python SDK azure-ai-ml v2(最新版)
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Workspace
from azure.identity import DefaultAzureCredential
# Enter details of your subscription
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
my_ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
for ws in my_ml_client.workspaces.list():
print(ws.name, ":", ws.location, ":", ws.description)
若要获取特定的工作区详细信息,请执行以下操作:
ws = my_ml_client.workspaces.get("<AML_WORKSPACE_NAME>")
# uncomment this line after providing a workspace name above
# print(ws.location,":", ws.resource_group)
创建工作区
不再需要工作区时,请删除它。
警告
如果为工作区启用了软删除,则可以在删除后恢复它。 如果未启用软删除,或者选择永久删除工作区的选项,则无法恢复该工作区。 有关详细信息,请参阅恢复已删除的工作区。
提示
Azure 机器学习的默认行为是软删除工作区。 这意味着不会立即删除工作区,而是将其标记为要删除。 有关详细信息,请参阅软删除。
适用范围:Python SDK azure-ai-ml v2(最新版)
ml_client.workspaces.begin_delete(name=ws_basic.name, delete_dependent_resources=True)
默认操作不会自动删除与工作区关联的资源。 如果将 delete_dependent_resources
设置为 True,则也会删除这些资源。
- 容器注册表
- 存储帐户
- Key Vault
- application insights
清理资源
重要
已创建的资源可用作其他 Azure 机器学习教程和操作方法文章的先决条件。
如果你不打算使用已创建的任何资源,请删除它们,以免产生任何费用:
在 Azure 门户中,选择最左侧的“资源组” 。
从列表中选择你创建的资源组。
选择“删除资源组”。
输入资源组名称。 然后选择“删除”。
疑难解答
Azure 机器学习工作室支持的浏览器:建议使用与操作系统兼容的最新浏览器。 支持以下浏览器:
- Microsoft Edge(新的 Microsoft Edge(最新版),注意:不支持 Microsoft Edge 旧版)
- Safari(最新版本,仅限 Mac)
- Chrome(最新版本)
- Firefox(最新版本)
Azure 门户:
- 如果通过 SDK 的共享链接或 Azure 门户直接访问工作区,则无法查看扩展中包含订阅信息的标准“概述”页面。 另外,在此情况下,无法切换到其他工作区。 若要查看其他工作区,请直接转到 Azure 机器学习工作室并搜索工作区名称。
- 所有资产(数据、试验、计算等)仅适用于 Azure 机器学习工作室。 Azure 门户不*提供它们。
- 尝试从 Azure 门户导出工作区模板可能会返回类似于以下文本的错误:
Could not get resource of the type <type>. Resources of this type will not be exported.
解决方法是使用 https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices 中提供的模板之一作为模板的基础。
工作区诊断
在 Azure 机器学习工作室或 Python SDK 中,可以在工作区上运行诊断。 运行诊断后,将返回检测到的任何问题的列表。 此列表包含指向可能的解决方案的链接。 有关详细信息,请参阅如何使用工作区诊断。
资源提供程序错误
创建 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 资源提供程序。 为托管虚拟网络创建专用终结点时,工作区会使用此资源提供程序。
有关注册资源提供程序的信息,请参阅解决资源提供程序注册错误。
删除 Azure 容器注册表
Azure 机器学习工作区使用 Azure 容器注册表 (ACR) 执行某些操作。 首次需要 ACR 实例时,它会自动创建一个。
警告
为工作区创建 Azure 容器注册表后,请不要删除它。 删除 Azure 容器注册表会破坏 Azure 机器学习工作区。
示例
本文中的示例来自 workspace.ipynb。
后续步骤
有了工作区后,请了解如何训练和部署模型。
- 如果需要将工作区移动到另一个 Azure 订阅,请访问如何移动工作区。
有关如何使用最新的安全更新使 Azure 机器学习保持最新状态的信息,请访问漏洞管理。