当前位置:AIGC资讯 > AIGC > 正文

llama-factory学习使用笔记

      想要对开源的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大模型进行微调,以满足特定的需求。

更新时间 2024-07-13