环境配置

1.安装cuda12的版本不然会报错

在这里插入图片描述
下面是我安装的版本 请添加图片描述

2. 按照.//finetuning/sft/requirements.txt 里面的库进行安装

数据准备

微调所需要的数据格式如下

{"messages": [
    {"role": "system", "content": "<system-prompt>"},
    {"role": "user", "content": "<query1>"},
    {"role": "assistant", "content": "<response1>"}
]}

在准备自己的数据集的时候,原始的数据集是json的形式,
在这里插入图片描述
使用脚本,将数据处理成模型所需的数据格式,脚本代码如下:

import json
import os
def create_data(input ,target):
    convert =[ {
            "role": "system",
            "content": "你是一个精通中国古诗词情感分析的助手。"
        },
        {
            "role": "user",
            "content": input
        },
        {
            "role": "assistant",
            "content": target
        }
    ]

    return convert
def get_value(path,lengen):
    f = open(path,'r')
    df = json.load(f)
    connvert_list = []

    for  i in range(len(df)):
        dict = {}
        input =((
        f"请你阅读下面这首古诗词,并判断其中包含的情感。\n\n"
        f"标题:{df[i]['title']}\n"
        f"原文:{df[i]['content']}。\n\n "
    ))
        emotions = df[i]["emotion"]
        target = "这首诗词表达的情感包括:" + str(emotions) + "。"
        # dict["id"] = "identity" + "_" + str(i+lengen)
        dict["messages"] = create_data(input,target)
        dict["format"] = "chatml"
        connvert_list.append(dict)
    return connvert_list
    # print(connvert_list)
if __name__ == "__main__":
    path = r""
    import glob
    connvert_list =[]
    for con in os.listdir(path):
        res = os.path.join(path,con)
        for cons in os.listdir(res):
            if cons.endswith(".json"):
                connvert_list1= get_value(os.path.join(res,cons),j)
                connvert_list+=connvert_list1
            else:
                ress = os.path.join(res,cons)
                connvert_list1 = get_value(os.path.join(res,cons,"train.json"),j)
                connvert_list+=connvert_list1
    with open(r"./res.jsonl",'w') as f:
        for item in connvert_list:
            json_line = json.dumps(item, ensure_ascii=False)
            f.write(json_line + "\n")


输出入下图所示:
在这里插入图片描述
然后根据官方的方式继续进行装换

INPUT_PATH="/path/to/raw/sft.jsonl"
OUTPUT_PATH="/path/to/processed/sft.jsonl"
TOKENIZER_PATH="/path/to/pretrained_models/Qwen/Qwen2___5-Coder-1___5B/"
bash ./scripts/binarize_data.sh ${INPUT_PATH} ${OUTPUT_PATH} ${TOKENIZER_PATH}

开始微调

在微调的过程中遇到了很多问题

1.代码中库的版本的问题以及版本和版本的对应问题

  1. 按照代码中的transformers的版本在导入模型的时候会找不到qwen3的模型,
  2. peft库版本的问题报错入下图所示请添加图片描述
  3. ccelerate库版本的问题,报错如下
    (https://i-blog.csdnimg.cn/direct/5cb2b93d7058426691ab151a16d846ed.png)

在这里插入图片描述以下是我自己修改过后的版本
在这里插入图片描述
note: peft 要从github上面下载安装不要直接pip 进行安装

2.版本不同函数对应的变化

运行过程中出现缺少参数的bug
请添加图片描述修改class CustomTrainer(Trainer)类对函数进行参数的添加 最终的结果

class CustomTrainer(Trainer):
    def log(self, logs: Dict[str, float],start_time:float=None) -> None:
        """
        Log `logs` on the various objects watching training.

        Subclass and override this method to inject custom behavior.

        Args:
            logs (`Dict[str, float]`):
                The values to log.

最后附一张模型运行的结果
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐