微调
学习如何为您的应用程序定制模型。
介绍
微调可以通过提供以下内容,使您从API中可用的模型中获得更多收益:
-
比提示设计更高质量的结果
-
能够训练更多无法适应提示的示例
-
由于提示较短而节省令牌
-
请求延迟较低
GPT-3已经在开放互联网上的大量文本中进行了预训练。当只给出几个示例提示时,它通常可以直观地理解您要执行的任务并生成一个合理的完成结果。这通常被称为“少样本学习”。
通过对比提示中无法容纳的更多示例进行训练,微调可以改善少样本学习,并使您在许多任务上获得更好的结果。一旦模型被微调,您就不需要再提供提示中的示例了。这节省成本并实现低延迟请求。
在高层次上,微调包括以下步骤:
-
准备并上传训练数据
-
训练新的微调模型
-
使用您的微调模型
请访问我们的定价页面,了解有关精细调整模型培训和使用计费方式的更多信息。
哪些模型可以进行微调?
目前,只有以下基础模型支持微调:davinci、curie、babbage和ada。这些是原始模型,在训练后没有任何指令(例如text-davinci-003)。您还可以继续对已经微调的模型进行微调,以添加额外的数据而无需从头开始。
安装
我们建议使用我们的OpenAI命令行界面(CLI)。要安装它,请运行
pip install –upgrade openai
(以下说明适用于版本0.9.4及以上。此外,OpenAI CLI需要Python 3。)
通过将以下行添加到您的shell初始化脚本(例如.bashrc、zshrc等)或在fine-tuning命令之前在命令行中运行它来设置OPENAI_API_KEY
环境变量:
export OPENAI_API_KEY=”<OPENAI_API_KEY>”
准备训练数据
训练数据是教GPT-3说出你想要的话的方法。
您的数据必须是JSONL文档,其中每行都是与一个训练示例相对应的提示-完成对。 您可以使用我们的CLI数据准备工具轻松将您的数据转换为此文件格式。
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}{"prompt": "<prompt text>", "completion": "<ideal generated text>"}{"prompt": "<prompt text>", "completion": "<ideal generated text>"}...
设计用于微调的提示和完成方式与设计用于我们基础模型(Davinci、Curie、Babbage、Ada)的提示不同。特别是,对于基础模型的提示通常由多个示例组成(“少量学习”),而对于微调,每个训练示例通常包括单个输入示例及其相关输出,无需提供详细说明或在同一提示中包含多个示例。
有关如何为各种任务准备培训数据的更详细指导,请参阅我们准备数据集最佳实践。
您拥有的培训样本越多,效果就越好。我们建议至少有几百个样本。总体而言,我们发现数据集大小翻倍会线性增加模型质量。
CLI数据准备工具
我们开发了一个工具,可以验证、提供建议和重新格式化您的数据:
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
此工具接受不同的格式,唯一要求它们包含提示和完成列/键。您可以传递 CSV、TSV、XLSX、JSON 或 JSONL 文件,它会在指导您完成建议的更改过程后,将输出保存到 JSONL 文件中,以便进行微调。
创建微调模型
以下假设你已按照上述说明准备了训练数据。
使用 OpenAI CLI 启动微调作业:
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>
您从哪里开始的基本模型的名称(ada、babbage、curie 或 davinci)。您可以使用后缀参数自定义微调模型的名称。BASE_MODEL
运行上述命令会执行以下几个操作:
- 使用文件 API 上传文件(或使用已经上传的文件)
- 创建微调作业
- 流式传输事件,直到作业完成(这通常需要几分钟,但如果队列中有许多作业或数据集很大,则可能需要数小时)
每个微调工作都始于一个基础模型,该模型默认为Curie。选择的模型会影响模型的性能和运行微调模型的成本。您可以选择以下任意一种模型:Ada
、Babbage
、Curie
或 Davinci
。请访问我们的定价页面了解有关微调费率的详细信息。
在开始微调作业后,可能需要一些时间才能完成。您的作业可能排在我们系统中其他作业之后,并且根据所选用的数据集大小和模型不同,训练我们的模型可能需要几分钟或数小时时间。如果由于任何原因事件流被中断,则可以通过运行以下命令来恢复它:
openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>
当工作完成时,它应该显示微调模型的名称。
除了创建微调作业之外,您还可以列出现有的作业、检索作业状态或取消一个作业。
# List all created fine-tunesopenai api fine_tunes.list# Retrieve the state of a fine-tune. The resulting object includes# job status (which can be one of pending, running, succeeded, or failed)# and other informationopenai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID># Cancel a jobopenai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>
使用微调模型
当作业成功完成时,fine_tuned_model
字段将填充模型名称。现在,您可以将此模型指定为我们的Completions API参数,并使用Playground向其发出请求。
在作业首次完成后,可能需要几分钟才能使您的模型准备好处理请求。如果对您的模型进行完成请求超时,则很可能是因为正在加载您的模型。如果发生这种情况,请稍后再试。
通过将模型名称作为完成请求的model
参数传递来开始发送请求:
OpenAI CLI:
openai api completions.create -m <FINE_TUNED_MODEL> -p <YOUR_PROMPT>
cURL:
curl https://api.openai.com/v1/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": YOUR_PROMPT, "model": FINE_TUNED_MODEL}'
Python:
import openaiopenai.Completion.create( model=FINE_TUNED_MODEL, prompt=YOUR_PROMPT)
Node.js:
const response = await openai.createCompletion({ model: FINE_TUNED_MODEL prompt: YOUR_PROMPT,});
您可以继续在这些请求中使用所有其他完成参数,例如 temperature
、frequency_penalty
、presence_penalty
等,以对微调模型进行优化。
删除一个经过优化的模型
要删除一个经过优化的模型,您必须在组织内被指定为“所有者”。
OpenAI CLI:
openai api models.delete -i <FINE_TUNED_MODEL>
cURL:
curl -X "DELETE" https://api.openai.com/v1/models/<FINE_TUNED_MODEL> \ -H "Authorization: Bearer $OPENAI_API_KEY"
Python:
import openaiopenai.Model.delete(FINE_TUNED_MODEL)