首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用

  • 25-03-03 08:03
  • 4022
  • 7398
blog.csdn.net

博客导读:

《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&Predict(评估&预测)

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 拉取项目代码

 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&Predict(评估&预测)

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

根据勾选参数预测&评估的命令如下,多数都好理解,不再赘述 

  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 训练与推理实战

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览423497 人正在系统学习中
注:本文转载自blog.csdn.net的LDG_AGI的文章"https://blog.csdn.net/weixin_48007632/article/details/138819599"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top