Qwen1.8B大模型微调流程
提示:本篇笔记是在微调大模型为法律相关模型的教程下记录的,参考的讲解视频在B站上。
提示:本篇笔记是在微调大模型为法律相关模型的教程下记录的,参考的讲解视频在B站上,一搜微调大模型为法律大模型就有很多视频。
1. 数据集
1.1 数据下载
huggingface镜像链接:https://hf-mirror.com/datasets/ShengbinYue/DISC-Law-SFT
魔塔社区链接:https://modelscope.cn/datasets/Robin021/DISC-Law-SFT/files
1.2 数据格式转换
模型要求的数据集格式为这样:
下载的数据集格式为:
就需要将源数据格式转为模型所需要的数据格式:process_data_law.py
import json
json_data = []
# 读取以.jsonl结尾的文件
with open('D:/PyProject/01_Test/DISC-Law-SFT-Triplet-released.jsonl', 'r', encoding='utf-8') as file:
for line in file:
data = json.loads(line)
json_data.append(data)
# 待填入的模板
template = []
# 遍历json数据集
for idx, data in enumerate(json_data[:]):
conversation = [
{
"form": "user",
"value": data["input"]
},
{
"form": "assistant",
"value": data["output"]
}
]
template.append({
"id": f"identity_{idx}",
"conversation": conversation
})
print(len(template))
print(json.dumps(template[0], ensure_ascii=False, indent=2))
output_file_path = 'train_data_law.json'
with open(output_file_path, 'w', encoding='utf-8') as f:
json.dump(template, f, ensure_ascii=False, indent=2)
print(f"处理好的数据已经写入到本地文件:{output_file_path}")
2. 模型训练
2.1 安装依赖
pip install "peft<0.8.0" deepspeed
安装deepspeed的时候报错,提示我未安装CUDAtoolkit,然后参照这篇教程进行了安装:windows下安装CUDAToolkit和cuDNN
安装依赖的时候有出现一系列的报错,我在另一篇博客中写了遇到的错误以及解决方案:Windows安装DeepSpeed包(先编译DeepSpeed再安装)(顺利解决FileNotFoundError: [WinError 2] 系统找不到指定的文件),此处就不再对报错进行赘述。
2.2 模型训练
修改finetune/finetune_lora_single_gpu.sh中的模型路径和数据路径
可以自己对参数进行修改
参数设置完以后可以开始进行训练
教程显示的是使用bash命令进行训练
bash finetune_lora_single_gpu
PS:注意,我是在Windows下进行的训练,故无法使用bash,从而转为Git bash运行sh脚本
先打开git bash窗口,然后
此处报错是因为finetune.py在finetune文件夹的上一级文件夹中
又又报错,报没有torch(好好好,解决一个又来一个)
解决方法:使用git激活conda环境
报错gbk(好好好,又又又报错
解决方案:加上encoding=‘utf-8’
解决了这个,又又又报错dispatch_batches:
错误原因:Accelerate包现在的版本已经舍弃了这个参数
找到Trainer的初始化代码(xx\Anaconda3\envs\qwen1\Lib\site-packages\transformers\trainer.py),对dispatch_batches进行注释
然后又报错了(微笑脸。。。
经查验,发现代码需要的是conversations,而一开始转换数据集格式的时候,转成了conversation.重新转换。
使用转换后的数据集,终于!!!跑起来了!!!哭死。。。
由于机子自带的GPU只有8G,所以batchsize调为4,大概占用内存8G。训练5轮大概花了15个小时。
3. 模型推理
3.1 LoRA模型合并
训练完成以后需要将主模型和LoRA模型进行合并
编写合并模型的python文件
from peft import AutoPeftModelForCausalLM
# lora模型位置
path_to_adapter = "D:/PyProject/Qwen/Qwen-main/output_qwen/checkpoint-2500/"
# 合并模型存放位置
new_model_directory = "D:/PyProject/Qwen/Qwen-1_8B-Chat_law"
model = AutoPeftModelForCausalLM.from_pretrained(
path_to_adapter,
device_map = "auto",
trust_remote_code=True
).eval()
# 模型合并
merged_model = model.merge_and_unload()
# 将合并后的模型回写到新的路径中
merged_model.save_pretrained(new_model_directory, max_shard_size="2048MB", safe_serialization=True)
# 分词器保存
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
path_to_adapter,
trust_remote_code=True
)
tokenizer.save_pretrained(new_model_directory)
合并完成
3.2 模型web界面推理
web界面的推理和前一篇部署文章步骤一样:Qwen1.8B大模型跑通流程
将后面的模型名字改为合并的新模型即可
结束语
浅浅记录一下微调大模型的流程,中间遇到了很多问题,也记录了一些bug的解决方法。。。肝麻了。。
更多推荐
所有评论(0)