AI智能体研发之路-模子篇(一):大模子练习框架LLaMA-Factory在国内网络环
一、弁言贫富差距的产生是信息差,技能贫富差距的产生亦云云。如果可以自我发现大概在别人的指导下发现优秀的开源项目,学习或工作服从真的可以事半功倍。
今天力荐的项目是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 显存斲丧。
https://i-blog.csdnimg.cn/direct/4648cbd93ef74e1ebc684b653ddab561.png
[*]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支持模子
https://i-blog.csdnimg.cn/direct/3391c941a6e94139aa0e2a137fe1c31b.png
[*]默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块以取得更好的效果。
[*]对于所有“基座”(Base)模子,–template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Instruct/Chat)模子请务必使用对应的模板。
[*]请务必在练习和推理时使用完全划一的模板。
2.4练习方法
这里特别说一下,本框架不仅支持预练习(Pre-Training)、指令监督微调练习(Supervised Fine-Tuning),照旧支持嘉奖模子练习(Reward Modeling)、PPO、DPO、ORPO等强化学习练习https://i-blog.csdnimg.cn/direct/c0c0a20a5978477691b39f58498a9d3b.png
各练习阶段的寄义参考此图:
https://i-blog.csdnimg.cn/direct/ad7cdf2ef1634bc39f3efe8e087eacc6.png
2.5硬件依赖
不同尺寸的模子,不同练习方式,所需GPU显存见下表,在工作中常常被问到需要多少资源,建议收藏 https://i-blog.csdnimg.cn/direct/b19461fd5dae495b887266cfc0844fa0.png
三、LLaMA-Factory项目安装、摆设
这里建议使用docker compose摆设,conda及docker摆设方式见项目文档。
3.1 拉取项目代码
git clone https://github.com/hiyouga/LLaMA-Factory.git
3.2 项目目次结构
# tree -d
.
├── assets
├── data //训练数据放在这,里面有配置文件可以新增自己的数据
│ ├── belle_multiturn
│ ├── example_dataset
│ ├── hh_rlhf_en
│ ├── mllm_demo_data
│ └── ultra_chat
├── evaluation//评测脚本在这里
│ ├── ceval
│ ├── cmmlu
│ └── mmlu
├── examples //各种推理、训练的配置文件在这里(以前还是shell脚本,现在是配置文件了)
│ ├── accelerate
│ ├── deepspeed
│ ├── extras
│ │ ├── badam
│ │ ├── fsdp_qlora
│ │ ├── galore
│ │ ├── llama_pro
│ │ ├── loraplus
│ │ └── mod
│ ├── full_multi_gpu
│ ├── inference
│ ├── lora_multi_gpu
│ ├── lora_single_gpu
│ ├── merge_lora
│ └── qlora_single_gpu
├── hf_cache //docker镜像中关联的huggingface目录,存储从hf库下载的模型,本文不用
├── ms_cache //docker镜像中关联的modelscope目录,存储从ms库下载的模型,本文用这个
│ └── hub
│ ├── baichuan-inc
│ │ └── Baichuan2-7B-Chat//现在了百川2-7B举例
│ └── temp
├── output//训练输出的ckpt模型数据在这里
├── scripts//训练代码依赖的脚本
├── src //核心目录,源代码在这里
│ └── llmtuner
│ ├── api
│ ├── chat
│ ├── data
│ ├── eval
│ ├── extras
│ ├── hparams
│ ├── model
│ │ └── utils
│ ├── train
│ │ ├── dpo
│ │ ├── orpo
│ │ ├── ppo
│ │ ├── pt
│ │ ├── rm
│ │ └── sft
│ └── webui
│ └── components
└── tests //测试代码
55 directories
3.3 Dockerfile适配国内网络环境
# vim Dockerfile
FROM nvcr.io/nvidia/pytorch:24.01-py3
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple
#修改点1:在官方代码中加入腾讯pip镜像,否则默认镜像拉取依赖包极慢
COPY . /app/
RUN pip install -e . -i https://mirrors.cloud.tencent.com/pypi/simple
#修改点2:同上,在官方代码中加入腾讯pip镜像,否则默认镜像拉取依赖包极慢
#修改点3:在可选依赖包内加入modelscope,这样就可以下载modelscope的模型了
VOLUME [ "/root/.cache/modelscope/", "/app/data", "/app/output" ]
#修改点4:匿名卷中,将/root/.cache/huggingface/改为/root/.cache/modelscope/
#小知识:docker run -v与Dockerfile中VOLUME的区别:
#VOLUME主要用于具有数据存储需求的Dockerfile中,以免用户docker run忘记指定-v导致容器删除后,造成的数据丢失,这个项目要存储模型、训练数据、训练输出的模型数据,所以分别建立这3个匿名卷
#如果没有-v指定,默认存储在/var/lib/docker/volumes/{容器ID}中,如果-v指定,则存储在指定目录中
EXPOSE 7860
#默认指定监听的端口
CMD [ "llamafactory-cli", "webui" ]
#镜像模型启动模型为webui,我觉得也可以改为train、chat、expose、api,还没试。
3.4 docker-compose.yml适配国内网络环境
# vim docker-compose.yml
version: '3.8'
services:
llama-factory:
build:
dockerfile: Dockerfile
context: .
container_name: llama_factory
volumes:
- ./ms_cache:/root/.cache/modelscope/
#修改点1:将./ms_cache:/root/.cache/huggingface/修改为./ms_cache:/root/.cache/modelscope/,使用Dockerfile里建立的modelscope挂载点
- ./data:/app/data
- ./output:/app/output
environment:
- CUDA_VISIBLE_DEVICES=1
#修改点2:nvidia-smi看看服务器哪张卡显存充足,指定为对应的显卡,目前webui仅支持单卡,多卡训练请使用命令行。
- USE_MODELSCOPE_HUB=1
#修改点3:环境变量中加入USE_MODELSCOPE_HUB=1,采用从modelscope库中下载模型
ports:
- "7860:7860"
ipc: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: "all"
capabilities:
restart: unless-stopped
3.5 docker compose方式启动
修改完Dockerfile和docker-compose.yml之后,就可以打当地镜像启动啦,期待您一遍过~
docker compose -f ./docker-compose.yml up -d
# -f 指定docker-compose.yml
# -d 后台运行,可以使用docker logs llama_factory -f --tail 100查看启动日志
如果启动没标题,在浏览器输入宿主机ip+7860(如123.123.123.123:7860)进入webui界面,恭喜!
https://i-blog.csdnimg.cn/direct/90136516c45547b2ad28091b5b21f84b.png
四、LLaMA-Factory项目微调练习
终于来到我们最喜好的炼丹环节!开辟工作中,搭环境永远是最麻烦的,雨过天晴,让我们一起练习大模子吧!
4.1 大模子微调练习-Train(练习)
根据WebUI逐个勾选参数,点击预览命令便会天生背景实行的命令,这个命令可以保存下来,以命令行方式运行也是可以的,点击开始举行练习,下面参照命令分析每个参数的意义。
https://i-blog.csdnimg.cn/direct/aea27a73285b4aab865b5a69265871e3.png
CUDA_VISIBLE_DEVICES=1 llamafactory-cli train \
--stage sft \ #指定sft微调训练,可选rm,dpo等
--do_train True \#训练是do_train,预测是do_predict
--model_name_or_path baichuan-inc/Baichuan2-7B-Chat \#模型目录,如果网络不行,可以配置本地目录,但今天的modelscope教程已经解决这个问题
--finetuning_type lora \ #训练类型为lora,也可以进行full和freeze训练
--quantization_bit 4 \ #量化精度,4bit,可选8bit和none不量化
--template baichuan2 \ #模版,每个模型要选对应的模版,对应关系见上文
--flash_attn auto \ #flash attention,闪光注意力机制,一种加速注意力计算的方法,后面会专门写一篇,baichuan2暂不支持,这里选auto,对于支持的模型可以选择fa2
--dataset_dir data \ #数据目录
--dataset oaast_sft_zh \ #数据集,可以通过更改dataset_info.json文件配置自己的数据集
--cutoff_len 1024 \ #截断长度
--learning_rate 5e-05 \ #学习率,AdamW优化器的初始学习率
--num_train_epochs 20.0 \ #训练轮数,需要执行的训练总轮数
--max_samples 100000 \ #最大样本数,每个数据集的最大样本数
--per_device_train_batch_size 1 \ #批处理大小,每个GPU处理的样本数量,推荐为1
--gradient_accumulation_steps 1 \ #梯度累积,梯度累积的步数,推荐为1
--lr_scheduler_type cosine \ #学习率调节器,可选line,constant等多种
--max_grad_norm 1.0 \ #最大梯度范数,用于梯度裁剪的范数
--logging_steps 100 \ #日志间隔,每两次日志输出间的更新步数
--save_steps 5000 \ #保存间隔,每两次断点保存间的更新步数。
--warmup_steps 0.1 \ #预热步数,学习率预热采用的步数。
--optim adamw_torch \ #优化器,使用的优化器:adamw_torch、adamw_8bit 或 adafactor
--packing False \
--report_to none \
--output_dir saves/Baichuan2-7B-Chat/lora/train_2024-05-13-06-18-23 \ #数据目录
--fp16 True \ #计算类型,可以fp16、bf16等
--lora_rank 32 \ #LoRA秩,LoRA矩阵的秩大小,越大精度越高,推荐32
--lora_alpha 16 \ #LoRA 缩放系数
--lora_dropout 0 \
--lora_target W_pack \ #模型对应的模块,具体对应关系见上文
--val_size 0.1 \
--evaluation_strategy steps \
--eval_steps 5000 \
--per_device_eval_batch_size 1 \
--load_best_model_at_end True \
--plot_loss True
项目经过长时间的积淀,支持的功能非常全面,写了一些Lora的参数分析,背面另有RLHF、GeLore参数分析,BAdam参数分析,文章会逐渐补全,对于重点微调技能,背面会单独开文章讲解。
4.2 大模子微调练习-Evaluate&Predict(评估&猜测)
评估&猜测模块,针对微调完成的模子举行评估。https://i-blog.csdnimg.cn/direct/c6dc12a948ca4dd89852bdbc628ba3dc.png
根据勾选参数猜测&评估的命令如下,多数都好理解,不再赘述
CUDA_VISIBLE_DEVICES=1 llamafactory-cli train \
--stage sft \
--model_name_or_path baichuan-inc/Baichuan2-7B-Chat \
--finetuning_type lora \
--quantization_bit 4 \
--template baichuan2 \
--flash_attn auto \
--dataset_dir data \
--dataset oaast_sft_zh \
--cutoff_len 1024 \
--max_samples 100000 \
--per_device_eval_batch_size 2 \
--predict_with_generate True \
--max_new_tokens 512 \
--top_p 0.7 \
--temperature 0.95 \
--output_dir saves/Baichuan2-7B-Chat/lora/eval_2024-05-13-06-18-23 \
--do_predict True
实行成功后,可以看到进度条。https://i-blog.csdnimg.cn/direct/d5a421369ecb4bb4b74a6886d5eef927.png
4.3 大模子微调练习-Chat(对话)
在练习、评估之后,可以举行Chat测试,如果设置了微调后的适配器路径,就会将基座模子与微调模子归并在一起举行测试,如果不设置适配器路径,只对基座模子举行测试。 https://i-blog.csdnimg.cn/direct/4ecedb50613d4871b37f596844c22f58.png
推理引擎默以为huggingface,可以选择vllm举行加速。
4.4 大模子微调练习-Export(导出)
模子导出,可将基座模子与微调后的模子归并到出,一键完成。
https://i-blog.csdnimg.cn/direct/d47c6a932f974f4bb27994b5a70a1196.png
五、总结
本文先对LLaMA-Factory项目举行先容,之后逐行具体先容了该项目在国内网络环境下如何安装、摆设,末了以Baichuan2-7B为例,通过讲解练习参数的方式具体先容了基于LLaMA-Factory WebUI的大模子微调练习。
如何体系的去学习大模子LLM ?
大模子时代,火爆出圈的LLM大模子让程序员们开始重新评估自己的本事。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等标题热议不断。
究竟上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,发掘AI大模子人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,另有应对的机遇吗?
与其焦急……
不如成为「掌握AI工具的技能人」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相干的内容很多,如今网上的老课程老课本关于LLM又太少。所以如今小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮各人体系梳理大模子学习脉络,将这份 LLM大模子资料 分享出来:包罗LLM大模子册本、640套大模子行业陈诉、LLM大模子学习视频、LLM大模子学习路线、开源大模子学习教程等,
页:
[1]