大模型微调02-使用LLaMA-Factory进行lora微调

发布于:2025-03-22 ⋅ 阅读:(16) ⋅ 点赞:(0)

环境配置

本次使用的是windows11,Python为3.11,训练数据和model使用HuggingFace
1、安装基础环境

#安装包
pip install datasets transformers torch

2、安装LLaMA-Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

构建数据集

1、生成数据文件
数据使用一个医疗诊断数据medical-o1-reasoning-SFT,先把数据转换为LLaMA-Factory支持的Alpaca数据格式,并划分数据集,4060显卡只有8G,这里取2000个样本训练,200个样本验证。

from datasets import load_dataset
import json, os

dataset = load_dataset('FreedomIntelligence/medical-o1-reasoning-SFT', 'zh')
dataset = {"train": dataset['train'][:2000], 'val': dataset['train'][-200:]}
root = r'D:\LeStoreDownload\LLaMA-Factory-0.9.2\LLaMA-Factory-0.9.2\data'
for key in ['train', 'val']:
    list_r = []
    for q, r in zip(dataset[key]["Question"], dataset[key]["Response"]):
        list_r.append({"instruction": "你是一个经验丰富的医生", "input": q, "output": r})
    fpath = os.path.join(root, f'medical_{key}_zh.json')
    json.dump(list_r, open(fpath, 'w', encoding='utf-8'), ensure_ascii=False, indent=3)

运行上面代码后,会在LLaMA-Factory-0.9.2/data下生成medical_train_zh.json和medical_val_zh.json
在这里插入图片描述
train的内容内容如下
在这里插入图片描述
2、注册数据文件
编辑LLaMA-Factory-0.9.2/data/dataset_info.json文件,添加之前生成的2个json文件
在这里插入图片描述

启动UI界面

在LLaMA-Factory的安装目录下运行如下目录,方便后面选择数据集,比如我的目录为D:\LeStoreDownload\LLaMA-Factory-0.9.2\LLaMA-Factory-0.9.2

llamafactory-cli webui

加载模型

这里使用千问的0.5B进行训练,点击加载模型后,会自动下载模型
在这里插入图片描述

加载数据

选择我们对应的数据文件,这里只选择train文件
在这里插入图片描述

模型训练

大多参数使用默认即可,我这里把学习率设置为2e-4,训练8个epoch,如下是开始训练的过程
在这里插入图片描述

模型评估

首先使用验证集medical_val_zh.json测试下基座模型的效果
在这里插入图片描述
评测结果如下,在2000个样本上训练了8个epoch,还是有提升效果的。人工评测可以查看输出的generated_predictions.jsonl文件,有具体的模型输出内容和label

{
    "predict_bleu-4": 16.561837,
    "predict_model_preparation_time": 0.003,
    "predict_rouge-1": 35.744373,
    "predict_rouge-2": 14.5082895,
    "predict_rouge-l": 22.9553675,
    "predict_runtime": 773.3625,
    "predict_samples_per_second": 0.259,
    "predict_steps_per_second": 0.129
}

然后添加上对应的检查点路径(lora训练权重)
在这里插入图片描述
重新进行预测

{
    "predict_bleu-4": 22.958406,
    "predict_model_preparation_time": 0.0038,
    "predict_rouge-1": 43.19669,
    "predict_rouge-2": 18.544107,
    "predict_rouge-l": 30.117725499999995,
    "predict_runtime": 643.3882,
    "predict_samples_per_second": 0.311,
    "predict_steps_per_second": 0.155
}

模型合并

因为我们是基于lora训练的,所以训练完成后,要把基座模型和检查点的权重进行合并
在这里插入图片描述
导出后
在这里插入图片描述