在本文中,您将学习如何从模型目录中部署模型作为标准部署。
重要
预览版的模型在模型目录中的模型卡上标记为“预览”。
可以将模型目录中的某些模型部署为标准部署。 这种部署可以将模型作为 API 使用,而无需将它们托管在自己的订阅上,同时保持组织所需的企业安全性和合规性。 此部署选项不需要使用您订阅中的配额。
本文使用 Meta Llama 模型部署进行说明。 但是,可以使用相同的步骤在 可用于标准部署的模型目录中部署任何模型。
先决条件
具有有效付款方式的 Azure 订阅。 免费或试用的 Azure 订阅将不起作用。 如果没有 Azure 订阅,请先创建一个付费的 Azure 帐户。
如果没有项目, 请创建基于中心的项目。
确保在 Azure AI Foundry 门户中关闭 将模型部署到 Azure AI 模型推理服务 功能。 如果启用此功能,则在使用门户时,标准部署不可用于部署。
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Foundry 门户中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配资源组的“Azure AI 开发人员”角色。 有关权限详细信息,请参阅 Azure AI Foundry 门户中基于角色的访问控制。
需要安装以下软件才能使用 Azure AI Foundry:
Azure CLI 和适用于 Azure 机器学习的 ml 扩展。
az extension add -n ml
如果已安装该扩展,请确保安装的是最新版本。
az extension update -n ml
安装该扩展后,对其进行配置:
az account set --subscription <subscription>
az configure --defaults workspace=<project-name> group=<resource-group> ___location=<___location>
安装适用于 Python 的 Azure 机器学习 SDK。
pip install -U azure-ai-ml
安装后,导入所需的命名空间并创建连接到项目的客户端:
from azure.ai.ml import MLClient
from azure.identity import InteractiveBrowserCredential
from azure.ai.ml.entities import MarketplaceSubscription, ServerlessEndpoint
client = MLClient(
credential=InteractiveBrowserCredential(tenant_id="<tenant-id>"),
subscription_id="<subscription-id>",
resource_group_name="<resource-group>",
workspace_name="<project-name>",
)
如 Azure CLI 中所述安装 Azure CLI。
根据设置,配置以下环境变量:
RESOURCE_GROUP="serverless-models-dev"
LOCATION="eastus2"
在模型目录中查找模型和模型 ID
- 登录到 Azure AI Foundry。
- 如果你尚未进入项目,请先选择它。
- 从左窗格中选择 “模型目录 ”。
注释
对于通过 Azure 市场提供的模型,请确保你的帐户对资源组具有“Azure AI 开发人员”角色权限,或者你满足订阅模型产品所需的权限。
非 Microsoft 提供商提供的模型(例如 Llama 和 Mistral 模型)通过 Azure 市场计费。 对于此类模型,需要将项目订阅到特定的模型产品/服务。 Microsoft 提供的模型(例如 Phi-3 模型)没有此要求,因为计费方式不同。 有关模型目录中无服务器部署模型的计费的详细信息,请参阅 标准部署的计费。
选择要部署的模型的模型卡。 在本文中,请选择“Meta-Llama-3-8B-Instruct”模型。
如果使用 Azure CLI、Python 或 ARM 部署模型,请复制“模型 ID”。
重要
复制模型 ID 时不要包括版本。 标准部署始终部署模型的最新版本。 例如,对于模型 ID azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct/versions/3
,请复制 azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
。
下一部分介绍将项目订阅到模型产品/服务的步骤。 如果部署Microsoft模型,可以跳过本部分,然后转到“ 将模型部署到标准部署”。
将项目订阅到模型产品/服务
标准部署可以部署Microsoft和非Microsoft提供的模型。 对于微软模型(例如 Phi-3 模型),不需要创建 Azure 市场订阅,您可以直接将其部署到标准部署,以便使用其预测结果。 对于非 Microsoft 模型,首先需要创建订阅。 如果这是你首次在项目中部署模型,则必须从 Azure 市场订阅项目以获取特定模型产品/服务。 每个项目都自己的订阅,以访问特定 Azure 市场中的模型产品/服务,可用于控制和监视支出。
创建模型的市场订阅。 创建订阅即表示你接受与模型产品/服务相关的条款和条件。
在模型的“详细信息”页上,选择“部署”。 此时会打开 “部署选项” 窗口,让你使用托管计算在标准部署和部署之间进行选择。
注释
对于只能通过标准部署部署的模型,在从模型的详细信息页中选择“ 部署 ”后,将立即打开标准部署向导。
使用 Azure AI 内容安全(预览版)选择标准部署以打开标准部署向导。
选择要在其中部署模型的项目。 若要使用标准部署模型部署产品/服务,项目必须属于特定模型 支持无服务器部署 的区域之一。
如果看到注释“你已拥有此项目的 Azure 市场订阅”,则无需创建订阅,因为你已经拥有订阅。 可以继续 将模型部署到标准环境。
在部署向导中,选择“Azure 市场条款”的链接,了解有关使用条款的详细信息。 还可以选择“定价和条款”选项卡了解所选模型的定价。
选择“订阅和部署”。
subscription.yml
name: meta-llama3-8b-qwerty
model_id: azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
使用之前的文件创建订阅:
az ml marketplace-subscription create -f subscription.yml
model_id="azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct"
subscription_name="Meta-Llama-3-8B-Instruct"
marketplace_subscription = MarketplaceSubscription(
model_id=model_id,
name=subscription_name,
)
marketplace_subscription = client.marketplace_subscriptions.begin_create_or_update(
marketplace_subscription
).result()
使用以下 bicep 配置创建模型订阅:
model-subscription.bicep
param projectName string = 'my-project'
param modelId string = 'azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct'
var modelName = substring(modelId, (lastIndexOf(modelId, '/') + 1))
var subscriptionName = '${modelName}-subscription'
resource projectName_subscription 'Microsoft.MachineLearningServices/workspaces/marketplaceSubscriptions@2024-04-01-preview' = if (!startsWith(
modelId,
'azureml://registries/azureml/'
)) {
name: '${projectName}/${subscriptionName}'
properties: {
modelId: modelId
}
}
然后创建资源,如下所示:
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.bicep
使用以下模板创建模型订阅:
model-subscription.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"project_name": {
"defaultValue": "my-project",
"type": "String"
},
"subscription_name": {
"defaultValue": "Meta-Llama-3-8B-Instruct",
"type": "String"
},
"model_id": {
"defaultValue": "azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.MachineLearningServices/workspaces/marketplaceSubscriptions",
"apiVersion": "2024-04-01",
"name": "[concat(parameters('project_name'), '/', parameters('subscription_name'))]",
"properties": {
"modelId": "[parameters('model_id')]"
}
}
]
}
使用 Azure 门户或 Azure CLI 创建部署。
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.json
订阅特定 Azure 市场产品/服务的项目后,同一项目中同一产品/服务的后续部署不需要再次订阅。
随时可以查看项目当前订阅的模型产品/服务:
转到 Azure 门户。
导航到项目所属的资源组。
在“类型”筛选器中选择“SaaS”。
可以看到当前订阅的所有产品/服务。
选择任何资源以查看详细信息。
az ml marketplace-subscription list
marketplace_sub_list = client.marketplace_subscriptions.list()
for sub in marketplace_sub_list:
print(sub.as_dict())
可以使用资源管理工具来查询资源。 以下代码使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.SaaS']"
可以使用资源管理工具来查询资源。 以下代码使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.SaaS']"
将模型部署为标准部署
为非Microsoft模型创建订阅后,可以将关联的模型部署到标准部署。 对于 Microsoft 模型(如 Phi-3 模型),无需创建订阅。
标准部署提供了一种使用模型作为 API 的方法,而无需在订阅中托管模型,同时保持企业安全性和合规性组织的需求。 此部署选项不需要使用您订阅中的配额。
在本部分中,创建一个名为“meta-llama3-8b-qwerty”的终结点。
创建无服务器终结点
若要部署不需要订阅模型产品/服务的 Microsoft 模型:
- 选择 “部署 ”,然后使用 Azure AI 内容安全(预览版)选择标准部署 以打开部署向导。
- 选择要在其中部署模型的项目。 请注意,并非所有区域都受支持。
或者,对于需要模型订阅的非 Microsoft 模型,如果你刚在上一部分中将项目订阅到了模型产品/服务,请继续选择“部署”。 或者,选择“继续部署”(如果部署向导显示备注“你已拥有此项目的 Azure 市场订阅”)。
为部署命名。 此名称将成为部署 API URL 的一部分。 此 URL 必须在每个 Azure 区域中唯一。
选择“部署”。 部署准备就绪后,你将被重定向到“部署”页面。
endpoint.yml
name: meta-llama3-8b-qwerty
model_id: azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
使用 endpoint.yml 文件创建终结点:
az ml serverless-endpoint create -f endpoint.yml
endpoint_name="meta-llama3-8b-qwerty"
serverless_endpoint = ServerlessEndpoint(
name=endpoint_name,
model_id=model_id
)
created_endpoint = client.serverless_endpoints.begin_create_or_update(
serverless_endpoint
).result()
使用以下模板创建终结点:
serverless-endpoint.bicep
param projectName string = 'my-project'
param endpointName string = 'myserverless-text-1234ss'
param ___location string = resourceGroup().___location
param modelId string = 'azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct'
var modelName = substring(modelId, (lastIndexOf(modelId, '/') + 1))
var subscriptionName = '${modelName}-subscription'
resource projectName_endpoint 'Microsoft.MachineLearningServices/workspaces/serverlessEndpoints@2024-04-01-preview' = {
name: '${projectName}/${endpointName}'
___location: ___location
sku: {
name: 'Consumption'
}
properties: {
modelSettings: {
modelId: modelId
}
}
dependsOn: [
projectName_subscription
]
}
output endpointUri string = projectName_endpoint.properties.inferenceEndpoint.uri
如下所示创建部署:
az deployment group create --resource-group $RESOURCE_GROUP --template-file model-subscription.bicep
使用以下模板创建终结点:
template.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"project_name": {
"defaultValue": "my-project",
"type": "String"
},
"endpoint_name": {
"defaultValue": "meta-llama3-8b-qwerty",
"type": "String"
},
"___location": {
"defaultValue": "eastus2",
"type": "String"
},
"model_id": {
"defaultValue": "azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.MachineLearningServices/workspaces/serverlessEndpoints",
"apiVersion": "2024-04-01",
"name": "[concat(parameters('project_name'), '/', parameters('endpoint_name'))]",
"___location": "[parameters('___location')]",
"sku": {
"name": "Consumption"
},
"properties": {
"modelSettings": {
"modelId": "[parameters('model_id')]"
}
}
}
]
}
然后创建部署:
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file template.json
Azure 部署模板可能需要几分钟才能完成。 完成之后,会看到一条包含以下结果的消息:
"provisioningState": "Succeeded",
随时可以查看部署到项目的终结点:
转到您的项目。
在“我的资产”部分中,选择“模型 + 终结点”。
这会显示标准部署。
az ml serverless-endpoint list
endpoint_name="meta-llama3-8b-qwerty"
serverless_endpoint = ServerlessEndpoint(
name=endpoint_name,
model_id=model_id
)
created_endpoint = client.serverless_endpoints.begin_create_or_update(
serverless_endpoint
).result()
可以使用资源管理工具来查询资源。 以下代码使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.MachineLearningServices/workspaces/serverlessEndpoints']"
可以使用资源管理工具来查询资源。 以下代码使用 Azure CLI:
az resource list \
--query "[?type=='Microsoft.MachineLearningServices/workspaces/serverlessEndpoints']"
创建的终结点使用密钥身份验证进行授权。 使用以下步骤获取与给定终结点关联的密钥。
可以选择部署,并记下终结点的“目标 URI”和“密钥”。 使用它们来调用部署并生成预测。
注释
使用 Azure 门户时,默认情况下不会在资源组上显示标准部署。 使用“显示隐藏的类型”选项可将其显示在资源组上。
az ml serverless-endpoint get-credentials -n meta-llama3-8b-qwerty
endpoint_keys = client.serverless_endpoints.get_keys(endpoint_name)
print(endpoint_keys.primary_key)
print(endpoint_keys.secondary_key)
现在,你的端点已准备就绪,可供使用。
如果需要从其他项目或中心使用此部署,或者计划使用提示流生成智能应用程序,则需要创建与标准部署的连接。 若要了解如何在新项目或中心上配置现有标准部署,请参阅 从其他项目或提示流使用已部署的标准部署。
小窍门
如果在部署部署的同一项目或中心内使用提示流,则仍然需要创建连接。
使用标准部署
在标准部署中部署在 Azure 机器学习和 Azure AI Foundry 中的模型支持 Azure AI Foundry 模型 API ,该 API 公开了基础模型的常见功能集,开发人员可以使用这些模型以统一且一致的方式使用来自各种模型的预测。
详细了解此 API 的功能以及如何在生成应用程序时使用它。
网络隔离
部署为标准部署的模型的终结点将遵循具有部署所在的项目的 Azure AI Foundry 门户中心的公用网络访问 (PNA) 标志设置。 若要保护标准部署,请在 Azure AI Foundry 中心禁用 PNA 标志。 可以使用中心的专用终结点来保护从客户端到终结点的入站通信。
若要为 Azure AI Foundry 中心设置 PNA 标志,请执行以下操作:
- 转到 Azure 门户。
- 搜索中心所属的资源组,并在针对此资源组列出的资源中选择“Azure AI 中心”。
- 在中心“概述”页面上的左侧菜单中,选择“设置”“网络”>。
- 在“公共访问”选项卡下,可以配置公用网络访问标志的设置。
- 保存更改。 你所做的更改最多可能需要五分钟才能传播。
删除终结点和订阅
小窍门
由于可以在 Azure AI Foundry 门户中 自定义左窗格 ,因此你可能会看到与这些步骤中显示的项不同。 如果未看到要查找的内容,请选择 ... 左窗格底部的更多内容。
可以删除模型订阅和终结点。 删除模型订阅会使任何关联的终结点变得不正常且无法使用。
如需删除标准部署,请执行以下操作。
转到 Azure AI Foundry。
转到您的项目。
在“我的资产”部分中,选择“模型 + 终结点”。
打开要删除的部署。
选择 删除。
若要删除关联的模型订阅,请执行以下操作:
转到 Azure 门户
导航到项目所属的资源组。
在“类型”筛选器中选择“SaaS”。
选择要删除的订阅。
选择 删除。
如需删除标准部署,请执行以下操作。
az ml serverless-endpoint delete \
--name "meta-llama3-8b-qwerty"
若要删除关联的模型订阅,请执行以下操作:
az ml marketplace-subscription delete \
--name "Meta-Llama-3-8B-Instruct"
如需删除标准部署,请执行以下操作。
client.serverless_endpoints.begin_delete(endpoint_name).wait()
若要删除关联的模型订阅,请执行以下操作:
client.marketplace_subscriptions.begin_delete(subscription_name).wait()
可以使用资源管理工具来管理资源。 以下代码使用 Azure CLI:
az resource delete --name <resource-name>
可以使用资源管理工具来管理资源。 以下代码使用 Azure CLI:
az resource delete --name <resource-name>
标准部署模型的成本与配额考量
配额是按部署管理的。 每个部署的速率限制为每分钟 200,000 个令牌和每分钟 1,000 个 API 请求。 但是,我们目前的限制为每个项目每个模型一个部署。 如果当前速率限制不能满足你的方案,请联系 Microsoft Azure 支持部门。
Microsoft 模型的成本
部署Microsoft模型(如 Phi-3 模型)作为标准部署时,可以在部署向导的 “定价和条款 ”选项卡上找到定价信息。
非 Microsoft 模型的成本
部署为标准部署的非 Microsoft 模型通过 Azure 市场提供,并与 Azure AI Foundry 集成以供使用。 部署或微调这些模型时,可找到 Azure 市场定价。
每次项目从 Azure 市场订阅给定产品/服务时,都会创建一个新资源来跟踪与其消耗相关的成本。 同一资源用于跟踪与推理和微调相关的成本。但是,可以使用多个计量器来独立跟踪每个方案。
有关如何跟踪成本的详细信息,请参阅监视通过 Azure 市场提供的模型的成本。
订阅模型产品/服务所需的权限
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Foundry 门户中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 订阅的“所有者”、“参与者”或“Azure AI 开发人员”角色。 或者,可以为帐户分配具有以下权限的自定义角色:
有关权限详细信息,请参阅 Azure AI Foundry 门户中基于角色的访问控制。
相关内容