OpenAI API Fine-tunes

2023-03-21 14:09 更新

管理微調(diào)作業(yè)以根據(jù)您的特定訓(xùn)練數(shù)據(jù)定制模型。


Create fine-tune

POST https://api.openai.com/v1/fine-tunes

創(chuàng)建一個(gè)從給定數(shù)據(jù)集微調(diào)指定模型的作業(yè)。

響應(yīng)包括排隊(duì)作業(yè)的詳細(xì)信息,包括作業(yè)狀態(tài)和完成后微調(diào)模型的名稱。

Request body

字段 類型 是否可選 說明
training_file string 必須

包含訓(xùn)練數(shù)據(jù)的上傳文件的 ID。

您的數(shù)據(jù)集必須格式化為 JSONL 文件,其中每個(gè)訓(xùn)練示例都是一個(gè)帶有鍵“提示”和“完成”的 JSON 對象。此外,您必須上傳帶有微調(diào)目的的文件。

validation_file string 可選

包含驗(yàn)證數(shù)據(jù)的上傳文件的 ID。

如果您提供此文件,該數(shù)據(jù)將用于在微調(diào)期間定期生成驗(yàn)證指標(biāo)。這些指標(biāo)可以在微調(diào)結(jié)果文件中查看。您的火車和驗(yàn)證數(shù)據(jù)應(yīng)該是互斥的。

您的數(shù)據(jù)集必須格式化為 JSONL 文件,其中每個(gè)驗(yàn)證示例都是一個(gè)帶有鍵“prompt”和“completion”的 JSON 對象。此外,您必須上傳帶有微調(diào)目的的文件。

model string 可選 默認(rèn)為 curie 要微調(diào)的基本模型的名稱。您可以選擇“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后創(chuàng)建的微調(diào)模型之一。
n_epochs integer 可選 默認(rèn)為 4 訓(xùn)練模型的時(shí)期數(shù)。一個(gè)紀(jì)元指的是訓(xùn)練數(shù)據(jù)集的一個(gè)完整周期。
batch_size integer 可選 默認(rèn)為 null

用于訓(xùn)練的批量大小。批量大小是用于訓(xùn)練單個(gè)前向和后向傳遞的訓(xùn)練示例數(shù)。

默認(rèn)情況下,批量大小將動態(tài)配置為訓(xùn)練集中示例數(shù)量的 0.2%,上限為 256 - 通常,我們發(fā)現(xiàn)較大的批量大小往往更適合較大的數(shù)據(jù)集。

learning_rate_multiplier number 可選 默認(rèn)為 null

用于訓(xùn)練的學(xué)習(xí)率乘數(shù)。微調(diào)學(xué)習(xí)率是用于預(yù)訓(xùn)練的原始學(xué)習(xí)率乘以該值。

默認(rèn)情況下,學(xué)習(xí)率乘數(shù)是 0.05、0.1 或 0.2,具體取決于最終的 batch_size(較大的學(xué)習(xí)率往往在較大的批量大小下表現(xiàn)更好)。我們建議使用 0.02 到 0.2 范圍內(nèi)的值進(jìn)行試驗(yàn),以查看產(chǎn)生最佳結(jié)果的值。

prompt_loss_weight number 可選 默認(rèn)為 0.01

用于提示令牌損失的權(quán)重。這控制了模型嘗試學(xué)習(xí)生成提示的程度(與權(quán)重始終為 1.0 的完成相比),并且可以在完成較短時(shí)為訓(xùn)練增加穩(wěn)定效果。

如果提示非常長(相對于完成),則減少此權(quán)重以避免過度優(yōu)先學(xué)習(xí)提示可能是有意義的。

compute_classification_metrics boolean 可選 默認(rèn)為 false

如果設(shè)置,我們將在每個(gè)時(shí)期結(jié)束時(shí)使用驗(yàn)證集計(jì)算特定于分類的指標(biāo),例如準(zhǔn)確性和 F-1 分?jǐn)?shù)??梢栽诮Y(jié)果文件中查看這些指標(biāo)。

為了計(jì)算分類指標(biāo),您必須提供一個(gè) validation_file。此外,您必須為多類分類指定 classification_n_classes 或?yàn)槎诸愔付?nbsp;classification_positive_class。

classification_n_classes integer 可選 默認(rèn)為 null

分類任務(wù)中的類數(shù)。

多類分類需要此參數(shù)。

classification_positive_class string 可選 默認(rèn)為 null

二元分類中的正類。

在進(jìn)行二元分類時(shí),需要此參數(shù)來生成精度、召回率和 F1 指標(biāo)。

classification_betas array 可選 默認(rèn)為 null

如果提供,我們將計(jì)算指定 beta 值的 F-beta 分?jǐn)?shù)。 F-beta 分?jǐn)?shù)是 F-1 分?jǐn)?shù)的推廣。這僅用于二進(jìn)制分類。

當(dāng) beta 為 1(即 F-1 分?jǐn)?shù))時(shí),精確率和召回率被賦予相同的權(quán)重。 Beta 分?jǐn)?shù)越大,召回率越高,精確率越低。 Beta 分?jǐn)?shù)越小,精確度越重要,召回率越低。

suffix string 可選 默認(rèn)為 null 最多 40 個(gè)字符的字符串,將添加到您的微調(diào)模型名稱中。

例如,“custom-model-name”的后綴會生成類似 ada:ft-your-org:custom-model-name-2022-02-15-04-21-04 的模型名稱。

示例請求

curl python  node.js 
curl https://api.openai.com/v1/fine-tunes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "training_file": "file-XGinujblHPwGLSztz8cPS8XY"
  }'
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY")
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createFineTune({
  training_file: "file-XGinujblHPwGLSztz8cPS8XY",
});

響應(yīng)

{
  "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
  "object": "fine-tune",
  "model": "curie",
  "created_at": 1614807352,
  "events": [
    {
      "object": "fine-tune-event",
      "created_at": 1614807352,
      "level": "info",
      "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
    }
  ],
  "fine_tuned_model": null,
  "hyperparams": {
    "batch_size": 4,
    "learning_rate_multiplier": 0.1,
    "n_epochs": 4,
    "prompt_loss_weight": 0.1,
  },
  "organization_id": "org-...",
  "result_files": [],
  "status": "pending",
  "validation_files": [],
  "training_files": [
    {
      "id": "file-XGinujblHPwGLSztz8cPS8XY",
      "object": "file",
      "bytes": 1547276,
      "created_at": 1610062281,
      "filename": "my-data-train.jsonl",
      "purpose": "fine-tune-train"
    }
  ],
  "updated_at": 1614807352,
}


List fine-tunes

GET https://api.openai.com/v1/fine-tunes

列出您的組織的微調(diào)工作

示例請求

 curl python  node.js 
curl https://api.openai.com/v1/fine-tunes \
  -H "Authorization: Bearer $OPENAI_API_KEY"
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list()
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listFineTunes();

響應(yīng)

{
  "object": "list",
  "data": [
    {
      "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
      "object": "fine-tune",
      "model": "curie",
      "created_at": 1614807352,
      "fine_tuned_model": null,
      "hyperparams": { ... },
      "organization_id": "org-...",
      "result_files": [],
      "status": "pending",
      "validation_files": [],
      "training_files": [ { ... } ],
      "updated_at": 1614807352,
    },
    { ... },
    { ... }
  ]
}

Retrieve fine-tune

GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}

獲取有關(guān)微調(diào)作業(yè)的信息。

Path parameters

字段 類型 是否可選 說明
fine_tune_id
string
必須
微調(diào)作業(yè)的ID

示例請求

curl python  node.js 
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F \
  -H "Authorization: Bearer $OPENAI_API_KEY"
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.retrieveFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F");

響應(yīng)

{
  "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
  "object": "fine-tune",
  "model": "curie",
  "created_at": 1614807352,
  "events": [
    {
      "object": "fine-tune-event",
      "created_at": 1614807352,
      "level": "info",
      "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807356,
      "level": "info",
      "message": "Job started."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807861,
      "level": "info",
      "message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807864,
      "level": "info",
      "message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807864,
      "level": "info",
      "message": "Job succeeded."
    }
  ],
  "fine_tuned_model": "curie:ft-acmeco-2021-03-03-21-44-20",
  "hyperparams": {
    "batch_size": 4,
    "learning_rate_multiplier": 0.1,
    "n_epochs": 4,
    "prompt_loss_weight": 0.1,
  },
  "organization_id": "org-...",
  "result_files": [
    {
      "id": "file-QQm6ZpqdNwAaVC3aSz5sWwLT",
      "object": "file",
      "bytes": 81509,
      "created_at": 1614807863,
      "filename": "compiled_results.csv",
      "purpose": "fine-tune-results"
    }
  ],
  "status": "succeeded",
  "validation_files": [],
  "training_files": [
    {
      "id": "file-XGinujblHPwGLSztz8cPS8XY",
      "object": "file",
      "bytes": 1547276,
      "created_at": 1610062281,
      "filename": "my-data-train.jsonl",
      "purpose": "fine-tune-train"
    }
  ],
  "updated_at": 1614807865,
}

Cancel fine-tune

POST https://api.openai.com/v1/fine-tunes/{fine_tune_id}/cancel

立即取消微調(diào)作業(yè)。

Path parameters

字段
類型 是否可選 說明
fine_tune_id
string
必須
要取消的微調(diào)作業(yè)的 ID

示例請求

 curl python  node.js 
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/cancel \
  -H "Authorization: Bearer $OPENAI_API_KEY"
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.cancel(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.cancelFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F");

響應(yīng)

{
  "id": "ft-xhrpBbvVUzYGo8oUO1FY4nI7",
  "object": "fine-tune",
  "model": "curie",
  "created_at": 1614807770,
  "events": [ { ... } ],
  "fine_tuned_model": null,
  "hyperparams": { ... },
  "organization_id": "org-...",
  "result_files": [],
  "status": "cancelled",
  "validation_files": [],
  "training_files": [
    {
      "id": "file-XGinujblHPwGLSztz8cPS8XY",
      "object": "file",
      "bytes": 1547276,
      "created_at": 1610062281,
      "filename": "my-data-train.jsonl",
      "purpose": "fine-tune-train"
    }
  ],
  "updated_at": 1614807789,
}

List fine-tune events

GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}/events

獲取微調(diào)作業(yè)的細(xì)粒度狀態(tài)更新。

Path parameters

字段 類型  是否可選  說明 
fine_tune_id
string
必須
要為其獲取事件的微調(diào)作業(yè)的 ID。

Query parameters

字段 類型  是否可選  說明 
stream
boolean
可選 默認(rèn)為 false

是否為微調(diào)作業(yè)流式傳輸事件。如果設(shè)置為 true,事件將在可用時(shí)作為純數(shù)據(jù)服務(wù)器發(fā)送事件發(fā)送。當(dāng)作業(yè)完成(成功、取消或失敗)時(shí),流將以 data: [DONE] 消息終止。

如果設(shè)置為 false,則只返回到目前為止生成的事件。

示例請求

 curl python  node.js 
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/events \
  -H "Authorization: Bearer $OPENAI_API_KEY"
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listFineTuneEvents("ft-AF1WoRqd3aJAHsqc9NY7iL8F");

響應(yīng)

{
  "object": "list",
  "data": [
    {
      "object": "fine-tune-event",
      "created_at": 1614807352,
      "level": "info",
      "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807356,
      "level": "info",
      "message": "Job started."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807861,
      "level": "info",
      "message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807864,
      "level": "info",
      "message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
    },
    {
      "object": "fine-tune-event",
      "created_at": 1614807864,
      "level": "info",
      "message": "Job succeeded."
    }
  ]
}

Delete fine-tune model

DELETE https://api.openai.com/v1/models/{model}

刪除微調(diào)模型。您必須在您的組織中擁有所有者角色。

Path parameters

字段 類型  是否可選  說明 
model
string
必須
要?jiǎng)h除的模型

示例請求

curl python  node.js 
curl https://api.openai.com/v1/models/curie:ft-acmeco-2021-03-03-21-44-20 \
  -X DELETE \
  -H "Authorization: Bearer $OPENAI_API_KEY"
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20")
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.deleteModel('curie:ft-acmeco-2021-03-03-21-44-20');

響應(yīng)

{
  "id": "curie:ft-acmeco-2021-03-03-21-44-20",
  "object": "model",
  "deleted": true
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號