LLaMA-Factory 微调开源大模型

        接触大模型有一段时间了,最近学习了一下使用LLaMA-Factory来对开源大模型进行微调,LLaMA-Factory是一个非常好用的开源微调大模型工具,GitHub:LLaMA-Facotry,相关的介绍可以直接去官方网站上去查看。

        本文基于Ubuntu系统对使用LLaMA-Factory来对qwen2-1.5B模型进行微调;

1.安装部署

1.1.下载LLaMA-Factory

git clone https://github.com/hiyouga/LLaMA-Factory.git

1.2.安装conda

        在Ubuntu上安装Conda,可以使用Miniconda,这是Conda的一个轻量级版本。以下是安装Miniconda的步骤:
    下载Miniconda安装脚本:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

    脚本可执行:

chmod +x Miniconda3-latest-Linux-x86_64.sh

    运行安装脚本:

./Miniconda3-latest-Linux-x86_64.sh

    安装完成后,会在home下会创建miniconda3目录,然后会自动在.bashrc下面加入PATH

export PATH="/home/user/miniconda3/bin:$PATH"

        重启终端或重新加载配置文件(例如,使用source ~/.bashrc)以激活Conda环境,安装完成后,您可以通过运行conda --version来检查Conda是否正确安装。
        ubuntu中安装好conda之后,系统终端界面前面出现(base)字样,永久取消base字样办法:

1、在新终端中输入:vim ~/.bashrc
2、在打开的文件最后加上一句命令:conda deactivate
3、重新打开终端即可消除base字样。

1.3.创建虚拟环境

    创建一个名字为llama_factory的虚拟环境,只需创建一次

conda create --name llama_factory python=3.10

    激活虚拟环境

conda activate llama_factory

    进入LLaMA-Factory文件夹

cd LLaMA-Factory

    安装配置文件

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -e .[torch,metrics]

1.4.下载开源大模型

        可以选择自己常用的 LLM,包括 ChatGLM,BaiChuan,Qwen,LLaMA 等,把下载好的模型保存到LLaMA-Factory文件夹下。
        下载 qwen2-1.5B模型的命令:

git lfs install
git clone https://huggingface.co/Qwen/Qwen2-1.5B # huggingface下载
git clone https://www.modelscope.cn/qwen/Qwen2-1.5B.git # modelscope下载

    下载不下来的话,直接翻墙到对应目录,点击下载也可以;
    下载完,新建Qwen/Qwen2-1.5B模型文件夹,将下载内容放入该文件夹,然后将模型文件夹放在LLaMA-Factory目录下,供后面训练的时候使用;

2.训练

        在LLaMA-Factory项目中,单显卡可以用命令或web页面训练,多显卡只能用用命令的方式,当前系统是单显卡,所以使用的web页面训练,另外web页面也比较直观,在LLaMA-Factory目录下,执行以下命令:

python3 src/webui.py

    执行完后,终端会显示如下:

终端显示

Web界面如下

image

    界面分上下两部分:

    上半部分是模型训练的基本配置,有如下参数:

模型名称:可以使用常用的模型,包括 ChatGLM,BaiChuan,Qwen,LLaMA 等
模型路径:输入框填写我们之前下载的模型的地址。
微调方式:
    full:将整个模型都进行微调。
    freeze:将模型的大部分参数冻结,只对部分参数进行微调。
    lora:将模型的部分参数冻结,只对部分参数进行微调,但只在特定的层上进行微调。
    模型断点(适配器):在未开始微调前为空,微调一次后可以点击刷新断点(适配器)按钮,会得到之前微调过的断点(适配器)。

下半部分是一个页签窗口,分为Train、Evaluate、Chat、Export四个页签,
    微调先看Train界面:

训练阶段:选择训练阶段,分为预训练(Pre-Training)、指令监督微调(Supervised Fine-Tuning)、奖励模型训练(Reward Modeling)、PPO 、DPO 五种

这里我们选择指令监督微调(Supervised Fine-Tuning)。

数据集
    数据格式:

[
    {
        "instruction": "用户指令(必填)",#通常用于存储指示模型生成输出的指令
        "input": "用户输入(选填)",
        "output": "模型回答(必填)",
        "system": "系统提示词(选填)",
        "history": [
                ["第一轮指令(选填)", "第一轮回答(选填)"],
                ["第二轮指令(选填)", "第二轮回答(选填)"]
        ]
    }
]

        如果采用自行准备的数据集,要在 LLaMA Factory目录下data目录下的dataset_info.json添加新数据集信息,llm_data.json是按照上面的数据格式构造的训练样本数据。

"llm_type":{
    "file_name":"llm_data.json"
}

        以上都设置及准备好后,点击开始就开始微调训练了,输出目录为:

LLaMA-Factory/saves/Qwen2-1.5B/lora/train_2024-07-16-14-53-45

        训练过程中可以在终端下看到详细日志输出:

train-progress

训练完成后,会在webui界面显示训练完毕。

3.验证推理

    1.在网页界面,选择Chat,加载模型,检查点路径:train_2024-07-16-14-53-45,推理数据类型:bfloat16,加载完成后,就可以进行聊天了

image

    2.导出模型,选择Export选项,导出目录/home/LLM/QwenSft

image

然后可以通过代码来进行验证,实现如下:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

torch.manual_seed(0)
path = '/home/LLM/QwenSft'

def chat_with_qwen(content):
    tokenizer = AutoTokenizer.from_pretrained(path)
    model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map='cpu', trust_remote_code=True)
    messages = [
       {"role": "system", "content": "You are a helpful assistant."},
       {"role": "user", "content": content}
    ]

    text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)
    model_inputs = tokenizer([text], return_tensors="pt").to("cpu")
    generated_ids = model.generate(**model_inputs,max_new_tokens=512)
    generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]

    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    print(response)

    本文简单总结了一下使用LLaMA-Factory开源工具来训练开源大模型的一个基本流程,后面会继续深入了解,有新的收获会继续更新文章,感谢https://zhuanlan.zhihu.com/p/691239463

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容