你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure AI Foundry 中通过无服务器 API 部署来微调模型

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

了解如何在 Azure AI Foundry 中使用无服务器 API 部署来部署微调的模型。 本综合指南介绍如何微调特定数据集的大型语言模型(LLM),并使用无服务器基础结构部署它们,从而提高性能、成本效益、降低延迟和定制输出。

成本效益:由于即用即付定价,Azure AI Foundry 的微调可能更具成本效益,尤其是大规模部署。

模型多样性:Azure AI Foundry 的无服务器 API 部署微调为专有模型和开源模型提供支持,为用户提供了选择最适合其需求的模型的灵活性,而无需限制为单一类型。

自定义和控制:Azure AI Foundry 为微调过程提供更大的自定义和控制,使用户能够更准确地根据自己的特定要求定制模型。

本文介绍如何微调在 Azure AI Foundry 中使用无服务器 API 部署部署的模型。

先决条件

  • 具有有效付款方式的 Azure 订阅。 免费或试用 Azure 订阅不起作用。 如果没有 Azure 订阅,请先创建一个付费的 Azure 帐户

  • Azure 门户的访问权限。

  • 一个 Azure AI Foundry 项目

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure AI Foundry 门户中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 订阅的“所有者”或“参与者”角色。 有关权限的详细信息,请参阅 Azure AI Foundry 门户中基于角色的访问控制

验证订阅提供程序的注册

验证订阅是否已注册到 Microsoft.Network 资源提供程序。

  1. 登录到 Azure 门户
  2. 选择要使用的订阅。
  3. 在边栏菜单中的 “设置” 下,选择 “资源提供程序”。
  4. 选择“Microsoft.Network”,然后选择“注册”(如果未注册)。

查找支持微调的模型

AI Foundry 模型目录为多种类型的模型(包括聊天补全和文本生成)提供微调支持。 有关支持微调的模型和区域的列表,请参阅 无服务器 API 中模型的区域可用性

仅当用户的 Azure 订阅属于模型提供商提供该产品/服务的地区的某个计费帐户时,才可使用微调任务。 如果该产品/服务在相关区域中提供,则用户必须在可部署或微调该模型(如果适用)的 Azure 区域拥有一个项目资源。

还可以转到 Azure AI Foundry 门户,查看包含微调支持的所有模型:

  1. 登录到 Azure AI Foundry

  2. 如果你尚未进入项目,请选择它。

  3. 导航到模型目录。

  4. 选择微调任务筛选器。

    模型目录微调筛选器选项的屏幕截图。

  5. 选择“所有”或选择特定任务。

准备数据进行微调

准备训练和验证数据以微调模型。 训练和验证数据由输入和输出示例组成,这些示例表示你希望模型如何执行。

确保所有训练示例遵循预期格式以进行推理。 若要有效地优化模型,请通过维护数据平衡(包括各种方案)并定期优化训练数据,以符合实际预期来确保不同的数据集。 这些操作最终会使模型的响应更加准确和均衡。

小窍门

不同的模型类型需要采用不同格式的训练数据。

示例文件格式

支持的文件类型为 JSON 行(JSONL)。 文件将上传到默认数据存储,并在项目中可用。

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

使用微调模型向导

Azure AI Foundry 门户提供了一个自定义模型向导,因此你可以以交互方式为 Azure 资源创建和训练微调的模型。

选择基础模型

  1. 从边栏菜单中选择 “微调 ”,然后选择“ + 微调模型”。
  2. “基本模型”下的列表中选择要微调的模型,然后选择“ 下一步”。

选择训练数据

下一步是选择已准备好的现有训练数据或上传已准备好的新训练数据,以便在自定义模型时使用。 “训练数据”窗格显示了任何现有的和以前上传的数据集,并提供了用于上传新训练数据的选项

选择 “+ 添加训练数据”。

  • 如果训练数据已上传到服务,请选择 此资源上的现有文件
    • 从显示的下拉列表中选择文件。
  • 若要上传新的训练数据,请使用以下选项之一:
    • 选择“ 上传文件 ”以从本地文件上传训练数据。
    • 选择 Azure Blob 或其他共享 Web 位置 ,从 Azure Blob 或其他共享 Web 位置导入训练数据。
  • 要使用现成的数据集进行快速微调,请从 “选择数据”下的列表中选择。

对于大型数据文件,建议从 Azure Blob 存储导入数据。 有关 Azure Blob 存储的详细信息,请参阅 什么是 Azure Blob 存储?

选择验证数据

下一步提供配置模型以在训练过程中使用验证数据的选项。 如果不想使用验证数据,可以选择 “提交 ”以继续转到模型的高级选项。 否则,如果你有验证数据集,可以选择已准备好的现有验证数据或上传已准备好的新验证数据,以便在自定义模型时使用。

选择 “+ 添加验证数据”。 “验证数据”窗格显示了任何现有的及以前上传的训练和验证数据集,并提供了用于上传新验证数据的选项

  • 如果验证数据已上传到服务,请选择 此资源上的现有文件
    • 从“验证数据”窗格中显示的列表中选择文件
  • 若要上传新的验证数据,请使用以下选项之一:
    • 选择 “上传文件 ”,从本地文件上传验证数据。
    • 选择 Azure Blob 或其他共享 Web 位置 ,从 Azure Blob 或其他共享 Web 位置导入验证数据。

对于大型数据文件,建议从 Azure Blob 存储导入数据。 大型文件在通过多部分表单上传时可能会变得不稳定,因为请求是原子化的,无法重试或继续。

注释

  • 与训练数据文件类似,验证数据文件的格式必须设置为 JSONL 文件,采用 UTF-8 编码并带有字节顺序标记 (BOM)。 文件大小必须小于 512 MB。

配置任务参数

微调模型向导显示用于在“任务参数”窗格上训练微调模型的参数。 提供下列参数:

名称 类型 说明
批大小 (1-32) 整数 要用于训练的批大小。 批大小表示用于训练单个前向和后向传递的训练示例的数量。 一般情况下,较大的批大小往往更适合较大的数据集。 此属性的默认值和最大值特定于基础模型。 批大小越大意味着模型参数的更新频率越低,但方差越小。
学习速率乘数 (0.0-10.0) 数字 用于训练的学习率乘数。 微调学习率是用于预训练的原始学习率乘以此值后的结果。 较大的学习率通常在较大的批大小中表现更好。 建议试验 0.02 到 0.2 范围内的值,以查看产生最佳结果的值。 较小的学习速率可能有助于避免过度拟合。
纪元数(1-10) 整数 训练模型的时期数。 一个时期是指训练数据集的一个完整周期。

选择“默认”以便对微调作业使用默认值,或选择“自定义”以显示并编辑超参数值。 选择默认值后,我们会根据训练数据通过算法确定正确的值。

配置高级选项后,选择“ 提交”。

检查自定义模型的状态

“微调”选项卡显示有关自定义模型的信息。 该选项卡包含有关自定义模型优化作业的状态和作业 ID 的信息。 作业完成后,选项卡会显示结果文件的文件 ID。 可能需要选择“刷新”才能看到模型训练作业的更新状态。

正在运行的项目仪表板的屏幕截图。

启动微调作业后,可能需要一些时间才能完成。 你的作业可能排在系统上的其他作业后面。 训练模型可能需要几分钟或几小时,具体取决于模型和数据集大小。 下面是可在“ 模型 ”选项卡上执行的一些任务:

  • 在“自定义模型”选项卡的“状态”列中检查自定义模型的微调作业的状态。
  • 在模型名称列中,选择模型的名称以查看有关自定义模型的详细信息。 可以查看微调作业的状态、训练结果、训练事件和作业中使用的超参数。
  • 选择“刷新”以更新页面信息

微调详细信息仪表板的屏幕截图。

支持微调的企业方案

支持多种企业方案,实现无服务器 API 部署微调。 下表概述了用户存储网络和身份验证支持的配置,以确保企业方案中的顺利运行:

注释

  • 可以通过 AI Foundry 更改数据连接身份验证,方法是选择存储数据集的数据存储连接,并导航到 访问详细信息>身份验证方法 设置。
  • 可以在“Azure 存储设置配置页面中更改存储身份验证以允许存储帐户密钥访问
  • 可以在“Azure 存储”>“网络”页中更改存储网络。
存储网络 存储认证 数据连接身份验证 支持
公用网络访问 = 已启用 帐户密钥已启用 SAS/帐户密钥 是,UX 和 SDK
公用网络访问 = 已启用 帐户密钥已禁用 采用 Entra 技术的无需凭据身份验证 是,UX 和 SDK

注意:对于 UX,可能需要为存储帐户上的用户 ID 添加存储 Blob 数据读取者或存储 Blob 数据参与者,或者将连接的身份验证更改为使用帐户密钥/SAS 令牌
已从所选虚拟网络和 IP 地址启用 帐户密钥已启用 帐户密钥 是,UX 和 SDK

注意: 对于 UX,运行浏览器的计算的 IP 必须位于所选列表中
已从所选虚拟网络和 IP 地址启用 帐户密钥已启用 SAS 是,UX 和 SDK

注意: 对于 UX,运行浏览器的计算的 IP 必须位于所选列表中
已从所选虚拟网络和 IP 地址启用 帐户密钥已禁用 基于 Entra 的身份验证(无需凭据) 是,UX 和 SDK。

注意:对于 UX,可能需要为存储帐户上的用户 ID 添加存储 Blob 数据读取者或存储 Blob 数据参与者,或者将连接的身份验证更改为使用帐户密钥/SAS 令牌。 此外,请确保运行浏览器的计算的 IP 必须位于所选列表中
公用网络访问 = 已禁用 帐户密钥已启用 SAS/帐户密钥 是,UX 和 SDK。

注意: 若要使 UX 数据的上传和提交正常工作,该工作区需要从具有适当存储访问权限的虚拟网络内进行访问
公用网络访问 = 已禁用 帐户密钥已禁用 基于 Entra 的身份验证(无需凭据) 是,UX 和 SDK。

注意:若要使 UX 数据上传和提交正常工作,需要从对存储具有适当访问权限的虚拟网络中访问工作区

上述方案也应该在托管虚拟网络工作区中工作。 若要了解如何设置托管虚拟网络 AI Foundry 中心,请参阅 如何为 Azure AI Foundry 中心配置托管网络

使用客户管理的密钥 (CMK) 不是支持无服务器 API 部署微调的企业方案。

在工作区和存储上对唯一网络设置进行微调所涉及的问题通常由网络设置问题所引发。


部署微调模型

微调作业成功后,可以从 “微调 ”选项卡部署自定义模型。必须部署自定义模型,使其可用于完成调用。

重要

部署自定义模型并完成终结点后,请记住清理任何非活动终结点。 删除非活动状态的部署时,不会删除或影响基础自定义模型,并且可以随时重新部署自定义模型。 如 Azure AI Foundry 定价中所述,所部署的每个自定义(微调)模型都会产生每小时托管成本,而无论是否对模型进行补全或聊天补全调用。

若要详细了解如何使用 Azure AI Foundry 规划和管理成本,请参阅 Azure AI Foundry 服务规划和管理成本中的指南。

注释

自定义模型只允许一个部署。 如果选择已部署的自定义模型,会显示错误消息。 若要部署自定义模型,请选择要部署的自定义模型,然后选择“部署模型”。

此时会打开“部署模型”对话框。 在对话框中,输入 部署名称 ,然后选择“ 部署 ”以启动自定义模型的部署。

还可以通过“ 模型 + 终结点 ”选项卡部署微调模型,方法是选择“ 部署模型 ”按钮,然后从下拉列表中选择“ 部署微调模型

微调管理部署仪表板的屏幕截图。

接下来,选择要部署的微调模型,然后选择“ 部署”。

跨区域部署

微调支持将微调后的模型部署到与模型最初进行微调时所在的区域不同的区域。 您还可以部署到不同的订阅或区域。

唯一的限制是,新区域还必须支持微调,在部署跨订阅时,为部署生成授权令牌的帐户必须同时有权访问源订阅和目标订阅。

可以通过 Python 完成跨订阅或区域部署。

使用已部署的自定义模型

部署自定义模型后,可像使用任何其他已部署的模型一样使用它。 可使用 Azure AI Foundry 门户中的“操场”来试验新部署。 可以继续将相同的参数用于自定义模型,例如温度和max_tokens,就像与其他已部署模型一样。

清理已微调的模型

可以从 Azure AI Foundry 中的微调模型列表或模型详细信息页中删除已微调模型。 若要从“微调”页面删除已微调的模型,

  1. 从 Azure AI Foundry 项目中的边栏菜单中选择 微调
  2. 选择“删除”按钮以删除已微调的模型。

注释

如果自定义模型具有现有部署,则无法删除它。 必须先删除模型部署,然后才能删除自定义模型。

创建客户端以使用模型

以下部分将指导你了解如何在 python 中微调模型。 若要查找此代码的笔记本示例,请参阅 通过模型即服务对 LLM 进行微调

  1. 安装依赖项以开始微调模型。
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. 创建客户端以使用模型。 以下代码使用存储在环境变量中的终结点 URL 和密钥。 将SUBSCRIPTION_ID<、RESOURCE_GROUP_NAME和WORKSPACE_NAME替换为>自己的值。<><>
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()

try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group_name="<RESOURCE_GROUP_NAME>",
        workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
    )

# The models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")

# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id

查找支持微调的模型

AI Foundry 模型目录为多种类型的模型(包括聊天补全和文本生成)提供微调支持。 有关支持微调的模型和区域的列表,请参阅 无服务器 API 中模型的区域可用性

仅当用户的 Azure 订阅属于模型提供商提供该产品/服务的地区的某个计费帐户时,才可使用微调任务。 如果该产品/服务在相关区域中提供,则用户必须在可部署或微调该模型(如果适用)的 Azure 区域拥有一个项目资源。

此示例使用 Phi-4-mini-instruct 模型。 在此代码片段中,模型 ID 属性作为输入传递到微调作业中。 在 Azure AI Foundry 模型目录的“模型详细信息”页中,此字段也可用作 “资产 ID ”字段。

model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
    "\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
        model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
    )
)

准备数据进行微调

准备训练和验证数据以微调模型。 训练和验证数据由输入和输出示例组成,这些示例表示你希望模型如何执行。

确保所有训练示例遵循预期格式以进行推理。 若要有效地优化模型,请通过维护数据平衡(包括各种方案)并定期优化训练数据,以符合实际预期来确保不同的数据集。 这些操作最终会使模型的响应更加准确和均衡。

小窍门

不同的模型类型需要不同格式的训练数据。

示例文件格式

支持的文件类型为 JSON 行(JSONL)。 文件将上传到默认数据存储,并在项目中可用。

    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
    {"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

创建训练数据输入

此代码片段演示如何定义训练数据集。

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data

dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
    train_data_asset = workspace_ml_client.data.get(
        train_dataset_name, version=dataset_version
    )
    print(f"Dataset {train_dataset_name} already exists")
except:
    print("creating dataset")
    train_data = Data(
        path=f"./train.jsonl",
        type=AssetTypes.URI_FILE,
        description="Training dataset",
        name=train_dataset_name,
        version="1",
    )
    train_data_asset = workspace_ml_client.data.create_or_update(train_data)

创建验证数据

下一步提供配置模型以在训练过程中使用验证数据的选项。 如果不想使用验证数据,可以选择跳过此步骤以继续下一部分。 否则,如果你有验证数据集,可以选择已准备好的现有验证数据或上传已准备好的新验证数据,以便在自定义模型时使用。

from azure.ai.ml.entities import Data

dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
    validation_data_asset = workspace_ml_client.data.get(
        validation_dataset_name, version=dataset_version
    )
    print(f"Dataset {validation_dataset_name} already exists")
except:
    print("creating dataset")
    validation_data = Data(
        path=f"./validation.jsonl",
        type=AssetTypes.URI_FILE,
        description="Validation dataset",
        name=validation_dataset_name,
        version="1",
    )
    validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)

为合作伙伴模型创建市场订阅

所有非Microsoft模型都需要此步骤。 Microsoft模型的一个示例是 Phi 系列模型。

model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)

normalized_model_name = model_name.replace(".", "-")

from azure.ai.ml.entities import MarketplaceSubscription


subscription_name = f"{normalized_model_name}-sub"

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id_to_subscribe,
    name=subscription_name,
)

# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
    marketplace_subscription = (
        workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
            marketplace_subscription
        ).result()
    )
except Exception as ex:
    print(ex)

使用模型和数据作为输入来提交微调作业

若要微调模型,需要以下参数集。

  • model:微调的基本模型
  • training_data:用于微调基本模型的训练数据
  • validation_data:用于微调基本模型的验证数据
  • task:要执行的微调任务,例如用于聊天补全微调作业的 CHAT_COMPLETION
  • outputs:输出已注册的模型名称

以下参数是可选的:

  • hyperparameters:在运行时控制微调行为的参数
  • name:微调任务名称
  • experiment_name:微调作业的试验名称
  • display_name:微调任务显示名称
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid

guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"

finetuning_job = create_finetuning_job(
    task=FineTuningTaskType.CHAT_COMPLETION,
    training_data=train_data_asset.id,
    validation_data=validation_data_asset.id,
    hyperparameters={
        "per_device_train_batch_size": "1",
        "learning_rate": "0.00002",
        "num_train_epochs": "1",
    },
    model=model_to_finetune.id,
    display_name=display_name,
    name=name,
    experiment_name=experiment_name,
    tags={"foo_tag": "bar"},
    properties={"my_property": "my_value"},
    output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)

status = workspace_ml_client.jobs.get(created_job.name).status

import time

while True:
    status = workspace_ml_client.jobs.get(created_job.name).status
    print(f"Current job status: {status}")
    if status in ["Failed", "Completed", "Canceled"]:
        print("Job has finished with status: {0}".format(status))
        break
    else:
        print("Job is still running. Checking again in 30 seconds.")
        time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name

部署微调模型

微调作业成功后,可以部署自定义模型。

重要

部署自定义模型并完成终结点后,请记住清理任何非活动终结点。 删除非活动状态的部署时,不会删除或影响基础自定义模型,并且可以随时重新部署自定义模型。 如 Azure AI Foundry 定价中所述,所部署的每个自定义(微调)模型都会产生每小时托管成本,而无论是否对模型进行补全或聊天补全调用。

若要详细了解如何使用 Azure AI Foundry 规划和管理成本,请参阅 Azure AI Foundry 中心规划和管理成本的指南。

# Deploy the model as a serverless endpoint

endpoint_name = f"{normalized_model_name}-ft-{short_guid}"  # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"

支持微调的企业方案

支持多种企业方案,实现无服务器 API 部署微调。 下表概述了用户存储网络和身份验证支持的配置,以确保企业方案中的顺利运行:

注释

  • 可以通过 AI Foundry 更改数据连接身份验证,方法是单击存储数据集的数据存储连接,并导航到 “访问详细信息>身份验证方法 ”设置。
  • 可以在“Azure 存储设置配置页面中更改存储身份验证以允许存储帐户密钥访问
  • 可以在“Azure 存储”>“网络”页中更改存储网络。
存储网络 存储认证 数据连接身份验证 支持
公用网络访问 = 已启用 帐户密钥已启用 SAS/帐户密钥 是,UX 和 SDK
公用网络访问 = 已启用 帐户密钥已禁用 基于 Entra 的身份验证(无需凭据) 是,UX 和 SDK

注意:对于 UX,可能需要为存储帐户上的用户 ID 添加存储 Blob 数据读取者或存储 Blob 数据参与者,或者将连接的身份验证更改为使用帐户密钥/SAS 令牌
已从所选虚拟网络和 IP 地址启用 帐户密钥已启用 帐户密钥 是,UX 和 SDK

注意: 对于 UX,运行浏览器的计算的 IP 必须位于所选列表中
已从所选虚拟网络和 IP 地址启用 帐户密钥已启用 SAS 是,UX 和 SDK

注意: 对于 UX,运行浏览器的计算的 IP 必须位于所选列表中
已从所选虚拟网络和 IP 地址启用 帐户密钥已禁用 基于 Entra 的身份验证(无需凭据) 是,UX 和 SDK。

注意: 为了优化用户体验 (UX),您可能需要在存储帐户中为您的用户 ID 添加“存储 Blob 数据读取者”或“存储 Blob 数据贡献者”权限,或者更改连接的身份验证以使用“帐户密钥”或“SAS 令牌”。 此外,请确保运行浏览器的计算的 IP 必须位于所选列表中
公用网络访问 = 已禁用 帐户密钥已启用 SAS/帐户密钥 是,UX 和 SDK。

注意:若要使 UX 数据上传和提交正常工作,需要从对存储具有适当访问权限的虚拟网络中访问工作区
公用网络访问 = 已禁用 帐户密钥已禁用 基于 Entra 的身份验证(无需凭据) 是,UX 和 SDK。

注意:若要使 UX 数据上传和提交正常工作,工作区需要从具有适当存储访问权限的虚拟网络中访问

上述方案也应该在托管虚拟网络工作区中工作。 若要了解如何设置托管虚拟网络 AI Foundry 中心,请参阅 如何为 Azure AI Foundry 中心设置托管网络

使用客户管理的密钥 (CMK) 不是支持无服务器 API 部署微调的企业方案。

在工作区和存储上对唯一网络设置进行微调所涉及的问题通常由网络设置问题所引发。

跨区域部署

微调支持将微调模型部署到与最初微调模型不同的区域。 还可以部署到其他订阅或区域。

唯一的限制是,新区域还必须支持微调,在部署跨订阅时,为部署生成授权令牌的帐户必须同时有权访问源订阅和目标订阅。

可以通过 Python 完成跨订阅或区域部署。


# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()
try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<TARGET_SUBSCRIPTION_ID>",
        resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
        workspace_name="<TARGET_PROJECT_NAME>",
    )

workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
    print(f"Creating endpoint in the region:{workspace_region}")
    serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
    created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
        serverless_endpoint
    ).result()
else:
    raise ValueError(
        f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
    )

使用已部署的自定义模型

部署自定义模型后,可像使用任何其他已部署的模型一样使用它。 可以继续对自定义模型使用相同的参数,例如 temperaturemax_tokens,就像对其他已部署的模型一样。

endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key

import requests

url = f"{endpoint.scoring_uri}/v1/chat/completions"

payload = {
    "max_tokens": 1024,
    "messages": [
        {
            "content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
            "role": "user",
        }
    ],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}

response = requests.post(url, json=payload, headers=headers)

response.json()

清理已微调的模型

完成模型后,请运行以下代码来清理优化后的模型。

workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()

部署为无服务器 API 部署的模型的成本和配额注意事项

配额是按部署管理的。 每个部署的速率限制为每分钟 200,000 个令牌和每分钟 1,000 个 API 请求。 但是,我们目前的限制为每个项目每个模型一个部署。 如果当前速率限制不能满足你的方案,请联系 Microsoft Azure 支持部门。

Microsoft 模型的成本

部署Microsoft模型(如 Phi-3 模型)作为无服务器 API 部署时,可以在部署向导的 “定价和条款 ”选项卡上找到定价信息。

非 Microsoft 模型的成本

部署为无服务器 API 的非微软模型通过 Azure 市场提供,并与 Azure AI Foundry 集成以供使用。 部署或微调这些模型时,可找到 Azure 市场定价。

每次项目从 Azure 市场订阅给定套餐时,都会创建一个新资源来跟踪与其消耗相关的成本。 同一资源用于跟踪与推理和微调相关的成本。但是,可以使用多个计量器来独立跟踪每个方案。

若要详细了解如何跟踪成本,请参阅监视通过 Azure 市场提供的模型的成本

显示对应于不同模型产品/服务及其关联计量的不同资源的屏幕截图。

示例笔记本

可以使用此示例笔记本创建独立的微调作业,以增强模型使用 Samsum 数据集汇总两个人之间的对话的能力。

使用的训练数据是 ultrachat_200k 数据集,它分为四个拆分,适合监督微调 (sft) 和生成排名 (gen)。 笔记本为聊天完成任务使用可用的 Azure AI 模型(如果要使用与笔记本中使用的模型不同的模型,可以替换模型名称)。

笔记本包括设置先决条件、选择要微调的模型、创建训练和验证数据集、配置和提交微调作业,最后,使用微调模型创建无服务器部署,以便进行示例推理。

示例 CLI

此外,可以使用 此示例 CLI 创建独立的微调作业,以增强模型使用数据集汇总两个人之间的对话的能力。

type: finetuning

name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model: 
  path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
  type: mlflow_model
training_data: train.jsonl
validation_data:
  path: validation.jsonl
  type: uri_file
hyperparameters:
  num_train_epochs: "1"
  per_device_train_batch_size: "1"
  learning_rate: "0.00002"
properties:
  my_property: "my_value"
tags:
  foo_tag: "bar"
outputs:
  registered_model:
    name: "Phi-3-mini-4k-instruct-finetuned-model"
    type: mlflow_model 

使用的训练数据与 SDK 笔记本中所示相同。 CLI 为聊天补全任务使用可用的 Azure AI 模型。 如果希望使用与 CLI 示例中的模型不同的模型,可以相应地更新参数,例如 model path

内容筛选

无服务器 API 部署模型受 Azure AI 内容安全保护。 部署到实时终结点时,可以选择退出此功能。

启用 Azure AI 内容安全后,提示和完成都通过一组分类模型,旨在检测和防止输出有害内容。 内容筛选系统会在输入提示和输出补全中检测特定类别的潜在有害内容并对其采取措施。

若要详细了解 Azure AI 内容安全,请参阅 Azure AI Foundry 门户中的内容筛选