LLAMA-Factory微调大模子(非webui)

[复制链接]
发表于 2025-5-9 14:13:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本文用来记录利用llama-factory对qwen大模子的微调过程。

LLAMA-Factory的设置

项目地点:hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)
我的环境设置:


  • Windows 2022 server
  • NVIDIA A10
 首先创建环境:
  1. conda create -n lf python=3.10
  2. conda activate lf
  3. git clone https://github.com/hiyouga/LLaMA-Factory.git
  4. cd LLaMA-Factory
  5. pip install -e ".[torch,metrics]"
复制代码
运行完了之后验证一下cuda即可。我这次微调的大模子为qwen2.5-7B-instruct版本,可以从huggingface(不推荐,慢)或modelscope获取,如下所示:
  1. from modelscope import snapshot_download
  2. model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct')
复制代码
下载好后的模子位于.cache文件夹下,输出信息也会有具体的文件地点,这个路径要记着,或像我一样直接把整个Qwen文件夹搬到LLaMA-Factory文件夹下便于利用。
数据集预备

 以我的微调为例,我想要对大模子猜测信息这块举行微调,因此我预备的数据集也非常简朴,格式如下所示:
  1. [
  2.     {
  3.         "prompt": "你是一个专业的用户性别分析专家。请根据用户观看的历史视频内容,分析用户的性别。请直接给出结果,不需要分析过程。-用户观看历史视频种类与标题:[xxx]",
  4.         "answer": "女"
  5.     },
  6.     {
  7.         "prompt": "你是一个专业的用户性别分析专家。请根据用户观看的历史视频内容,分析用户的性别。请直接给出结果,不需要分析过程。-用户观看历史视频种类与标题:[xxx]",
  8.         "answer": "女"
  9.     },
  10.     {
  11.         "prompt": "你是一个专业的用户性别分析专家。请根据用户观看的历史视频内容,分析用户的性别。请直接给出结果,不需要分析过程。-用户观看历史视频种类与标题:[xxx]",
  12.         "answer": "女"
  13.     },
  14.     {
  15.         "prompt": "你是一个专业的用户性别分析专家。请根据用户观看的历史视频内容,分析用户的性别。请直接给出结果,不需要分析过程。-用户观看历史视频种类与标题:[xxx]",
  16.         "answer": "女"
  17.     },
  18.     {
  19.         "prompt": "你是一个专业的用户性别分析专家。请根据用户观看的历史视频内容,分析用户的性别。请直接给出结果,不需要分析过程。-用户观看历史视频种类与标题:[xxx]",
  20.         "answer": "女"
  21.     }
  22. ]
复制代码
上面的是一个json文件,其中prompt为我们输入给大模子的内容,answer为预期的回答,也就是lable,至于这个数据集怎样构建的这里就不做赘述了。
然后我们须要在LLaMA-Factory/data下修改dataset_info.json文件,假如我们上面的数据集名字为data_test.json,放在LLaMA-Factory/data下,我们须要添加如下一段话:
  1.   "data_train": {
  2.     "file_name": "data_test.json",
  3.     "columns": {
  4.       "prompt": "prompt",
  5.       "response": "answer"
  6.     }
  7.   },
复制代码
这段不难明确,就是告诉大模子我这个数据集里的内容是什么,file_name为data下数据集名称,"data_train"为自界说的数据集名称,后续利用数据集都用的这个自界说的名字。
微调大模子

我采用的是lora的方式对大模子举行微调,因此设置了一个yaml文件来利用,可以看examples/train_lora下的一堆yaml文件来编写,实在就是界说训练和评估的各种超参数,这里给出我用的例子:
  1. ### model
  2. model_name_or_path: C:/lds/LLaMA-Factory/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: data_train
  10. template: qwen
  11. cutoff_len: 1024
  12. max_samples: 10000
  13. overwrite_cache: true
  14. preprocessing_num_workers: 16
  15. ### output
  16. output_dir: C:/lds/LLaMA-Factory/output_model_age
  17. logging_steps: 10
  18. save_steps: 1000
  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: 10
  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: 1000
复制代码
然后就可以开始运行微调代码了,打开一个lf环境的终端,输入如下下令:
  1. llamafactory-cli train examples/train_lora/[你的yaml文件名].yaml
复制代码
此时终端会输出训练的各种信息,然后就开始微调了:

微调后利用 

在上面的微调训练完成后,会把lora模子文件存放在预设好的目次下,我们可以本身写一个加载lora模子的代码供封装利用,当然也可以用llama-factory自带的来利用,同时这里也给出批量调用实行猜测的一个案例:
正常单次循环调用

 打开终端,实行:
  1. llamafactory-cli chat --model_name_or_path C:/lds/LLaMA-Factory/Qwen/Qwen2.5-7B-Instruct --adapter_name_or_path C:/lds/LLaMA-Factory/output_model/checkpoint-2421
复制代码
注意,这里都是我的绝对路径,须要更换为实际的模子路径以及lora模子路径,然后等加载完毕就会提示输入了:

按数据集猜测 

 按上面数据集预备的操纵批量预备输入,此时的answer可以是任意值,由于用不到,然后预备如下的yaml文件(参考):
  1. ### model
  2. model_name_or_path: C:/lds/LLaMA-Factory/Qwen/Qwen2.5-7B-Instruct
  3. adapter_name_or_path: C:/lda/LLaMA-Factory/output_model/checkpoint-2000
  4. ### method
  5. stage: sft
  6. do_predict: true
  7. finetuning_type: lora
  8. ### dataset
  9. dataset: data_test
  10. template: qwen
  11. cutoff_len: 1024
  12. max_samples: 2000
  13. overwrite_cache: true
  14. preprocessing_num_workers: 16
  15. ### output
  16. output_dir: C:/lds/LLaMA-Factory/output_result
  17. overwrite_output_dir: true
  18. ### eval
  19. per_device_eval_batch_size: 1
  20. predict_with_generate: true
  21. ddp_timeout: 180000000
复制代码
然后同上面微调大模子的方法实行,即可在output_result文件夹下的generate_predictions.jsonl文件中看到结果了,包括原始的大模子信息与输入信息,尚有大模子的回答(key为predict)以及前面设置的没用的answer(key为label)。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表