提示:本篇笔记是在微调大模型为法律相关模型的教程下记录的,参考的讲解视频在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的解决方法。。。肝麻了。。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐