微调模型后,可以部署模型,并在自己的应用程序中使用它。
部署模型时,你将使模型可用于推理,这会产生每小时托管费用。 但是,经过微调的模型可以免费存储在 Azure AI Foundry 中,直到您准备好使用它们。
Azure OpenAI 为托管结构上的优化模型提供了部署类型的选择,这些模型适合不同的业务和使用模式: 标准、 全局标准 (预览版)和 预配吞吐量 (预览版)。 详细了解 优化模型的部署类型 以及 所有部署类型的概念。
部署优化后的模型
若要部署自定义模型,请选择要部署的自定义模型,然后选择“ 部署”。
此时会打开“部署模型”对话框。 在该对话框中,输入部署名称,然后选择“创建”,开始部署自定义模型。
可在 Azure AI Foundry 门户的“部署”窗格中监视部署进度。
UI 不支持跨区域部署,而 Python SDK 或 REST 支持。
import json
import os
import requests
token = os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name = "gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-21"}
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
| 变量 |
Definition |
| 代币 |
可通过多种方式生成授权令牌。 初始测试的最简单方法是从 Azure 门户启动 Cloud Shell。 然后运行 az account get-access-token。 可以将此令牌用作 API 测试的临时授权令牌。 建议将其存储在新的环境变量中。 |
| 套餐 |
关联的 Azure OpenAI 资源的订阅 ID。 |
| resource_group |
Azure OpenAI 资源的资源组名称。 |
| resource_name |
Azure OpenAI 资源名称。 |
| model_deployment_name |
新微调模型部署的自定义名称。 这是在进行聊天补全调用时将在代码中引用的名称。 |
| fine_tuned_model |
请从上一步的微调作业结果中检索此值。 该字符串类似于 gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83。 需要将该值添加到 deploy_data json。 或者,也可以通过传递将以 ftchkpt-e559c011ecc04fc68eaa339d8227d02d 格式显示的检查点 ID 来部署检查点 |
跨区域部署
微调支持将微调后的模型部署到与模型最初进行微调时所在的区域不同的区域。 还可以部署到其他订阅/区域。
唯一的限制是新区域还必须支持微调,并且在部署交叉订阅时为部署生成授权令牌的帐户必须有权访问源订阅和目标订阅。
下面是一个示例,说明了如何将已在一个订阅/区域中微调的模型部署到另一个订阅/区域。
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<DESTINATION_SUBSCRIPTION_ID>"
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"
source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"
source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'
model_deployment_name = "gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-21"}
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0125.ft-0ab3f80e4f2242929258fff45b56a9ce
"version": "1",
"source": source
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
若要在同一订阅但不同区域之间进行部署,只需让源变量和目标变量的订阅和资源组相同,并且仅源资源名称和目标资源名称需要独一无二。
跨租户部署
用 az account get-access-token --tenant 生成访问令牌的帐户应具有对源和目标 Azure OpenAI 资源的认知服务 OpenAI 参与者权限。 需要生成两个不同的令牌,一个用于源租户,一个用于目标租户。
import requests
subscription = "DESTINATION-SUBSCRIPTION-ID"
resource_group = "DESTINATION-RESOURCE-GROUP"
resource_name = "DESTINATION-AZURE-OPENAI-RESOURCE-NAME"
model_deployment_name = "DESTINATION-MODEL-DEPLOYMENT-NAME"
fine_tuned_model = "gpt-4o-mini-2024-07-18.ft-f8838e7c6d4a4cbe882a002815758510" #source fine-tuned model id example id provided
source_subscription_id = "SOURCE-SUBSCRIPTION-ID"
source_resource_group = "SOURCE-RESOURCE-GROUP"
source_account = "SOURCE-AZURE-OPENAI-RESOURCE-NAME"
dest_token = "DESTINATION-ACCESS-TOKEN" # az account get-access-token --tenant DESTINATION-TENANT-ID
source_token = "SOURCE-ACCESS-TOKEN" # az account get-access-token --tenant SOURCE-TENANT-ID
headers = {
"Authorization": f"Bearer {dest_token}",
"x-ms-authorization-auxiliary": f"Bearer {source_token}",
"Content-Type": "application/json"
}
url = f"https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}?api-version=2024-10-01"
payload = {
"sku": {
"name": "standard",
"capacity": 1
},
"properties": {
"model": {
"format": "OpenAI",
"name": fine_tuned_model,
"version": "1",
"sourceAccount": f"/subscriptions/{source_subscription_id}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_account}"
}
}
}
response = requests.put(url, headers=headers, json=payload)
# Check response
print(f"Status Code: {response.status_code}")
print(f"Response: {response.json()}")
以下示例演示如何使用 REST API 为自定义模型创建模型部署。 REST API 为自定义模型的部署生成名称。
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
| 变量 |
Definition |
| 代币 |
可通过多种方式生成授权令牌。 初始测试的最简单方法是从 Azure 门户启动 Cloud Shell。 然后运行 az account get-access-token。 可以将此令牌用作 API 测试的临时授权令牌。 建议将其存储在新的环境变量中。 |
| 套餐 |
关联的 Azure OpenAI 资源的订阅 ID。 |
| resource_group |
Azure OpenAI 资源的资源组名称。 |
| resource_name |
Azure OpenAI 资源名称。 |
| model_deployment_name |
新微调模型部署的自定义名称。 这是在进行聊天补全调用时将在代码中引用的名称。 |
| fine_tuned_model |
请从上一步的微调作业结果中检索此值。 该字符串类似于 gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83。 需要将该值添加到 deploy_data json。 或者,也可以通过传递将以 ftchkpt-e559c011ecc04fc68eaa339d8227d02d 格式显示的检查点 ID 来部署检查点 |
跨区域部署
微调支持将微调后的模型部署到与模型最初进行微调时所在的区域不同的区域。 还可以部署到其他订阅/区域。
唯一的限制是新区域还必须支持微调,并且在部署交叉订阅时为部署生成授权令牌的帐户必须有权访问源订阅和目标订阅。
下面是一个示例,说明了如何将已在一个订阅/区域中微调的模型部署到另一个订阅/区域。
curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1",
"source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}"
}
}
}'
若要在同一订阅但不同区域之间进行部署,只需让源变量和目标变量的订阅和资源组相同,并且仅源资源名称和目标资源名称需要独一无二。
跨租户部署
用 az account get-access-token --tenant 生成访问令牌的帐户应具有对源和目标 Azure OpenAI 资源的认知服务 OpenAI 参与者权限。 需要生成两个不同的令牌,一个用于源租户,一个用于目标租户。
curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-01" \
-H "Authorization: Bearer <DESTINATION TOKEN>" \
-H "x-ms-authorization-auxiliary: Bearer <SOURCE TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1",
"sourceAccount": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}"
}
}
}'
以下示例演示如何使用 Azure CLI 部署自定义模型。 使用 Azure CLI 时,必须为自定义模型的部署指定名称。 有关使用 Azure CLI 部署自定义模型的详细信息,请参阅 az cognitiveservices account deployment。
若要在控制台窗口中运行此 Azure CLI 命令,必须将以下 <>占位符 替换为自定义模型的相应值:
| Placeholder |
Value |
|
<YOUR_AZURE_SUBSCRIPTION> |
Azure 订阅的名称或 ID。 |
|
<YOUR_RESOURCE_GROUP> |
Azure 资源组的名称。 |
|
<YOUR_RESOURCE_NAME> |
Azure OpenAI 资源的名称。 |
|
<你的部署名称> |
用于模型部署的名称。 |
|
<YOUR_FINE_TUNED_MODEL_ID> |
自定义模型的名称。 |
az cognitiveservices account deployment create
--resource-group <YOUR_RESOURCE_GROUP>
--name <YOUR_RESOURCE_NAME>
--deployment-name <YOUR_DEPLOYMENT_NAME>
--model-name <YOUR_FINE_TUNED_MODEL_ID>
--model-version "1"
--model-format OpenAI
--sku-capacity "1"
--sku-name "Standard"
Important
在部署自定义模型之后,如果部署处于非活动状态的时间超过十五 (15) 天,则会删除部署。 如果模型是在超过十五 (15) 天前部署的且在连续 15 天内无补全或聊天补全调用,则自定义模型的部署处于“非活动”状态。
删除非活动状态的部署时,不会删除或影响基础自定义模型,并且可以随时重新部署自定义模型。
如 Azure AI Foundry 模型中的 Azure OpenAI 定价中所述,所部署的每个自定义(微调)模型都会产生每小时托管成本,而无论是否对模型进行补全或聊天补全调用。 若要详细了解如何使用 Azure OpenAI 规划和管理成本,请参阅 计划管理 Azure OpenAI 成本的指南。
使用部署的微调模型
部署自定义模型后,可像使用任何其他已部署的模型一样使用它。 可以使用 Azure AI Foundry 门户中的 Playgrounds 来试验新部署。 可以继续对自定义模型使用相同的参数,例如 temperature 和 max_tokens,就像对其他已部署的模型一样。
import os
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-02-01"
)
response = client.chat.completions.create(
model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
{"role": "user", "content": "Do other Azure services support this too?"}
]
)
print(response.choices[0].message.content)
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure services support this too?"}]}'
提示缓存
Azure OpenAI 微调对一组精选的模型支持提示缓存。 通过使用提示缓存,可以减少提示开头具有相同内容的较长提示的总体请求延迟和成本。 若要了解有关提示缓存的详细信息,请参阅提示缓存入门。
部署类型
Azure OpenAI 微调支持以下部署类型。
标准
标准部署 提供按令牌付费计费模型,其数据驻留仅限于已部署区域。
| Models |
美国东部 2 |
美国中北部 |
瑞典中部 |
瑞士西部 |
| o4-mini |
✅ |
|
✅ |
|
| GPT-4.1 |
|
✅ |
✅ |
|
| GPT-4.1-mini |
|
✅ |
✅ |
|
| GPT-4.1-nano |
|
✅ |
✅ |
|
| GPT-4o |
✅ |
|
✅ |
|
| GPT-4o-mini |
|
✅ |
✅ |
|
| GPT-35-Turbo (1106) |
✅ |
✅ |
✅ |
✅ |
| GPT-35-Turbo (0125) |
✅ |
✅ |
✅ |
✅ |
全局标准
全球标准 微调部署可 节省成本,但自定义模型权重可能会暂时存储在 Azure OpenAI 资源的地理位置之外。
所有 Azure OpenAI 区域均提供以下模型的全球标准部署:
- o4-mini
- GPT-4.1
- GPT-4.1-mini
- GPT-4.1-nano
- GPT-4o
- GPT-4o-mini
开发人员层
开发人员 优化部署提供与 全球标准 类似的体验,无需每小时托管费用,但不提供可用性服务级别协议(SLA)。 开发人员部署设计用于模型候选评估,而不是用于生产用途。
开发人员可以在所有 Azure OpenAI 区域部署这些模型:
- GPT-4.1
- GPT-4.1-mini
- GPT-4.1-nano
预配吞吐量
| Models |
美国中北部 |
瑞典中部 |
| GPT-4.1 |
|
✅ |
| GPT-4o |
✅ |
✅ |
| GPT-4o-mini |
✅ |
✅ |
预配的吞吐量 微调部署为延迟敏感代理和应用程序提供 可预测的性能 。 它们使用与基本模型相同的区域预配吞吐量(PTU)容量,因此,如果已有区域 PTU 配额,则可以在支持区域中部署微调的模型。
清理部署
若要删除部署,请使用 部署 - 删除 REST API 并将 HTTP DELETE 发送到部署资源。 与创建部署一样,必须包含以下参数:
- Azure 订阅 ID
- Azure 资源组名称
- Azure OpenAI 资源名称
- 要删除的部署的名称
下面是用于删除部署的 REST API 示例:
curl -X DELETE "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>"
还可以在 Azure AI Foundry 门户中删除部署,或使用 Azure CLI。
后续步骤