llama-factory 系列教程 (七),Qwen2.5-7B-Instruct 模型微调与vllm摆设详 ...

打印 上一主题 下一主题

主题 497|帖子 497|积分 1491

介绍

时隔已久的 llama-factory 系列教程更新了。本篇文章是第七篇,之前的六篇,各人酌情选看即可。
因为llama-factory进行了更新,我前面几篇文章的实现部门,都不能直接用了。
我将为各人介绍怎样使用 llama-factory Lora 微调模型、摆设模型、使用python调用API。
llama-factory 安装

起首建议各人阅读一遍两份不错的文章:


  • 官方readme: https://github.com/hiyouga/LLaMA-Factory/blob/v0.9.1/README_zh.md
  • 官方推荐的知乎教程:https://zhuanlan.zhihu.com/p/695287607
  • 官方文档: https://llamafactory.readthedocs.io/zh-cn/latest/
我这篇博客的与他们的不同在于,我按照我做实行的流程,给各人演示一遍。方便各人一看就懂,心里对大致的流程有个大概。
装包

  1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
  2. cd LLaMA-Factory
  3. pip install -e ".[torch,metrics]"
复制代码
LLaMA-Factory 默认是从Huggingface 下载模型,建议各人改为从国内下载模型。
如果您在 Hugging Face 模型和数据集的下载中碰到了问题,可以通过下述方法使用魔搭社区。
export USE_MODELSCOPE_HUB=1
Windows 使用 set USE_MODELSCOPE_HUB=1
将 model_name_or_path 设置为模型 ID 来加载对应的模型。在魔搭社区查看全部可用的模型,例如 LLM-Research/Meta-Llama-3-8B-Instruct。
您也可以通过下述方法,使用魔乐社区下载数据集和模型。
export USE_OPENMIND_HUB=1
Windows 使用 set USE_OPENMIND_HUB=1
将 model_name_or_path 设置为模型 ID 来加载对应的模型。在魔乐社区查看全部可用的模型,例如 TeleAI/TeleChat-7B-pt。
下载模型

我喜好使用可视化的网站页面下载模型权重。
  1. llamafactory-cli webui
复制代码

启动服务之后,进入主机对应的 ip 和端口就可以看到网页。

在 Model name 下拉框中挑选模型,选中之后,再点击下述的加载模型。如果模型权重没有下载,则会进行下载,然后加载进显存中。在下方就会出现对话框就可以与模型进行对话了。

微调模型

数据集

点击 Train 后, 就可以看到当前可用的很多数据集。

在选中数据集后,点击预览数据集,即可看到数据集的样例。如果我们想微调模型,也须要把数据集的样式给整理成上述格式。

点击查看关于数据集的说明:https://github.com/hiyouga/LLaMA-Factory/tree/v0.9.1/data
各人仿照 alpaca_zh_demo.json 的样式准备好数据集,然后在 dataset_info.json完成数据集的注册。
注册数据集, 下图是我在dataset_info.json注册的guihua_ner数据集,然后就可以找到该数据集,并训练模型:

训练模型

可以直接点击可视化界面的 Start 按钮训练模型。也可点击预览命令查看在终端运行的命令。
我一样平常不使用可视化窗口训练模型。我喜好直接运行训练模型的命令

  1. llamafactory-cli train \
  2.     --stage sft \
  3.     --do_train True \
  4.     --model_name_or_path qwen/Qwen2.5-7B-Instruct \
  5.     --preprocessing_num_workers 16 \
  6.     --finetuning_type lora \
  7.     --template qwen \
  8.     --flash_attn auto \
  9.     --dataset_dir data \
  10.     --dataset alpaca_zh_demo \
  11.     --cutoff_len 2048 \
  12.     --learning_rate 5e-05 \
  13.     --num_train_epochs 3.0 \
  14.     --max_samples 100000 \
  15.     --per_device_train_batch_size 2 \
  16.     --gradient_accumulation_steps 8 \
  17.     --lr_scheduler_type cosine \
  18.     --max_grad_norm 1.0 \
  19.     --logging_steps 5 \
  20.     --save_steps 100 \
  21.     --warmup_steps 0 \
  22.     --packing False \
  23.     --report_to none \
  24.     --output_dir saves/Qwen2.5-7B-Instruct/lora/train_2024-11-25-09-56-29 \
  25.     --bf16 True \
  26.     --plot_loss True \
  27.     --ddp_timeout 180000000 \
  28.     --optim adamw_torch \
  29.     --lora_rank 8 \
  30.     --lora_alpha 16 \
  31.     --lora_dropout 0 \
  32.     --lora_target all
复制代码
除了使用上述的命令行方式训练模型外,llama-factory还提供了使用 yaml 文件训练模型的方式。
在 example 文件夹下可看到很多训练和推理的 yaml 文件,针对其中的参数就行修改,即可使用。

我以微调 qwen/Qwen2.5-7B-Instruct 为例:
qwen2.5-7B-ner.yaml 文件内容:
  1. ### model
  2. model_name_or_path: qwen/Qwen2.5-7B-Instruct
  3. ### method
  4. stage: sft
  5. do_train: true
  6. finetuning_type: lora
  7. lora_target: all
  8. ### dataset
  9. dataset: guihua_ner
  10. template: qwen
  11. cutoff_len: 2048
  12. max_samples: 1000
  13. overwrite_cache: true
  14. preprocessing_num_workers: 16
  15. ### output
  16. output_dir: saves/qwen2.5-7B/ner_epoch5
  17. logging_steps: 10
  18. save_steps: 500
  19. plot_loss: true
  20. overwrite_output_dir: true
  21. ### train
  22. per_device_train_batch_size: 1
  23. gradient_accumulation_steps: 8
  24. learning_rate: 1.0e-4
  25. num_train_epochs: 5.0
  26. lr_scheduler_type: cosine
  27. warmup_ratio: 0.1
  28. bf16: true
  29. ddp_timeout: 180000000
  30. ### eval
  31. val_size: 0.1
  32. per_device_eval_batch_size: 1
  33. eval_strategy: steps
  34. eval_steps: 500
复制代码
在 llamafactory-cli train 后,填入 yaml 文件的路径:
  1. llamafactory-cli train config/qwen2.5-7B-ner.yaml
复制代码
然后就会开始训练模型,终极训练完成的模型生存在 output_dir: saves/qwen2.5-7B/ner_epoch5。
在输出文件夹路径中,可以找到训练过程的丧失值变化图片。

微调后的模型推理

在完成模型的微调后,测试一下模型的微调效果。对于微调模型推理,除原始模型和模板外,还须要指定适配器路径 adapter_name_or_path 和微调类型 finetuning_type。
lora_vllm.yaml  的文件内容如下:
  1. model_name_or_path: qwen/Qwen2.5-7B-Instruct
  2. adapter_name_or_path: ../saves/qwen2.5-7B/ner_epoch5
  3. template: qwen
  4. finetuning_type: lora
  5. infer_backend: vllm
  6. vllm_enforce_eager: true
复制代码
运行下述命令,就可以看到下图的对话窗口:
  1. llamafactory-cli webchat lora_vllm.yaml
复制代码

根据上图定名实体识别的输出,可以发现微调模型确实有效果。
除了网页聊天的摆设之外,还可通过下述多种方式进行摆设:
  1. # llamafactory-cli chat xxx.yaml
  2. # llamafactory-cli webchat xxx.yaml
  3. # API_PORT=8000 llamafactory-cli api xxx.yaml
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

星球的眼睛

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

标签云

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