0%

ChatGPT fine tuning 及部署

Request:

  • Git
  • Openai API Key
  • python 3

Fine tuning

安装

安装 OpenAI CLI

1
pip install --upgrade openai

在环境变量中设置OPENAI_API_KEY

1
export OPENAI_API_KEY="<OPENAI_API_KEY>"

Prepare training data

训练数据使用 jsonl 格式,每一行都是一个 json。其中包含 promptcompletion,即问题和对应的回答。

需要注意的是,对于基础模型,可能需要很多不同的 prompt(few-shot learning),但对于 fine-tuning,训练数据通常是一个输入和多种输出。

训练一个关于 KCL 的AI,首先教它回复关于如何安装 KCL。

以下训练数据由Chatgpt生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{"prompt": "如何安装KCL###", "completion": " 请访问 https://kcl-lang.io/docs/next/user_docs/getting-started/install 以获取KCL安装指南。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以从 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL,并遵循安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL,其中包含有关如何安装和使用KCL的文档。\nEND"}
{"prompt": "如何安装KCL###", "completion": " KCL的安装指南可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 找到。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 有关如何安装和配置KCL的信息可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 中找到。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL并查看安装指南。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 有关如何安装KCL的详细信息可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 找到。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL,并遵循安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请查看 https://kcl-lang.io/docs/next/user_docs/getting-started/install 以获取有关如何安装和使用KCL的指南。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 找到有关如何安装和配置KCL的文档。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请访问 https://kcl-lang.io/docs/next/user_docs/getting-started/install 并下载KCL,然后遵循安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以从 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL,并遵循安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 有关如何安装KCL###的信息可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 中找到。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请访问 https://kcl-lang.io/docs/next/user_docs/getting-started/install 并按照指南安装KCL。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请访问 https://kcl-lang.io/docs/next/user_docs/getting-started/install 并下载KCL,然后按照安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请查看 https://kcl-lang.io/docs/next/user_docs/getting-started/install 并下载KCL,然后按照安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 请查看 https://kcl-lang.io/docs/next/user_docs/getting-started/install 并下载KCL,然后遵循安装指南来安装它。\nEND"}
{"prompt": "如何安装KCL###", "completion": " 您可以在 https://kcl-lang.io/docs/next/user_docs/getting-started/install 下载KCL,并遵循安装指南来安装它。\nEND"}

创建训练模型

1
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>

其中,TRAIN_FILE_ID_OR_PATH 为训练数据的文件路径,BASE_MODEL 为基础模型,可选值为 ada, babbage, curie, 或 davinci。每种模型有不同的能力和价格。

执行命令后,会提交训练任务,通常需要排队,等待OpenAI训练完成即可。

使用模型

查看自己已经训练好的模型:

1
openai api fine_tunes.list

通过 OpenAI CLI使用模型

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

其他使用方法(cURL, Python, Node.js 参考 https://platform.openai.com/docs/guides/fine-tuning/use-a-fine-tuned-model

(伪)部署到网站

OpenAI CLI查询比较麻烦,考虑通过网页方式调用。这里选择白嫖Github Page。

新建 github 仓库

新建仓库为

写一个前端

新建 index.html 并添加以下代码。并push到github。

以下代码由 Chatgpt 生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>
<head>
<title>OpenAI API demo</title>
</head>
<body>
<h1>OpenAI API demo</h1>
<label for="api_key">API Key:</label>
<input type="text" id="api_key" />

<label for="model">Model:</label>
<input type="text" id="model" />

<label for="input">Enter text:</label>
<input type="text" id="input" />
<button onclick="submit()">Submit</button>
<div id="output"></div>

<script>
async function submit() {
const apiKey = document.getElementById("api_key").value;
const model = document.getElementById("model").value;
const input = document.getElementById("input").value;

const response = await fetch(
"https://api.openai.com/v1/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + apiKey,
},
body: JSON.stringify({
prompt: input,
max_tokens: 200,
model: model,
}),
}
);

const json = await response.json();
const output = json.choices[0].text.trim();
document.getElementById("output").innerHTML = output;
}
</script>
</body>
</html>

注意:

  1. Key 不能直接写在代码中,OpenAI 会认为 Key 泄露并且让 Key 失效。
  2. 模型可以写在代码中,但是考虑到模型迭代,测试阶段可以在前端直接输入模型名,方便测试。

设置 Github Page

Github repo -> Settings -> Pages -> Build and deployment -> Source -> Deploy from branch

测试

https://platform.openai.com/docs/api-reference/fine-tunes