ChatGPT Fine-tuning 实战

78 阅读2分钟

image.png

#ChatGPT Fine-tuning 实战 [TOC]

Fine-tuning简介

微调通过喂给大模型更多的样本数据来改进模型的表现,使其在一些特定的任务上输出更好的结果。

使用场景

? 要求输出特定的风格和格式等 ? 提高输出的可靠性 ? 纠正无法遵循复杂提示语的问题 ? 执行一项难以用语言表达的新技能或任务

Fine-tuning 日志分析专家

使用真实的已标注数据进行 Fine-tuning,使模型具备判断日志故障优先级的能力

image.png

image.png

Fine-tuning 数据格式:jsonl 包含systemprompt、user、assistant 每行代表一条日志标注数据

准备微调数据

这里我准备了一些日志数据,列的描述分别是日志与优先级:

image.png

上传微调文件

接下来我们创建一个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

image.png

接着我们创建一个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-18gpt-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)