今天這篇要教大家如何使用 OpenAI Finetune API 微調出自己的模型。
想必大家都學會使用網頁版 ChatGPT,最近 OpenAI 又推出了比 GPT-3 便宜十倍的 ChatGPT API,想必未來也有可能往可以 fine-tune 的路線走,讓客製化的門檻越來越低。
不管你是不是開發者,學會怎麼使用 OpenAI Finetune API 對你都有幫助。
本文大綱
實作步驟
我為大家整理了簡單 5 步驟:
Step1. Get Data
首先你要取得希望模型可以自動回覆你的資訊,例如 FAQ、對話紀錄、知識庫文件等等。
來源可能是公開資料或是用戶產生的內容
Step2. Preprocess Data
接著要將你的資料轉換成「OpenAI Finetune API」可以接受的格式:jsonl
【Data Agent 小科普】什麼是 JSONL 格式?
JSONL 是一種以「行」為單位儲存資料的格式,也就是 JSON Lines(JSON Lines 或 JSONL 或 ndjson)。在這個格式中,每一行都是一個完整的 JSON 物件。
【Data Agent 小科普】使用 JSONL 格式的好處?
相較於傳統的 JSON 格式,JSONL 將每個物件分行儲存,這樣更加符合某些應用場景的需要,例如處理大型檔案或逐行處理資料。
1. 純文字格式:JSONL 的格式是純文字格式,易於理解和處理。
2. 逐行處理:JSONL 可以逐行處理,這意味著即使檔案非常大,也可以逐行讀取和處理,而不需要將整個檔案讀取到記憶體中。
3. 擴充性:JSONL 可以容易地擴展,因為每個物件都是一個獨立的行,可以簡單地在文件的末尾添加一行新的物件。
4. 跨平台性:由於 JSONL 的格式是純文字格式,它可以在各種平台和語言之間進行易於處理的資料交換。
5. 易於轉換:JSONL 可以方便地轉換為其他格式,例如 CSV 或 SQL 資料庫。這可以使開發人員更容易地將 JSONL 格式的資料轉換為其他格式進行分析和處理。
Step3. Create fine-tune model
在開始前要先安裝 openai 套件:
$ pip install --upgrade openai
【Data Agent 小科普】為什麼要加上 --upgrade
?--upgrade
是為了確保 pip install 到的套件是最新版本!
如果我們成功安裝了 openai
套件,接著我們便能使用 terminal 下指令,創建一個 fine-tune 任務:
$ openai api fine_tunes.create -t data_for_finetune.jsonl -m curie --suffix "my-faq"
【參數解釋】
. -t
: 指定要用來上傳到 OpenAI 用於 finetune 的資料檔
. -m
: 指定想要 finetune 的 pre-trained model, 包含 {“ada”, “babbage”, “curie”, “davinci”}
. --suffix
: 在 finetuned model 加上識別用的名字
*注意:如果是免費帳戶,不能使用 davinci 模型 finetune,會出現以下錯誤訊息
Step4. Check finetune status
在上一步下完指令後,他不會 hang 在那邊回報狀態,我們要透過將 Job ID 輸入另一個指令來追蹤 finetune 進度
$ openai api fine_tunes.follow -i <JOB_ID>
[2023-02-26 08:14:55] Created fine-tune: ft-X61w6cpYmQhP5R4SuOcpUWrI
[2023-02-26 08:22:30] Fine-tune costs $2.00
[2023-02-26 08:22:31] Fine-tune enqueued. Queue number: 0
[2023-02-26 08:22:33] Fine-tune started
[2023-02-26 08:24:37] Completed epoch 1/5
[2023-02-26 08:25:38] Completed epoch 2/5
[2023-02-26 08:26:39] Completed epoch 3/5
[2023-02-26 08:27:39] Completed epoch 4/5
[2023-02-26 08:28:39] Completed epoch 5/5
[2023-02-26 08:28:58] Uploaded model: curie:ft-personal:cathay-faq-2023-02-26-08-28-57
[2023-02-26 08:28:58] Uploaded result file: file-9knGaLMrA6p5GYUgcknMrJxU
[2023-02-26 08:28:58] Fine-tune succeeded
Job complete! Status: succeeded 🎉
Try out your fine-tuned model:
openai api completions.create -m curie:ft-personal:my-faq-2023-02-26-08-28-57 -p <YOUR_PROMPT>
完成訓練後可以透過以下指令取得任務、模型的細節:
$ openai api fine_tunes.get -i <JOB_ID>
{
...
"fine_tuned_model": "ada:ft-personal:my-faq-2023-02-26-07-27-44",
"hyperparams": {
"batch_size": 1,
"learning_rate_multiplier": 0.1,
"n_epochs": 4,
"prompt_loss_weight": 0.01
},
"id": "ft-pNWEX4gWY20RNyuDEYX4J6ix",
"model": "ada",
"object": "fine-tune",
"organization_id": "org-nf9IL6vXkDCL3HS3FPhxInRO",
"result_files": [
{
"bytes": 120175,
"created_at": 1677396465,
"filename": "compiled_results.csv",
"id": "file-10mO0HRUCpA6SFV6T3ccUL16",
"object": "file",
"purpose": "fine-tune-results",
"status": "processed",
"status_details": null
}
],
"status": "succeeded",
"training_files": [
{
"bytes": 195457,
"created_at": 1677394772,
"filename": "data_for_fineunte.jsonl",
"id": "file-iaJnELw8AYaRKRhC4WePjS4A",
"object": "file",
"purpose": "fine-tune",
"status": "processed",
"status_details": null
}
],
"updated_at": 1677396465,
"validation_files": []
}
Step5. Use fine-tuned model
我們可以在 playground 看到完成訓練的模型
也可以透過 completion API 取得模型回答的結果:
params = {"tmperature": 0.7, "max_tokens": 1024}
response = openai.Completion.create(
model=<finetuned_model_name>,
prompt="什麼是信用卡安全鎖?",
**params
)
print(response["choices"][0]["text"].strip())
最後我將範例資料、打 OpenAI API 的模組、範例 script 都放在我的 Github 連結:https://github.com/A-baoYang/finetune-with-openai/tree/main
希望對讀者有幫助!
DataAgent 致力於資料技術、資料產品開發經驗以及轉職心得分享
歡迎讀者用以下方式來回饋創作者:)
- 如果你覺得這篇文章對你有幫助,歡迎幫我在下方多按幾顆 LikeCoin !
- 訂閱 DataAgent Youtube 頻道 / 追蹤 Facebook 粉專,也可以加我 FB, LinkedIn 跟我分享你在做的事情
- 看過很多文章覺得有幫助 -> 來 BuyMeACoffee 贊助我一杯咖啡,就是給我最好的回饋!