#ChatGPT Fine-tuning 实战 [TOC]
Fine-tuning简介
微调通过喂给大模型更多的样本数据来改进模型的表现,使其在一些特定的任务上输出更好的结果。
使用场景
? 要求输出特定的风格和格式等 ? 提高输出的可靠性 ? 纠正无法遵循复杂提示语的问题 ? 执行一项难以用语言表达的新技能或任务
Fine-tuning 日志分析专家
使用真实的已标注数据进行 Fine-tuning,使模型具备判断日志故障优先级的能力
Fine-tuning 数据格式:jsonl 包含systemprompt、user、assistant 每行代表一条日志标注数据
准备微调数据
这里我准备了一些日志数据,列的描述分别是日志与优先级:
上传微调文件
接下来我们创建一个
finetune.py用于上传微调数据,并创建一个微调任务输出它们的id。
from openai import OpenAI
client = OpenAI(api_key="你的ChatGPT API Key")
# 上传微调数据
file_name = client.files.create(file=open("log.jsonl", "rb"), purpose="fine-tune")
file_id = file_name.id
print("file_id is: ", file_id)
# 创建微调任务
finetune_job = client.fine_tuning.jobs.create(
training_file=file_id, model="gpt-4o-mini-2024-07-18"
)
job_id = finetune_job.id
print("job_id is: ", job_id)
运行一下
python finetune.py
接着我们创建一个
get_finetune_status.py文件用于查询微调模型是否已经创建好了。
from openai import OpenAI
client = OpenAI(
api_key="你的API Key",
)
job_id = "ftjob-BXQ0NTUCeJkeKEGwEcOu9xHO"
status = client.fine_tuning.jobs.retrieve(job_id)
print("\n", status)
print("\nfinetune status is: ", status.status)
print("\nfinetune model id is: ", status.fine_tuned_model)
注意:微调时间取决于微调数据量大小,耗时较长。可微调模型包括:
gpt-4o-mini-2024-07-18、gpt-3.5-turbo-0125等
等了十几分钟,我们的模型总算训练好了。
推理模型
创建一个
chat.py,用于推理模型。
from openai import OpenAI
client = OpenAI(
api_key="你的 API Key",
)
model_id = "ft:gpt-4o-mini-2024-07-18:personal::C5QcrId1"
completion = client.chat.completions.create(
model=model_id,
messages=[
{
"role": "system",
"content": "你现在是一个日志告警专家,请根据日志内容去识别紧急程度,直接输出 P1 P2 或 P3,输出:",
},
{"role": "user", "content": "Disk I/O error"},
],
)
print("ChatGPT resp: ", completion.choices[0].message.content)