chatgpt训练自己的模型过程笔记

chatgpt训练自己的模型过程笔记

GPT-3 已经在来自开放互联网的大量文本上进行了预训练。当给出仅包含几个示例的提示时,它通常可以凭直觉判断出您要执行的任务并生成合理的完成。这通常称为“小样本学习”。

微调通过训练比提示中更多的示例来改进小样本学习,让您在大量任务中取得更好的结果。对模型进行微调后,您将不再需要在提示中提供示例。这样可以节省成本并实现更低延迟的请求。

在高层次上,微调涉及以下步骤:

准备和上传训练数据
训练新的微调模型
使用您的微调模型

哪些模型可以微调?

微调目前仅适用于以下基本型号:davinci、curie、babbage和ada。这些是原始模型,在训练后没有任何说明(例如text-davinci-003)。您还可以继续微调微调模型以添加其他数据,而无需从头开始。

一、安装

我们建议使用我们的 OpenAI 命令行界面 (CLI)。要安装这个,运行

pip install --upgrade openai

(以下说明适用于0.9.4及更高版本。此外,OpenAI CLI 需要 python 3。)

OPENAI_API_KEY通过将以下行添加到您的 shell 初始化脚本(例如 .bashrc、zshrc 等)或在微调命令之前的命令行中运行它来设置您的环境变量:

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>

您从哪里BASE_MODEL开始的基本模型的名称(ada、babbage、curie 或 davinci)。您可以使用后缀参数自定义微调模型的名称。

运行上面的命令会做几件事:

使用文件 API上传文件(或使用已经上传的文件)
创建微调作业
流式传输事件直到作业完成(这通常需要几分钟,但如果队列中有很多作业或您的数据集很大,则可能需要数小时)
每个微调工作都从一个默认为居里的基本模型开始。模型的选择会影响模型的性能和运行微调模型的成本。您的模型可以是以下之一:ada、babbage、curie或davinci。


开始微调作业后,可能需要一些时间才能完成。在我们的系统中,您的工作可能排在其他工作之后,训练我们的模型可能需要几分钟或几小时,具体取决于模型和数据集的大小。如果事件流因任何原因中断,您可以通过运行以下命令恢复它:

openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>

工作完成后,它应该显示微调模型的名称。

除了创建微调作业外,您还可以列出现有作业、检索作业状态或取消作业。

# List all created fine-tunes
openai 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 information
openai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID>

# Cancel a job
openai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>

四、使用微调模型

当作业成功时,该fine_tuned_model字段将填充模型名称。您现在可以将此模型指定为我们的Completions API 的参数,并使用Playground向它发出请求。

在您的工作首次完成后,您的模型可能需要几分钟时间才能准备好处理请求。如果对您的模型的完成请求超时,可能是因为您的模型仍在加载中。如果发生这种情况,请在几分钟后重试。

您可以通过将模型名称作为model完成请求的参数传递来开始发出请求:

OpenAI 命令行界面:

openai api completions.create -m <FINE_TUNED_MODEL> -p <YOUR_PROMPT>

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 openai
openai.Completion.create(
model=FINE_TUNED_MODEL,
prompt=YOUR_PROMPT)
nodejs

const response = await openai.createCompletion({
model: FINE_TUNED_MODEL
prompt: YOUR_PROMPT,
});


您可以继续使用所有其他完成参数,如temperature、 、 等,对这些frequency_penalty请求presence_penalty进行微调模型。

五、删除微调模型

要删除微调模型,您必须在您的组织中被指定为“所有者”。

OpenAI 命令行界面:

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 openai

openai.Model.delete(FINE_TUNED_MODEL)


{{collectdata}}

网友评论