接触大模型有一段时间了,最近学习了一下使用LLaMA-Factory来对开源大模型进行微调,LLaMA-Factory是一个非常好用的开源微调大模型工具,GitHub:LLaMA-Facotry,相关的介绍可以直接去官方网站上去查看。
本文基于Ubuntu系统对使用LLaMA-Factory来对qwen2-1.5B模型进行微调;
1.安装部署
1.1.下载LLaMA-Factory
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界面如下
界面分上下两部分:
上半部分是模型训练的基本配置,有如下参数:
模型名称:可以使用常用的模型,包括 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
训练过程中可以在终端下看到详细日志输出:
训练完成后,会在webui界面显示训练完毕。
3.验证推理
1.在网页界面,选择Chat,加载模型,检查点路径:train_2024-07-16-14-53-45,推理数据类型:bfloat16,加载完成后,就可以进行聊天了
2.导出模型,选择Export选项,导出目录/home/LLM/QwenSft
然后可以通过代码来进行验证,实现如下:
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