AI智能体研发之路-模型篇(一):大模型练习框架LLaMA-Factory在国内网络环 ...

打印 上一主题 下一主题

主题 672|帖子 672|积分 2016



博客导读:
《AI—工程篇》
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效​​​​​​​
AI智能体研发之路-工程篇(二):Dify智能体开发平台一键摆设
AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键摆设
AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一键摆设
AI智能体研发之路-工程篇(五):大模型推理服务框架LocalAI一键摆设
《AI—模型篇》
AI智能体研发之路-模型篇(一):大模型练习框架LLaMA-Factory在国内网络环境下的安装、摆设及使用
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 练习与推理实战

目录
一、弁言
二、LLaMA-Factory项目介绍
2.1 项目特色
2.2性能指标​​​​​​ 
2.3支持模型 
2.4练习方法 
2.5硬件依赖  
三、LLaMA-Factory项目安装、摆设
3.1 拉取项目代码
3.2 项目目录结构
3.3 Dockerfile适配国内网络环境
3.4 docker-compose.yml适配国内网络环境
 3.5 docker compose方式启动
四、LLaMA-Factory项目微调练习 
4.1 大模型微调练习-Train(练习)
4.2 大模型微调练习-Evaluate&redict(评估&预测)
4.3 大模型微调练习-Chat(对话)
4.4 大模型微调练习-Export(导出)

五、总结


一、弁言

贫富差距的产生是信息差,技能贫富差距的产生亦云云。如果可以自我发现或者在别人的指导下发现优秀的开源项目,学习或工作服从真的可以事半功倍。
本日力荐的项目是LLaMA-Factory,我在客岁8月份就开始使用这个项目举行模型摆设和微调练习(fine tune),当时各家大模型仅限于推理测试,OpenAI还没有对外提供微调服务,加上这个项目摆设丝滑(更新及时,不会出现环境依赖问题,代码逻辑上几乎无错误),觉得好牛啊。现在来看项目已经达到22K星,果然酒深不怕巷子香。
本文的焦点价值在于适配国内网络环境:官方文档是以国际hugging face库为示例,本篇文章以国内modelscope库为示例。让国内网络环境用户举行大模型微调练习更加丝滑。
二、LLaMA-Factory项目介绍

2.1 项目特色



  • 多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
  • 集成方法:(增量)预练习、(多模态)指令监督微调、夸奖模型练习、PPO 练习、DPO 练习和 ORPO 练习。
  • 多种精度:32 比特全参数微调、16 比特冻结微调、16 比特 LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/4/8 比特 QLoRA 微调。
  • 先辈算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 Agent 微调。
  • 实用本领:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。
  • 极速推理:基于 vLLM 的 OpenAI 风格 API、欣赏器界面和命令行接口。
2.2性能指标​​​​​​ 

与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技能,LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。 



  • Training Speed: 练习阶段每秒处理的样本数目。(批处理大小=4,截断长度=1024)
  • Rouge Score: 广告文案生成任务验证集上的 Rouge-2 分数。(批处理大小=4,截断长度=1024)
  • GPU Memory: 4 比特量化练习的 GPU 显存峰值。(批处理大小=1,截断长度=1024)
  • 我们在 ChatGLM 的 P-Tuning 中采用 pre_seq_len=128,在 LLaMA Factory 的 LoRA 微调中采用 lora_rank=32。 
2.3支持模型 




  • 默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块以取得更好的结果。
  • 对于全部“基座”(Base)模型,--template 参数可以是 default, alpaca, vicuna 等恣意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。
  • 请务必在练习和推理时使用完全一致的模板。 
2.4练习方法 

 这里特别说一下,本框架不仅支持预练习(Pre-Training)、指令监督微调练习(Supervised Fine-Tuning),照旧支持夸奖模型练习(Reward Modeling)、PPO、DPO、ORPO等强化学习练习

各练习阶段的含义参考此图:

2.5硬件依赖  

差别尺寸的模型,差别练习方式,所需GPU显存见下表,在工作中经常被问到需要多少资源,建议收藏 

三、LLaMA-Factory项目安装、摆设

这里建议使用docker compose摆设,conda及docker摆设方式见项目文档。
3.1 拉取项目代码

  1. git clone https://github.com/hiyouga/LLaMA-Factory.git
复制代码
3.2 项目目录结构

  1. [root@localhost LLaMA-Factory]# tree -d
  2. .
  3. ├── assets
  4. ├── data   //训练数据放在这,里面有配置文件可以新增自己的数据
  5. │   ├── belle_multiturn
  6. │   ├── example_dataset
  7. │   ├── hh_rlhf_en
  8. │   ├── mllm_demo_data
  9. │   └── ultra_chat
  10. ├── evaluation  //评测脚本在这里
  11. │   ├── ceval
  12. │   ├── cmmlu
  13. │   └── mmlu
  14. ├── examples    //各种推理、训练的配置文件在这里(以前还是shell脚本,现在是配置文件了)
  15. │   ├── accelerate
  16. │   ├── deepspeed
  17. │   ├── extras
  18. │   │   ├── badam
  19. │   │   ├── fsdp_qlora
  20. │   │   ├── galore
  21. │   │   ├── llama_pro
  22. │   │   ├── loraplus
  23. │   │   └── mod
  24. │   ├── full_multi_gpu
  25. │   ├── inference
  26. │   ├── lora_multi_gpu
  27. │   ├── lora_single_gpu
  28. │   ├── merge_lora
  29. │   └── qlora_single_gpu
  30. ├── hf_cache   //docker镜像中关联的huggingface目录,存储从hf库下载的模型,本文不用
  31. ├── ms_cache   //docker镜像中关联的modelscope目录,存储从ms库下载的模型,本文用这个
  32. │   └── hub
  33. │       ├── baichuan-inc
  34. │       │   └── Baichuan2-7B-Chat  //现在了百川2-7B举例
  35. │       └── temp
  36. ├── output  //训练输出的ckpt模型数据在这里
  37. ├── scripts  //训练代码依赖的脚本
  38. ├── src    //核心目录,源代码在这里
  39. │   └── llmtuner
  40. │       ├── api
  41. │       ├── chat
  42. │       ├── data
  43. │       ├── eval
  44. │       ├── extras
  45. │       ├── hparams
  46. │       ├── model
  47. │       │   └── utils
  48. │       ├── train
  49. │       │   ├── dpo
  50. │       │   ├── orpo
  51. │       │   ├── ppo
  52. │       │   ├── pt
  53. │       │   ├── rm
  54. │       │   └── sft
  55. │       └── webui
  56. │           └── components
  57. └── tests   //测试代码
  58. 55 directories
复制代码
3.3 Dockerfile适配国内网络环境

  1. [root@localhost LLaMA-Factory]# vim Dockerfile
  2. FROM nvcr.io/nvidia/pytorch:24.01-py3
  3. WORKDIR /app
  4. COPY requirements.txt /app/
  5. RUN pip install -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple   
  6. #修改点1:在官方代码中加入腾讯pip镜像,否则默认镜像拉取依赖包极慢
  7. COPY . /app/
  8. RUN pip install -e .[deepspeed,metrics,bitsandbytes,qwen,modelscope] -i https://mirrors.cloud.tencent.com/pypi/simple
  9. #修改点2:同上,在官方代码中加入腾讯pip镜像,否则默认镜像拉取依赖包极慢
  10. #修改点3:在可选依赖包内加入modelscope,这样就可以下载modelscope的模型了
  11. VOLUME [ "/root/.cache/modelscope/", "/app/data", "/app/output" ]
  12. #修改点4:匿名卷中,将/root/.cache/huggingface/改为/root/.cache/modelscope/
  13. #小知识:docker run -v与Dockerfile中VOLUME的区别:
  14. #VOLUME主要用于具有数据存储需求的Dockerfile中,以免用户docker run忘记指定-v导致容器删除后,造成的数据丢失,这个项目要存储模型、训练数据、训练输出的模型数据,所以分别建立这3个匿名卷
  15. #如果没有-v指定,默认存储在/var/lib/docker/volumes/{容器ID}中,如果-v指定,则存储在指定目录中
  16. EXPOSE 7860
  17. #默认指定监听的端口
  18. CMD [ "llamafactory-cli", "webui" ]
  19. #镜像模型启动模型为webui,我觉得也可以改为train、chat、expose、api,还没试。
复制代码
3.4 docker-compose.yml适配国内网络环境

  1. [root@localhost LLaMA-Factory]# vim docker-compose.yml
  2. version: '3.8'
  3. services:
  4.   llama-factory:
  5.     build:
  6.       dockerfile: Dockerfile
  7.       context: .
  8.     container_name: llama_factory
  9.     volumes:
  10.       - ./ms_cache:/root/.cache/modelscope/
  11. #修改点1:将./ms_cache:/root/.cache/huggingface/修改为./ms_cache:/root/.cache/modelscope/,使用Dockerfile里建立的modelscope挂载点
  12.       - ./data:/app/data
  13.       - ./output:/app/output
  14.     environment:
  15.       - CUDA_VISIBLE_DEVICES=1
  16. #修改点2:nvidia-smi看看服务器哪张卡显存充足,指定为对应的显卡,目前webui仅支持单卡,多卡训练请使用命令行。
  17.       - USE_MODELSCOPE_HUB=1
  18. #修改点3:环境变量中加入USE_MODELSCOPE_HUB=1,采用从modelscope库中下载模型
  19.     ports:
  20.       - "7860:7860"
  21.     ipc: host
  22.     deploy:
  23.       resources:
  24.         reservations:
  25.           devices:
  26.           - driver: nvidia
  27.             count: "all"
  28.             capabilities: [gpu]
  29.     restart: unless-stopped
复制代码
 3.5 docker compose方式启动

修改完Dockerfile和docker-compose.yml之后,就可以打本地镜像启动啦,期待您一遍过~
  1. docker compose -f ./docker-compose.yml up -d
  2. # -f 指定docker-compose.yml
  3. # -d 后台运行,可以使用docker logs llama_factory -f --tail 100查看启动日志
复制代码
如果启动没问题,在欣赏器输入宿主机ip+7860(如123.123.123.123:7860)进入webui界面,恭喜!

四、LLaMA-Factory项目微调练习 

终于来到我们最喜欢的炼丹环节!开发工作中,搭环境永远是最贫苦的,雨过天晴,让我们一起练习大模型吧! 
4.1 大模型微调练习-Train(练习)

根据WebUI逐个勾选参数,点击预览命令便会生成背景实行的命令,这个命令可以保存下来,以命令行方式运行也是可以的,点击开始举行练习,下面参照命令说明每个参数的意义。 

  1. CUDA_VISIBLE_DEVICES=1 llamafactory-cli train \
  2.     --stage sft \      #指定sft微调训练,可选rm,dpo等
  3.     --do_train True \  #训练是do_train,预测是do_predict
  4.     --model_name_or_path baichuan-inc/Baichuan2-7B-Chat \  #模型目录,如果网络不行,可以配置本地目录,但今天的modelscope教程已经解决这个问题
  5.     --finetuning_type lora \    #训练类型为lora,也可以进行full和freeze训练
  6.     --quantization_bit 4 \      #量化精度,4bit,可选8bit和none不量化
  7.     --template baichuan2 \      #模版,每个模型要选对应的模版,对应关系见上文
  8.     --flash_attn auto \          #flash attention,闪光注意力机制,一种加速注意力计算的方法,后面会专门写一篇,baichuan2暂不支持,这里选auto,对于支持的模型可以选择fa2
  9.     --dataset_dir data \        #数据目录
  10.     --dataset oaast_sft_zh \    #数据集,可以通过更改dataset_info.json文件配置自己的数据集
  11.     --cutoff_len 1024 \         #截断长度
  12.     --learning_rate 5e-05 \     #学习率,AdamW优化器的初始学习率
  13.     --num_train_epochs 20.0 \   #训练轮数,需要执行的训练总轮数
  14.     --max_samples 100000 \      #最大样本数,每个数据集的最大样本数
  15.     --per_device_train_batch_size 1 \    #批处理大小,每个GPU处理的样本数量,推荐为1
  16.     --gradient_accumulation_steps 1 \    #梯度累积,梯度累积的步数,推荐为1
  17.     --lr_scheduler_type cosine \         #学习率调节器,可选line,constant等多种
  18.     --max_grad_norm 1.0 \                #最大梯度范数,用于梯度裁剪的范数
  19.     --logging_steps 100 \                #日志间隔,每两次日志输出间的更新步数
  20.     --save_steps 5000 \                  #保存间隔,每两次断点保存间的更新步数。
  21.     --warmup_steps 0.1 \                 #预热步数,学习率预热采用的步数。
  22.     --optim adamw_torch \                #优化器,使用的优化器:adamw_torch、adamw_8bit 或 adafactor
  23.     --packing False \                    
  24.     --report_to none \
  25.     --output_dir saves/Baichuan2-7B-Chat/lora/train_2024-05-13-06-18-23 \    #数据目录
  26.     --fp16 True \                        #计算类型,可以fp16、bf16等
  27.     --lora_rank 32 \                     #LoRA秩,LoRA矩阵的秩大小,越大精度越高,推荐32
  28.     --lora_alpha 16 \                    #LoRA 缩放系数
  29.     --lora_dropout 0 \
  30.     --lora_target W_pack \               #模型对应的模块,具体对应关系见上文
  31.     --val_size 0.1 \
  32.     --evaluation_strategy steps \
  33.     --eval_steps 5000 \
  34.     --per_device_eval_batch_size 1 \
  35.     --load_best_model_at_end True \
  36.     --plot_loss True
复制代码
项目经过长时间的积淀,支持的功能非常全面,写了一些Lora的参数说明,后面另有RLHF、GeLore参数说明,BAdam参数说明,文章会渐渐补全,对于重点微调技能,后面会单独开文章讲解。 
4.2 大模型微调练习-Evaluate&redict(评估&预测)

评估&预测模块,针对微调完成的模型举行评估。

根据勾选参数预测&评估的命令如下,多数都好理解,不再赘述 
  1. CUDA_VISIBLE_DEVICES=1 llamafactory-cli train \
  2.     --stage sft \
  3.     --model_name_or_path baichuan-inc/Baichuan2-7B-Chat \
  4.     --finetuning_type lora \
  5.     --quantization_bit 4 \
  6.     --template baichuan2 \
  7.     --flash_attn auto \
  8.     --dataset_dir data \
  9.     --dataset oaast_sft_zh \
  10.     --cutoff_len 1024 \
  11.     --max_samples 100000 \
  12.     --per_device_eval_batch_size 2 \
  13.     --predict_with_generate True \
  14.     --max_new_tokens 512 \
  15.     --top_p 0.7 \
  16.     --temperature 0.95 \
  17.     --output_dir saves/Baichuan2-7B-Chat/lora/eval_2024-05-13-06-18-23 \
  18.     --do_predict True
复制代码
 实行成功后,可以看到进度条。

4.3 大模型微调练习-Chat(对话)

在练习、评估之后,可以举行Chat测试,如果配置了微调后的适配器路径,就会将基座模型与微调模型归并在一起举行测试,如果不配置适配器路径,只对基座模型举行测试。 ​

 推理引擎默以为huggingface,可以选择vllm举行加速。
4.4 大模型微调练习-Export(导出)

模型导出,可将基座模型与微调后的模型归并到出,一键完成。



五、总结

本文先对LLaMA-Factory项目举行介绍,之后逐行具体介绍了该项目在国内网络环境下如何安装、摆设,末了以Baichuan2-7B为例,通过讲解练习参数的方式具体介绍了基于LLaMA-Factory WebUI的大模型微调练习。篇幅有限,专栏内会持续更新,具体介绍大模型微调练习方法。如果觉得对你有资助,期待您的关注,点赞、收藏或评论,您的支持是我持续码字的动力。
如果不外瘾,还可以接着看看我的其他文章: 
《AI—工程篇》
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效​​​​​​​
AI智能体研发之路-工程篇(二):Dify智能体开发平台一键摆设
AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键摆设
AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一键摆设
AI智能体研发之路-工程篇(五):大模型推理服务框架LocalAI一键摆设
《AI—模型篇》
AI智能体研发之路-模型篇(一):大模型练习框架LLaMA-Factory在国内网络环境下的安装、摆设及使用
AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 练习与推理实战


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表