想要对开源的llama大模型,针对自己的数据进行微调,这里推荐llama-factory项目,LLama Factory,这个工具能够高效且低成本地支持对 100 多个模型进行微调。LLama Factory 简化了模型微调的过程,并且易于访问,使用体验友好。此外,它还提供了由 Hiyouga 提供的 Hugging Face 空间,可用于对模型进行微调。这个空间还支持 Lora 和 GaLore 配置,以减少 GPU 的使用。用户可以通过简单的滑块轻松更改参数,如 dropout、epochs、批次大小等。同时,也有多个数据集选项可供选择以微调你的模型。正如本文所述,LLama Factory支持许多模型,包括不同版本的 LLama、mistral 和 Falcon。它还支持像 galore、badm 和 Lora 这样的高级算法,提供诸如flash attention、位置编码和缩放等各种功能。此外,你还可以集成像 TensorBoard、VanDB 和 MLflow 这样的监控工具。为了更快地进行推理,你还可以使用Gradio 和 CLI。本质上,LLama Factory 提供了一系列多样化的选项,以增强模型性能并简化微调过程。下面对其具体使用进行如下总结:
(1)安装配置
项目链接:GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs
基础环境配置:
这一步推荐docker安装,项目自带了dockerfile,直接编译安装即可
cd LLaMA-Factory
docker build -t llma-factory:v1.0 .
当一切安装完毕,启动镜像后
docker run --gpus=all \
-v ./hf_cache:/root/.cache/huggingface/ \
-v ./data:/app/data \
-v ./output:/app/output \
-e CUDA_VISIBLE_DEVICES=0 \
--shm-size 32G \
--ipc=host \
-p 7861:7861 \
-v /home/amax:/home/amax \
--name llama_factory \
-d llama-factory:latest
然后执行
llamafactory-cli webui
打开浏览器输入localhost:7861即可
(2)简单使用
》加载base模型
llama-facttory已经集成了常见的小100个模型了,如果你自己想要进行微调的模型不在下拉列表中,则可以通过修改LLaMA-Factory/src/llamafactory/extras/constant.py脚本即可,
但是前提是在huggingface上有自己的模型即可。
》加载自己数据
这一步首先按照alpaca格式准备训练数据,格式范例如下:
[
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一个由XXX开发的 AI 助手,很高兴认识您。请问我能为您做些什么?"
},
{
"instruction": "你好",
"input": "",
"output": "您好,我是XX大模型,一个由XXX打造的人工智能助手,请问有什么可以帮助您的吗?"
}
]
其中,instruction和input可以都填充进内容,如把问题作为input,把“回答问题这一要求”作为instruction,据说这种指令微调数据集的格式效果比较好。准备数据之后,应上传所用到的数据集至项目路径下data文件夹。同时需要将新数据集在dataset_info.json下进行登记注册。
其中数据trans_chinese_alpaca_data.json放在同名路径下。这样刷新后在加载数据时就可以看到自己添加的数据了,还可以对内容进行可视化
如果你的数据特别大,或者一个样本包含的信息特别多,内存里要维护一个超级大的list,可能会导致你处理过程中就内存溢出了,实际上,并不一定非要构造.json数据集,构造一个.jsonl数据集也是完全可以运行的,并且pyarrow更喜欢,伪代码如下
with open(保存数据集,'w', encoding='utf-8') as wf:
# 遍历自己的原始数据源
for data in src:
# 各种处理
process....sample...
# 处理完以后变成一个字典结构
sample = {
....
}
wf.write(json.dumps(sample, ensure_ascii=False) + '\n')
这样就行了,既不用维护一个巨大的list在内存中,也不用担心读取的时候出问题,使用方法上没有任何变化,还是一样把这个文件注册到dataset_info.json里面。
》开始finetune训练(SFT)
当模型和数据都已经配置完成,接下来就是开始训练了,这里我采用的是基于llama2-7b的模型,加上自己的中文数据利用lora方法进行sft,其他的参数设定如下
接下来就是开始微调训练了。需要注意的一点就是(web ui界面只支持单卡运行,如需多卡微调请参考github相关部分),如果你的机器有多卡,可以点击预览命令,然后拷贝命令到终端执行即可。
微调方法:这里可选择lora、full、freeze三种模式,普通用户请选择lora。
full:全量模型训练。该模型将消耗大量显存。以8B模型为例,8b等于80亿参数,占用显存约8*2+8 = 24G,所以普通显卡就不要考虑这个模式了
》模型合并
当完成lora微调后,需要将训练保存的权重和base模型对应位置进行叠加导出新的模型,具体操作如下
这一步如果出现huggingface_hub.errors.HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name',则根据issue,对common.py进行如下修改
》模型对齐
这一步是为了保证上一步导出模型的结果,可以选择性进行操作。
在train的训练阶段选择模型对齐方式,如人工反馈强化学习 (RLHF) 或直接偏好优化 (DPO),以增加生成的不是被拒绝的响应
是先进行sft后然后再选择对齐,还是在于第一次就直接配置好,这两种方式看后面具体验证检测结果了。
当完成模型sft训练后,将模型合并导出,然后再像上面一样导入对齐的数据,具体数据格式如下
然后开始对齐训练即可。
》推理验证
当完成模型的微调和对齐后,可以来对训练好的模型进行验证
》量化部署
这一步可以参考lamma.cpp完成模型的量化,然后借助ollma进行模型的部署即可,具体的可以参考前面的推文,简单记录一下步骤,其他不做过多的赘述。
###safetensore格式转化为gguf
python convert-hf-to-gguf.py --outfile /home/amax/project/tmp/LLaMA-Factory/save_model_gguf /home/amax/project/tmp/LLaMA-Factory/save_model
###进入llama.cpp编译完项目路径,build/bin
./llama-quantize /home/amax/project/tmp/LLaMA-Factory/save_model.gguf /home/amax/project/tmp/LLaMA-Factory/save_model_q4.gguf q4_0
当一切操作完成,发现量化后模型大小确实小了近4倍
然后可以借助ollma完成集成部署。
参考链接:
1、自定义数据集使用llama_factory微调模型并导入ollama_ollama下载的模型能通过llamafactory训练吗-CSDN博客
2、小白也能微调大模型:LLaMA-Factory使用心得_llama factory怎么用-CSDN博客
3、https://zhuanlan.zhihu.com/p/694585606
4、llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。_llamafactory 部署-CSDN博客
总结
本文介绍了如何使用LLama Factory项目对开源的LLama大模型进行微调。LLama Factory是一个高效且低成本的微调工具,支持100多个模型的微调,并提供了友好的使用体验。文章详细总结了LLama Factory的安装配置、简单使用、微调训练、模型合并、模型对齐、推理验证以及量化部署等步骤,并提供了相应的代码示例和操作指南。此外,还介绍了如何加载自定义数据集进行微调,并提到了在微调过程中可能遇到的问题及解决方案。通过本文的指导,用户可以轻松地对LLama大模型进行微调,以满足特定的需求。