微调 OpenAI 的 GPT-4:分步指南,本分步教程深入探讨了如何利用 GPT-4 的全部功能,通过微调增强其针对专门任务的性能。
OpenAI 最先进的模型Generative Pre-trained Transformer 4 (GPT-4)于 2023 年 3 月推出,是人工智能领域的一次飞跃,为 AI 能力引入了新的基准。GPT-4可通过ChatGPT Plus、OpenAI 的 API和 Microsoft Copilot 获得,因其多模式功能而脱颖而出,特别是通过GPT-4V,它使其能够与文本一起处理图像,为各个领域的创新应用铺平了道路。
GPT-4 进步的核心是其基于 Transformer 的框架,该框架对来自互联网和许可来源的大量数据进行了广泛的预训练,并结合人类反馈和人工智能驱动的强化学习进行了微调。这种独特的方法旨在增强模型与人类道德标准和政策合规性的一致性。
虽然 GPT-4 标志着对其前身GPT-3的改进,但它继承了后者的一些局限性,凸显了大型语言模型和生成人工智能中复杂的挑战。其中一些挑战可以通过称为微调的过程来解决,这就是本教程的主题。
本文目录
什么是微调,何时使用微调
微调的常见用例
使用 Python 微调 OpenAI 的 GPT 模型的分步指南
微调 OpenAI GPT 模型的 6 个步骤
什么是微调以及何时使用
微调的常见用例
在 Python 中逐步实现 OpenAI 的微调 API。
不过值得注意的是,GPT-4微调目前仅处于实验性访问阶段,符合条件的开发者可以通过微调UI请求访问。话虽如此,所涵盖的微调技术适用于所有 GPT 模型。
什么是微调?
微调代表了一个复杂的过程,它利用模型在不同数据集的初始训练期间获得的广泛基础知识,针对特定任务或领域完善预训练模型(如 GPT-4)。这涉及根据特定任务的数据调整模型的参数,增强其性能,并使其能够以更高的精度和效率处理特定的应用程序。
微调影响的一个说明性示例是增强模型对专门查询的响应。例如,当被问及为什么天空是蓝色时,预训练模型可能会提供基本解释。通过微调,可以丰富该响应以包含详细的科学背景,使其更适合教育平台等专业应用。
微调方法的范围从指令微调(使用演示所需响应的特定示例来训练模型)到参数高效微调(PEFT),仅更新模型参数的子集以节省计算资源并防止灾难性的遗忘。
相比之下,检索增强生成(RAG)代表了一种不同的方法。RAG 结合了基于检索和生成模型的元素,通过在生成过程中合并从外部源检索的信息来提高生成内容的质量。
微调侧重于优化特定任务的现有模型,而 RAG 则集成外部知识来丰富内容生成过程。
微调和 RAG 之间的选择取决于应用程序的具体要求,包括对最新信息的需求、可用的计算资源以及所需的任务专业化级别。微调提供了一种直接的方法来利用预训练模型的庞大知识库来完成特定任务,而 RAG 提供了一种动态方法来确保模型使用的信息的相关性和准确性。
何时使用微调?
微调OpenAI 的文本生成模型是一种根据特定需求定制文本生成模型的强大方法,但它需要大量时间和资源。在进行微调之前,建议尝试通过提示工程、提示链接(将复杂的任务划分为更简单的顺序提示)和利用函数来最大化模型的性能。推荐这种方法有以下几个原因:
这些模型最初可能会难以完成某些任务,但制定正确的提示可以显着改善结果,在许多情况下无需进行微调。
调整提示并采用提示链接或函数调用等策略可以提供即时反馈,从而实现快速迭代。相比之下,微调涉及创建数据集和训练模型,这需要更多时间。
即使微调变得必要,通过快速工程完成的前期工作也不会浪费。将精心设计的提示纳入微调过程或将其与微调技术相结合通常会产生最佳结果。
微调的常见用例
微调在以下场景中特别有用:
定制输出特性。当您需要模型遵循特定的风格、语气、格式或其他定性方面时,微调可以帮助相应地塑造其响应。
提高可靠性。对于模型始终产生所需类型的输出至关重要的应用程序,微调可以提高其可靠性。
解决复杂的提示。如果模型无法遵循复杂的指令,微调可以帮助它更有效地理解和执行此类提示。
管理边缘情况。微调可以使模型能够以特定的、预定的方式处理大量的边缘情况,从而增强其多功能性。
学习新技能或任务。当向模型引入难以封装在提示中的新技能或任务时,微调可以为其配备必要的功能。
使用 Python 微调 OpenAI 的 GPT 模型的分步指南
由于 OpenAI 模型的专有性质,如果您想要微调任何 OpenAI 模型,则必须使用 OpenAI 的微调 API。此过程涉及将数据上传到 OpenAI 的服务器以训练模型。
目前仅支持以下模型通过API进行微调。
gpt-3.5-turbo-0125,
gpt-3.5-turbo-1106,
gpt-3.5-turbo-0613,
dalle-002
GPT-4微调正在实验性访问中,符合条件的开发者可以通过微调UI请求访问。无论使用哪种模型,本教程中的微调过程和代码都不会改变。
微调 OpenAI GPT 模型的 6 个步骤
1. 准备训练数据
这是最重要的一步。微调模型的质量直接取决于您为微调模型而创建的数据。对于 OpenAI API,数据必须按jsonl格式存储。
JSONL 格式是一种文本格式,其中每一行都是一个单独的 JSON 对象,使其适合逐行处理大型数据集。这种格式对于处理可以轻松划分为单独记录而不丢失结构的数据特别有用。
例子:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
在本教程中,我仅使用五个示例创建了示例数据。这些数据由机器学习中各个主题的问题和莎士比亚风格的答案组成。
我为本教程创建的示例数据:
{"messages": [{"role": "system", "content": "您是机器学习的助教。您应该帮助用户回答他的问题。"}, {"role": "user" , "content": "什么是机器学习? "}, {"role": "assistant", "content": "'这只是教机器思考、从最精细的数据中学习以及将决策联系起来的艺术. “}]}
{"messages": [{"role": "system", "content": "您是机器学习的助教。您应该帮助用户回答他的问题。"}, {"role": "user" , "content": "神经网络是如何工作的? "}, {"role": "assistant", "content": "它们就像数字野兽的大脑,有很多层,节点也不断停止。 " }]}
2.安装openai库并设置API令牌
使用 OpenAI API 创建微调作业的第一步是上传文件。要使用此 API,您必须openai安装 python 中的库。
!pip install openai
现在登录您的 platform.openai.com 帐户并生成 API 令牌:
然后,您可以使用该库将令牌设置为环境变量os。
import os
# Set the OPENAI_API_KEY environment variable
os.environ['OPENAI_API_KEY'] = '...'
3.上传训练文件
您的培训文件必须符合jsonl格式。上传文件后,处理可能需要一段时间。文件上传的最大大小为 1 GB。要在 OpenAI 服务器上上传文件:
from openai import OpenAI
client = OpenAI()
client.files.create(
file=open("train.jsonl", "rb"),
purpose="fine-tune"
)
输出:
FileObject(id=' file-rIua39sJX1O64gzxTYfpvJx7 ',字节=11165,created_at=1709499930,文件名='train.jsonl',对象='文件',目的='微调',状态='已处理',status_details=无)
4. 创建微调模型
确保文件已成功上传后,下一步是创建微调作业。training_file是训练文件上传到OpenAI API时返回的文件ID。开始微调工作:
from openai import OpenAI
client = OpenAI()
client.fine_tuning.jobs.create(
training_file="file-rIua39sJX1O64gzxTYfpvJx7",
model="gpt-3.5-turbo" #change to gpt-4-0613 if you have access
)
要配置额外的微调设置,例如validation_file或超参数,请查看关于fine-tuning的API文档。
微调作业的完成时间各不相同,从几分钟到几小时不等,具体取决于模型和数据集大小。例如,我们的 train.jsonl 数据集中只有 50 个示例并使用 gpt-3.5-turbo 模型,该工作只需 7 分钟即可完成。
作业完成后,还将发送一封确认电子邮件。
除了设置微调作业外,您还可以选择查看当前作业列表、检查特定作业的状态或取消作业。
from openai import OpenAI
client = OpenAI()
# List 10 fine-tuning jobs
client.fine_tuning.jobs.list(limit=10)
# Retrieve the state of a fine-tune
client.fine_tuning.jobs.retrieve("...")
# Cancel a job
client.fine_tuning.jobs.cancel("...")
# List up to 10 events from a fine-tuning job
client.fine_tuning.jobs.list_events(fine_tuning_job_id="...", limit=10)
# Delete a fine-tuned model (must be an owner of the org the model was created in)
client.models.delete("ft:gpt-3.5-turbo:xxx:xxx")\
5. 分析微调模型
OpenAI 提供关键训练指标,例如训练损失、训练令牌准确性、测试损失和测试令牌准确性。这些指标有助于确保训练按预期进行,减少损失并提高令牌准确性。您可以在活动微调作业期间在事件对象中查看这些有用的指标。
{
"object": "fine_tuning.job.event",
"id": "ftjob-Na7BnF5y91wwGJ4EgxtzVyDD",
"created_at": 1693582679,
"level": "info",
"message": "Step 100/100: training loss=0.00",
"data": {
"step": 100,
"train_loss": 1.805623287509661e-5,
"train_mean_token_accuracy": 1.0
},
"type": "metrics"
}
6. 使用微调模型
成功完成作业后,作业详细信息将包括该fine_tuned_model字段,显示模型的名称。您可以对此模型进行 API 调用,并从我们刚刚调整的模型中获取响应。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="ft:gpt-3.5-turbo-0613:personal::8k01tfYd",
messages=[
{"role": "system", "content": "You are a teaching assistant for Machine Learning. You should help to user to answer on his question."},
{"role": "user", "content": "What is a loss function?"}
]
)
print(completion.choices[0].message)
输出:
ChatCompletionMessage(content=“衡量我们犹豫的程度,它指引我们的道路,我们的希望被默认。 ”, role='assistant', function_call=None, tool_calls=None)
本教程指导您完成微调 OpenAI 的 GPT 模型的过程,这是利用 LLM 的强大功能来实现专业领域应用程序的高级步骤。微调使我们能够改进语言模型的响应,使它们更擅长以更高的精度和效率处理特定的任务、风格或领域。
本教程使用 OpenAI Python API 来微调模型。如果您希望了解如何通过 UI 执行相同的操作而不编写任何代码。
由于 GPT 不是开源模型,因此微调过程相当简单,仅涉及进行 API 调用。这对于微调开源模型(如 llama-2、Mistral、稳定扩散等)来说是非常不同的。
|