OpenAI API Fine-tunes

2023-03-21 14:09 更新

管理微调作业以根据您的特定训练数据定制模型。


Create fine-tune

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

创建一个从给定数据集微调指定模型的作业。

响应包括排队作业的详细信息,包括作业状态和完成后微调模型的名称。

Request body

字段 类型 是否可选 说明
training_file string 必须

包含训练数据的上传文件的 ID。

您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“提示”和“完成”的 JSON 对象。此外,您必须上传带有微调目的的文件。

validation_file string 可选

包含验证数据的上传文件的 ID。

如果您提供此文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件中查看。您的火车和验证数据应该是互斥的。

您的数据集必须格式化为 JSONL 文件,其中每个验证示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您必须上传带有微调目的的文件。

model string 可选 默认为 curie 要微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一。
n_epochs integer 可选 默认为 4 训练模型的时期数。一个纪元指的是训练数据集的一个完整周期。
batch_size integer 可选 默认为 null

用于训练的批量大小。批量大小是用于训练单个前向和后向传递的训练示例数。

默认情况下,批量大小将动态配置为训练集中示例数量的 0.2%,上限为 256 - 通常,我们发现较大的批量大小往往更适合较大的数据集。

learning_rate_multiplier number 可选 默认为 null

用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以该值。

默认情况下,学习率乘数是 0.05、0.1 或 0.2,具体取决于最终的 batch_size(较大的学习率往往在较大的批量大小下表现更好)。我们建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。

prompt_loss_weight number 可选 默认为 0.01

用于提示令牌损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成较短时为训练增加稳定效果。

如果提示非常长(相对于完成),则减少此权重以避免过度优先学习提示可能是有意义的。

compute_classification_metrics boolean 可选 默认为 false

如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标,例如准确性和 F-1 分数。可以在结果文件中查看这些指标。

为了计算分类指标,您必须提供一个 validation_file。此外,您必须为多类分类指定 classification_n_classes 或为二元分类指定 classification_positive_class。

classification_n_classes integer 可选 默认为 null

分类任务中的类数。

多类分类需要此参数。

classification_positive_class string 可选 默认为 null

二元分类中的正类。

在进行二元分类时,需要此参数来生成精度、召回率和 F1 指标。

classification_betas array 可选 默认为 null

如果提供,我们将计算指定 beta 值的 F-beta 分数。 F-beta 分数是 F-1 分数的推广。这仅用于二进制分类。

当 beta 为 1(即 F-1 分数)时,精确率和召回率被赋予相同的权重。 Beta 分数越大,召回率越高,精确率越低。 Beta 分数越小,精确度越重要,召回率越低。

suffix string 可选 默认为 null 最多 40 个字符的字符串,将添加到您的微调模型名称中。

例如,“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",
});

响应

{
  "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

列出您的组织的微调工作

示例请求

 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();

响应

{
  "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}

获取有关微调作业的信息。

Path parameters

字段 类型 是否可选 说明
fine_tune_id
string
必须
微调作业的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");

响应

{
  "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

立即取消微调作业。

Path parameters

字段
类型 是否可选 说明
fine_tune_id
string
必须
要取消的微调作业的 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");

响应

{
  "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

获取微调作业的细粒度状态更新。

Path parameters

字段 类型  是否可选  说明 
fine_tune_id
string
必须
要为其获取事件的微调作业的 ID。

Query parameters

字段 类型  是否可选  说明 
stream
boolean
可选 默认为 false

是否为微调作业流式传输事件。如果设置为 true,事件将在可用时作为纯数据服务器发送事件发送。当作业完成(成功、取消或失败)时,流将以 data: [DONE] 消息终止。

如果设置为 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");

响应

{
  "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}

删除微调模型。您必须在您的组织中拥有所有者角色。

Path parameters

字段 类型  是否可选  说明 
model
string
必须
要删除的模型

示例请求

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');

响应

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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号