优化模型 管理精细调整工作,以使模型适应您特定的训练数据。 相关指南:精细调整模型
创建优化任务
复制 POST https://api.openai.com/v1/fine-tunes
创建一个任务,从给定的数据集中微调指定模型。
响应包括已入队的任务的详细信息,包括任务状态和完成后微调模型的名称。
了解更多关于微调的内容。
请求体
training_file string 必填项 上传的包含训练数据的文件的ID。
请参阅上传文件以了解如何上传文件。
您的数据集必须格式化为JSONL文件,其中每个训练示例都是一个具有“prompt”和“completion”键的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-通常,我们发现较大的批处理大小 tend to work better for larger datasets。
learning_rate_multiplier number 可选项 默认为null 用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以此值。
默认情况下,学习率乘数为0.05、0.1或0.2,具体取决于最终批处理大小(较大的批处理大小 tend to perform better with larger batch sizes)。我们建议尝试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 ,
}
优化任务列表
复制 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 ,
} ,
{ ... } ,
{ ... }
]
}
获取优化任务信息
复制 GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}
获取有关微调工作的信息。
了解更多关于微调的内容。
路径参数
fine_tune_id 字符串 必填项 微调作业的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 ,
}
取消优化任务
复制 POST https://api.openai.com/v1/fine-tunes/{fine_tune_id}/cancel
立即取消微调作业。
路径参数
fine_tune_id 字符串 必填 要取消的fine-tune作业的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 ,
}
获取优化任务事件状态
复制 GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}/events
获取优化任务的详细状态更新。
路径参数
fine_tune_id 字符串 必需的 获取事件的微调作业的ID。
查询参数
stream 布尔值 可选的 默认为false 是否为微调作业流式传输事件。如果设置为true,则事件将作为数据传输服务器推送事件随时可用。当作业完成(成功、取消或失败)时,流将以数据:[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 https://api.openai.com/v1/models/{model}
删除一个精调过的模型。您必须在组织中具有所有者角色。
路径参数
请求示例
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
}