你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
将模型部署为无服务器 API
本文内容
本文介绍如何将模型目录中的模型部署为无服务器 API,并采用基于即用即付令牌的计费方式。
重要
预览版的模型在模型目录中的模型卡上标记为 “预览”。
模型目录中的某些模型 可以部署为即用即付的无服务器 API。 这种部署可以将模型作为 API 使用,而无需将它们托管在自己的订阅上,同时保持组织所需的企业安全性和合规性。 此部署选项不需要来自订阅的配额。
本文使用 Meta Llama 模型部署进行说明。 但是,可以使用相同的步骤部署模型目录中任何可用于无服务器 API 部署的模型 。
先决条件
具有有效付款方式的 Azure 订阅。 不能使用免费或试用 Azure 订阅。 如果没有 Azure 订阅,请先创建一个付费的 Azure 帐户 。
一个 Azure AI Studio 中心 。
一个 Azure AI Studio 项目 。
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Studio 中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配资源组的“Azure AI 开发人员”角色 。 有关权限详细信息,请参阅 Azure AI Studio 中基于角色的访问控制 。
需要安装以下软件才能使用 Azure AI Studio:
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 Studio 。
如果你尚未进入项目,请先选择它。
从左侧导航窗格中选择“模型目录 ”。
注意
对于通过 Azure 市场提供的模型,请确保你的帐户对资源组具有“Azure AI 开发人员”角色权限,或者你满足订阅模型产品所需的权限 。
非 Microsoft 提供商提供的模型(例如 Llama 和 Mistral 模型)通过 Azure 市场计费。 对于此类模型,需要将项目订阅到特定的模型产品/服务。 Microsoft 提供的模型(例如 Phi-3 模型)没有此要求,因为计费方式不同。 有关模型目录中无服务器模型部署的计费的详细信息,请参阅无服务器 API 的计费 。
选择要部署的模型的模型卡。 在本文中,请选择“Meta-Llama-3-8B-Instruct”模型 。
如果使用 Azure CLI、Python 或 ARM 部署模型,请复制“模型 ID” 。
重要
复制“模型 ID”时不要包括版本 。 无服务器 API 终结点始终部署模型的最新可用版本。 例如,对于模型 ID azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct/versions/3
,请复制 azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct
。
下一部分介绍将项目订阅到模型产品/服务的步骤。 如果你将部署 Microsoft 模型,可跳过本部分,并转到“ 将模型部署到无服务器 API 终结点”。
将项目订阅到模型产品/服务
无服务器 API 终结点可以部署 Microsoft 和非 Microsoft 提供的模型。 对于 Microsoft 模型(例如 Phi-3 模型),无需创建 Azure 市场订阅,并且可以将其直接部署到无服务器 API 终结点 以使用其预测。 对于非 Microsoft 模型,首先需要创建订阅。 如果这是你首次在项目中部署模型,则必须从 Azure 市场订阅项目以获取特定模型产品/服务。 每个项目都自己的订阅,以访问特定 Azure 市场中的模型产品/服务,可用于控制和监视支出。
创建模型的市场订阅。 创建订阅即表示你接受与模型产品/服务相关的条款和条件。
在模型的“详细信息”页上,选择“部署”。 此时会打开“部署选项”窗口,让你能够在无服务器 API 部署和使用托管计算的部署之间进行选择。
注意
对于只能通过无服务器 API 部署来部署的模型,在从模型的详细信息页中选择“部署”后,会立即打开无服务器 API 部署向导。
选择“具有 Azure AI 内容安全的无服务器 API (预览版)”,打开无服务器 API 部署向导。
选择要在其中部署模型的项目。 若要使用无服务器 API 模型部署产品/服务,项目必须属于支持对特定模型进行无服务器部署的区域 之一。
如果看到注释“你已拥有此项目的 Azure 市场订阅”,则无需创建订阅,因为你已经拥有订阅 。 可以继续将模型部署到无服务器 API 终结点 。
在部署向导中,选择“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']"
将模型部署到无服务器 API 终结点
为非 Microsoft 模型创建订阅后,可将关联的模型部署到无服务器 API 终结点。 对于 Microsoft 模型(如 Phi-3 模型),无需创建订阅。
通过无服务器 API 终结点,可以将模型作为 API 使用,你无需将它们托管在自己的订阅上,同时又能保持组织所需的企业安全性和合规性。 此部署选项不需要来自订阅的配额。
在本部分中,创建一个名为“meta-llama3-8b-qwerty”的终结点 。
创建无服务器终结点
若要部署不需要订阅模型产品/服务的 Microsoft 模型:
选择“部署”,然后选择“具有 Azure AI 内容安全的无服务器 API(预览版)”以打开部署向导 。
选择要在其中部署模型的项目。 请注意,并非所有区域都受支持。
或者,对于需要模型订阅的非 Microsoft 模型,如果你刚在上一部分中将项目订阅到了模型产品/服务,请继续选择“部署” 。 或者,选择“继续部署”(如果部署向导显示备注“你已拥有此项目的 Azure 市场订阅”) 。
为部署命名。 此名称将成为部署 API URL 的一部分。 此 URL 必须在每个 Azure 区域中唯一。
提示
默认情况下,“内容筛选器(预览)”选项处于启用状态。 请保留该服务的默认设置,以检测有害内容,例如仇恨、自残、性和暴力内容。 有关内容筛选(预览版)的详细信息,请参阅 Azure AI Studio 中的内容筛选 。
选择“部署”。 部署准备就绪后,你将被重定向到“部署”页面。
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",
随时可以查看部署到项目的终结点:
转到您的项目。
在“我的资产 ”部分中,选择“模型 + 终结点 ”。
将显示无服务器 API 终结点。
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 门户 时,默认情况下,资源组上不会显示无服务器 API 终结点。 使用“显示隐藏的类型”选项可将其显示在资源组上 。
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)
此时,终结点可供使用。
如果需要从不同的项目或中心使用此部署,或者计划使用提示流生成智能应用程序,则需要创建与无服务器 API 部署的连接。 若要了解如何在新项目或中心配置现有无服务器 API 终结点,请参阅使用来自不同项目或提示流的已部署无服务器 API 终结点 。
提示
如果在部署部署的同一项目或中心内使用提示流,则仍然需要创建连接。
使用无服务器 API 终结点
通过 Azure 机器学习和 Azure AI Studio 部署在无服务器 API 终结点中的模型支持 Azure AI 模型推理 API ,该 API 公开一组针对基础模型的通用功能,供开发人员用来以统一且一致的方式使用来自一组不同模型的预测。
详细了解此 API 的功能 以及如何在生成应用程序时使用它 。
网络隔离
部署为无服务器 API 的模型终结点将遵循具有部署所在的项目的 AI Studio 中心的公用网络访问 (PNA) 标志设置。 若要保护 MaaS 终结点,请在 AI Studio 中心上禁用 PNA 标志。 可以使用中心的专用终结点来保护从客户端到终结点的入站通信。
若要为 Azure AI Studio 中心设置 PNA 标志,请执行以下操作:
转到 Azure 门户 。
搜索中心所属的资源组,并在针对此资源组列出的资源中选择“Azure AI 中心” 。
在中心“概述”页面上的左侧菜单中,选择“设置”>“网络” 。
在“公共访问 ”选项卡下,可以配置公用网络访问标志的设置。
保存所做更改。 你所做的更改最多可能需要五分钟才能传播。
删除终结点和订阅
可以删除模型订阅和终结点。 删除模型订阅会使任何关联的终结点变得不正常且无法使用 。
若要删除无服务器 API 终结点,请执行以下操作:
转到 Azure AI Studio 。
转到您的项目。
在“我的资产 ”部分中,选择“模型 + 终结点 ”。
打开要删除的部署。
选择“删除”。
若要删除关联的模型订阅,请执行以下操作:
转到 Azure 门户
导航到项目所属的资源组。
在“类型”筛选器中选择“SaaS” 。
选择要删除的订阅。
选择“删除”。
若要删除无服务器 API 终结点,请执行以下操作:
az ml serverless-endpoint delete \
--name "meta-llama3-8b-qwerty"
若要删除关联的模型订阅,请执行以下操作:
az ml marketplace-subscription delete \
--name "Meta-Llama-3-8B-Instruct"
若要删除无服务器 API 终结点,请执行以下操作:
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>
部署为无服务器 API 终结点的模型的成本和配额注意事项
配额是按部署管理的。 每个部署的速率限制为每分钟 200,000 个令牌和每分钟 1,000 个 API 请求。 但是,我们目前的限制为每个项目每个模型一个部署。 如果当前速率限制不能满足你的方案,请联系 Microsoft Azure 支持部门。
Microsoft 模型的成本
将 Microsoft 模型(如 Phi-3 模型)部署为无服务器 API 终结点时,可在部署向导的“定价和条款”选项卡上找到定价信息 。
非 Microsoft 模型的成本
部署为无服务器 API 终结点的非 Microsoft 模型通过 Azure 市场提供,并与 Azure AI Studio 集成以供使用。 部署或微调这些模型时,可找到 Azure 市场定价。
每次项目从 Azure 市场订阅给定产品/服务时,都会创建一个新资源来跟踪与其消耗相关的成本。 同一资源用于跟踪与推理和微调相关的成本。但是,可以使用多个计量器来独立跟踪每个方案。
有关如何跟踪成本的详细信息,请参阅监视通过 Azure 市场提供的模型的成本 。
订阅模型产品/服务所需的权限
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Studio 中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 订阅的“所有者”、“参与者”或“Azure AI 开发人员”角色。 或者,可以为帐户分配具有以下权限的自定义角色:
有关权限详细信息,请参阅 Azure AI Studio 中基于角色的访问控制 。
相关内容