学习使用Qwen3-8B微调,训练第一届中文古诗词赏析评测
·
环境配置
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.代码中库的版本的问题以及版本和版本的对应问题
- 按照代码中的transformers的版本在导入模型的时候会找不到qwen3的模型,
- peft库版本的问题报错入下图所示

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


所有评论(0)