NLP 資料產品開發

使用 OpenAI Finetune API 微調出自己的模型(附程式碼)

今天這篇要教大家如何使用 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 贊助我一杯咖啡,就是給我最好的回饋!

%d 位部落客按了讚: