通过微调自定义模型

Studio

在本文中

  1. 先决条件
  2. 楷模
  3. 查看 Azure OpenAI Studio 的工作流程
  4. 准备您的训练和验证数据
  5. 使用创建自定义模型向导
  6. 检查自定义模型的状态
  7. 部署自定义模型
  8. 使用已部署的自定义模型
  9. 分析您的定制模型
  10. 清理您的部署、自定义模型和培训文件
  11. 持续微调
  12. 故障排除

zure OpenAI 服务允许您通过使用称为微调的过程来根据您的个人数据集定制我们的模型。此定制步骤可让您通过提供以下内容从服务中获得更多收益:

  • 比直接从即时工程中获得更高质量的结果
  • 能够训练超出模型最大请求上下文限制的示例。
  • 由于提示较短而节省了代币
  • 较低延迟的请求,特别是在使用较小模型时。

与少样本学习相比,微调通过训练超出提示范围的更多示例来改进模型,让您在大量任务上取得更好的结果。由于微调会调整基本模型的权重以提高特定任务的性能,因此您不必在提示中包含尽可能多的示例或说明。这意味着每次 API 调用时发送的文本和处理的令牌更少,从而可能节省成本并改善请求延迟。

我们使用 LoRA(即低秩近似)来微调模型,以降低其复杂性而不显着影响其性能。该方法的工作原理是用较低秩的矩阵来近似原始的高秩矩阵,因此在监督训练阶段仅微调“重要”参数的较小子集,从而使模型更易于管理和高效。对于用户来说,这使得培训比其他技术更快、更实惠。

先决条件

笔记

目前,您必须提交申请才能访问Azure OpenAI服务。要申请访问权限,请填写此表格

楷模

以下模型支持微调:

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)

请参阅模型页面以检查哪些区域当前支持微调。

查看 Azure OpenAI Studio 的工作流程

花点时间回顾一下使用 Azure OpenAI Studio 的微调工作流程:

准备您的训练和验证数据

您的训练数据和验证数据集包含您希望模型如何执行的输入和输出示例。

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

chat completion models

The training and validation data you use must be formatted as a JSON Lines (JSONL) document. For gpt-35-turbo-0613 the fine-tuning dataset must be formatted in the conversational format that is used by the Chat completions API.

If you would like a step-by-step walk-through of fine-tuning a gpt-35-turbo-0613 model please refer to the Azure OpenAI fine-tuning tutorial

Example file format

JSON

{“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?"}]}

babbage-002/davinci-002

您使用的训练和验证数据必须采用 JSON 行 (JSONL) 文档格式,其中每行代表单个提示-完成对。 OpenAI 命令行界面 (CLI) 包括一个数据准备工具,可验证、提供建议并将训练数据重新格式化为 JSONL 文件,以供微调。

JSON

除了 JSONL 格式之外,训练和验证数据文件还必须以 UTF-8 编码并包含字节顺序标记 (BOM)。文件大小必须小于 100 MB。

创建您的训练和验证数据集

设计用于微调的提示和补全不同于设计用于我们任何 GPT-3 基本模型的提示。完成调用的提示通常使用详细说明或少量学习技术,并且包含多个示例。为了进行微调,每个训练示例应包含单个输入提示及其所需的完成输出。您不需要为同一提示提供详细说明或多个完成示例。

训练示例越多越好。训练示例的最小数量为 10,但如此少量的示例通常不足以显着影响模型响应。 OpenAI 指出,最佳实践是拥有至少 50 个高质量的训练示例。然而,完全有可能有一个用例可能需要 1,000 个高质量的训练示例才能成功。

一般来说,数据集大小加倍可以导致模型质量线性提高。但请记住,低质量的示例可能会对性能产生负面影响。如果您在大量内部数据上训练模型,而不首先针对最高质量的示例修剪数据集,您最终可能会得到一个性能比预期差得多的模型。

OpenAI CLI 数据准备工具

OpenAI 的 CLI 数据准备工具是为上一代微调模型开发的,可协助完成许多数据准备步骤。该工具仅适用于与完成 API(如babbage-002和 )配合使用的模型的数据准备davinci-002。该工具会验证、提供建议,并将数据重新格式化为 JSONL 文件,以供微调。

要安装 OpenAI CLI,请运行以下 Python 命令:

此工具接受以下数据格式的文件,如果它们包含提示和完成列/键:

  • 逗号分隔值 (CSV)
  • 制表符分隔值 (TSV)
  • Microsoft Excel 工作簿 (XLSX)
  • JavaScript 对象表示法 (JSON)
  • JSON 行 (JSONL)

在指导您完成实施建议更改的过程后,该工具会重新格式化您的训练数据并将输出保存到 JSONL 文件中,以供微调。

使用创建自定义模型向导

Azure OpenAI Studio 提供创建自定义模型向导,因此你可以以交互方式为 Azure 资源创建和训练微调模型。

  1. 在https://oai.azure.com/打开 Azure OpenAI Studio ,并使用有权访问 Azure OpenAI 资源的凭据登录。在登录工作流程中,选择适当的目录、Azure 订阅和 Azure OpenAI 资源。

  2. 在 Azure OpenAI Studio 中,浏览到“管理”>“模型”窗格,然后选择“创建自定义模型”

创建自定义模型向导将打开。

选择基础型号

创建自定义模型的第一步是选择基本模型。基本模型窗格允许您选择用于自定义模型的基本模型。您的选择会影响模型的性能和成本。

从基本模型类型下拉列表中选择基本模型,然后选择下一步继续。

您可以从以下可用基本模型之一创建自定义模型:

  • babbage-002

  • davinci-002

  • gpt-35-turbo(0613)

  • gpt-35-turbo(1106)

  • 或者,您可以对之前微调过的模型进行微调,格式为 base-model.ft-{jobid}。

有关可微调的基本模型的更多信息,请参阅模型

选择您的训练数据

下一步是选择现有准备的训练数据或上传新准备的训练数据以在自定义模型时使用。训练数据窗格显示任何现有的、之前上传的数据集,还提供上传新训练数据的选项。

对于大型数据文件,我们建议您从 Azure Blob 存储导入。通过多部分表单上传时,大文件可能会变得不稳定,因为请求是原子的并且无法重试或恢复。有关 Azure Blob 存储的详细信息,请参阅什么是 Azure Blob 存储

笔记

训练数据文件必须格式化为 JSONL 文件,并使用字节顺序标记 (BOM) 以 UTF-8 进行编码。文件大小必须小于 512 MB。

从本地文件上传训练数据

您可以使用以下方法之一将新的训练数据集从本地文件上传到服务:

  • 将文件拖放到“训练数据”窗格的客户端区域,然后选择“上传文件”

  • 从“训练数据”窗格的客户端区域中选择“浏览文件” ,从“打开”对话框中选择要上传的文件,然后选择“上传文件”

选择并上传训练数据集后,选择“下一步”继续。

从 Azure Blob 存储导入训练数据

您可以通过提供文件的名称和位置从 Azure Blob 或其他共享 Web 位置导入训练数据集。

输入文件的文件名。

对于“文件位置”,请提供 Azure Blob URL、Azure 存储共享访问签名 (SAS) 或指向可访问的共享 Web 位置的其他链接。

选择并上传训练数据集后,选择“下一步”继续。

  • 选择上传文件将训练数据集导入到服务中。

选择您的验证数据

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

验证数据窗格显示任何现有的、之前上传的训练和验证数据集,并提供可用于上传新验证数据的选项

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

笔记

与训练数据文件类似,验证数据文件必须采用 JSONL 文件格式,并使用字节顺序标记 (BOM) 以 UTF-8 进行编码。文件大小必须小于 100 MB。

从本地文件上传验证数据

您可以使用以下方法之一将新的验证数据集从本地文件上传到服务:

  • 将文件拖放到验证数据窗格的客户端区域,然后选择上传文件

  • 从“验证数据”窗格的客户端区域中选择“浏览文件” ,从“打开”对话框中选择要上传的文件,然后选择“上传文件”

选择并上传验证数据集后,选择“下一步”继续。

从 Azure Blob 存储导入验证数据

您可以通过提供文件的名称和位置从 Azure Blob 或其他共享 Web 位置导入验证数据集。

输入文件的文件名。

对于“文件位置”,请提供 Azure Blob URL、Azure 存储共享访问签名 (SAS) 或指向可访问的共享 Web 位置的其他链接。

选择并上传验证数据集后,选择“下一步”继续。

  • 选择上传文件将训练数据集导入到服务中。

配置高级选项

创建自定义模型向导在高级选项窗格中显示用于训练微调模型的超参数。以下超参数可用:

选择默认以使用微调作业的默认值,或选择高级以显示和编辑超参数值。

高级选项允许您配置以下超参数:

配置高级选项后,选择“下一步”检查您的选择并训练您的微调模型

检查您的选择并训练您的模型

向导的“审阅”窗格显示有关您的配置选择的信息。

如果您准备好训练模型,请选择“开始训练作业”以启动微调作业并返回到“模型”窗格。

检查自定义模型的状态

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

开始微调工作后,可能需要一些时间才能完成。您的作业可能排在系统上其他作业的后面。训练模型可能需要几分钟或几小时,具体取决于模型和数据集大小。

以下是您可以在“模型”窗格中执行的一些任务:

  • 在自定义模型选项卡的状态列中检查自定义模型的微调作业的状态。

  • 模型名称列中,选择模型名称以查看有关自定义模型的更多信息。您可以查看微调作业的状态、训练结果、训练事件以及作业中使用的超参数。

  • 选择下载训练文件以下载用于模型的训练数据。

  • 选择下载结果以下载附加到模型微调作业的结果文件,并分析自定义模型的训练和验证性能。

  • 选择刷新以更新页面上的信息。

部署自定义模型

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

重要的

部署自定义模型后,如果任何时候部署保持非活动状态超过十五 (15) 天,则该部署将被删除。如果定义模型的部署时间超过十五 (15) 天,并且在连续 15 天内没有对其进行任何完成或聊天完成调用,则该模型的部署处于非活动状态。

删除非活动部署不会删除或影响底层的自定义模型,并且可以随时重新部署自定义模型。如Azure OpenAI 服务定价中所述,部署的每个自定义(微调)模型都会产生每小时托管成本,无论是对模型进行完成调用还是聊天完成调用。要了解有关使用 Azure OpenAI 规划和管理成本的更多信息,请参阅规划管理 Azure OpenAI 服务的成本中的指南。

笔记

自定义模型仅允许一次部署。如果您选择已部署的自定义模型,则会显示错误消息

将打开“部署模型”对话框。在对话框中,输入您的部署名称,然后选择创建以开始部署自定义模型。

您可以在 Azure OpenAI Studio 的“部署”窗格中监视部署进度。

跨区域部署

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

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

跨订阅/区域部署可以通过PythonREST完成。

使用已部署的自定义模型

部署自定义模型后,您可以像任何其他已部署模型一样使用它。您可以使用Azure OpenAI Studio中的Playgrounds来试验新部署。您可以继续对自定义模型使用相同的参数,例如和,就像对其他已部署模型一样。对于微调和模型,您将使用 Completions 游乐场和 Completions API。对于微调模型,您将使用聊天游乐场和聊天完成 API。temperaturemax_tokensbabbage-002davinci-002gpt-35-turbo-0613

分析您的定制模型

每个微调作业完成后,Azure OpenAI 都会将一个名为results.csv的结果文件附加到每个微调作业中。您可以使用结果文件来分析自定义模型的训练和验证性能。Azure OpenAI Studio模型窗格上的结果文件 ID 列中列出了每个自定义模型的结果文件的文件 ID。可以使用文件 ID 从Azure OpenAI Studio 的数据文件窗格中识别并下载结果文件。

结果文件是一个 CSV 文件,其中包含标题行和微调作业执行的每个训练步骤的行。结果文件包含以下列:

您还可以在 Azure OpenAI Studio 中以绘图形式查看 results.csv 文件中的数据。选择训练模型的链接,您将看到三个图表:损失、平均标记准确度和标记准确度。如果您提供了验证数据,两个数据集将出现在同一个绘图上。

随着时间的推移,你的损失会减少,而准确性会增加。如果您发现训练数据和验证数据之间存在差异,则可能表明您过度拟合。尝试使用更少的 epoch 或更小的学习率乘数进行训练。

清理您的部署、自定义模型和培训文件

完成自定义模型后,您可以删除部署和模型。如果需要,您还可以删除上传到服务的培训和验证文件。

删除您的模型部署

重要的

部署自定义模型后,如果任何时候部署保持非活动状态超过十五 (15) 天,则该部署将被删除。如果定义模型的部署时间超过十五 (15) 天,并且在连续 15 天内没有对其进行任何完成或聊天完成调用,则该模型的部署处于非活动状态。

删除非活动部署不会删除或影响底层的自定义模型,并且可以随时重新部署自定义模型。如Azure OpenAI 服务定价中所述,部署的每个自定义(微调)模型都会产生每小时托管成本,无论是对模型进行完成调用还是聊天完成调用。要了解有关使用 Azure OpenAI 规划和管理成本的更多信息,请参阅规划管理 Azure OpenAI 服务的成本中的指南。

您可以在 Azure OpenAI Studio 的“部署”窗格中删除自定义模型的部署。选择要删除的部署,然后选择“删除”以删除该部署。

删除您的自定义模型

您可以在Azure OpenAI Studio 的“模型”窗格中删除自定义模型。从自定义模型选项卡中选择要删除的自定义模型,然后选择删除以删除自定义模型。

笔记

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

删除您的训练文件

您可以选择在Azure OpenAI Studio 的“管理” > “数据文件”窗格中删除为训练上传的训练和验证文件,以及训练期间生成的结果文件。选择要删除的文件,然后选择删除以删除该文件。

持续微调

创建微调模型后,您可能希望通过进一步微调继续完善模型。连续微调是选择已经微调的模型作为基础模型并在新的训练示例集上进一步微调的迭代过程。

要对之前微调过的模型执行微调,您可以使用创建自定义模型中所述的相同过程,但您可以指定已经微调过的模型,而不是指定通用基本模型的名称。定制的微调模型看起来像gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

我们还建议包含该suffix参数,以便更轻松地区分微调模型的不同迭代。suffix接受一个字符串,并设置为标识微调模型。 OpenAI Python API 支持最多 18 个字符的字符串,该字符串将添加到您微调的模型名称中。

故障排除

如何启用微调?在 Azure OpenAI Studio 中创建自定义模型呈灰色?

为了成功访问微调,您需要分配认知服务 OpenAI Contributor。即使具有高级服务管理员权限的人仍然需要显式设置此帐户才能访问微调。有关更多信息,请查看基于角色的访问控制指南

为什么我的上传失败?

如果文件上传失败,您可以在 Azure OpenAI Studio 中的“数据文件”下查看错误消息。将鼠标悬停在显示“错误”的位置(状态栏下方),将显示失败的说明。

我的微调模型似乎没有改善

  • 缺少系统消息:微调时需要提供系统消息;当您使用微调模型时,您将需要提供相同的系统消息。如果您提供不同的系统消息,您可能会看到与微调的结果不同的结果。

  • 数据不足:虽然管道运行的最低数量是 10 个,但您需要数百到数千个数据点来教授模型新技能。数据点太少可能会导致过度拟合和泛化不良。经过微调的模型可能在训练数据上表现良好,但在其他数据上表现不佳,因为它记住了训练示例而不是学习模式。为了获得最佳结果,请计划准备包含数百或数千个数据点的数据集。

  • 不良数据:管理不当或不具代表性的数据集将产生低质量的模型。您的模型可能会从数据集中学习不准确或有偏差的模式。例如,如果您正在训练一个用于客户服务的聊天机器人,但只提供一种场景(例如商品退货)的训练数据,它将不知道如何响应其他场景。或者,如果您的训练数据不好(包含不正确的响应),您的模型将学习提供不正确的结果。

下一步

反馈

即将推出:整个 2024 年,我们将逐步淘汰 GitHub Issues 作为内容反馈机制,并用新的反馈系统取而代之。有关详细信息,请参阅:Provide feedback for Microsoft Learn content - Contributor guide | Microsoft Learn


  •  


 


  •  

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值