当前位置:   article > 正文

通义千问Qwen微调量化实战_千问模型微调

千问模型微调

前言

        本文主要内容是对于Qwen量化实战演练,将深入探讨两种不同的量化方法:分别是使用官方量化后的int4模型进行微调,得到模型理论上也是量化后的微调模型,另一种则是使用官方全量模型进行微调,再将微调后的模型进行自主量化。

        ps:作者认为如果真实场景使用的话建议使用第一种,第二只是用于了解即可,而且自己去量化模型bug百出,费时费力

一、基于官方量化模型的qlora微调量化

               该方法是在官方的微调模型基础上进行的由于前面流程和lora微调相似,准备数据及环境准备,请参考我的lora微调的文章,后续操作就是拉取量化代码

git clone https://modelscope.cn/qwen/Qwen-7B-Chat-Int4.git

修改配置:

  1. export CUDA_DEVICE_MAX_CONNECTIONS=1
  2. export CUDA_VISIBLE_DEVICES=0

 模型微调:

  1. python finetune.py \
  2. --model_name_or_path Qwen-7B-Chat-Int4 \
  3. --data_path chat.json \
  4. --fp16 True \
  5. --output_dir output_qwen \
  6. --num_train_epochs 5 \
  7. --per_device_train_batch_size 2 \
  8. --per_device_eval_batch_size 1 \
  9. --gradient_accumulation_steps 8 \
  10. --evaluation_strategy "no" \
  11. --save_strategy "steps" \
  12. --save_steps 1000 \
  13. --save_total_limit 10 \
  14. --learning_rate 3e-4 \
  15. --weight_decay 0.1 \
  16. --adam_beta2 0.95 \
  17. --warmup_ratio 0.01 \
  18. --lr_scheduler_type "cosine" \
  19. --logging_steps 1 \
  20. --report_to "none" \
  21. --model_max_length 512 \
  22. --lazy_preprocess True \
  23. --gradient_checkpointing \
  24. --use_lora \
  25. --q_lora \
  26. --deepspeed finetune/ds_config_zero2.json

这里相对与lora微调的参数多加载了官方的配置文件 

后续测试还是老代码:

  1. from peft import AutoPeftModelForCausalLM
  2. from transformers import AutoTokenizer
  3. model = AutoPeftModelForCausalLM.from_pretrained("output_qwen", device_map="auto", trust_remote_code=True).eval()
  4. tokenizer = AutoTokenizer.from_pretrained("output_qwen", trust_remote_code=True)
  5. response, history = model.chat(tokenizer, "", history=None)

二、基于官方全量模型的AutoGPTQ量化

环境:

pip install auto-gptq optimum

         在官方的git下面有个文件叫run_gptq.py的文件是用来做量化的

运行:

python run_gptq.py --model_name_or_path Qwen-7B-Chat --data_path chat.json --out_path output_qwen

生成的文件夹中缺失一些文件:

  • modeling_qwen.py
  • qwen_generation_utils.py
  • cpp_kernels.py
  • generation_config.json 

缺失的去官方的模型文件复制过来即可,下面是完整文件

测试:

  1. from modelscope import AutoTokenizer, AutoModelForCausalLM
  2. # Note: The default behavior now has injection attack prevention off.
  3. tokenizer = AutoTokenizer.from_pretrained("output_qwen", trust_remote_code=True)
  4. model = AutoModelForCausalLM.from_pretrained(
  5. "output_qwen",
  6. device_map="auto",
  7. trust_remote_code=True
  8. ).eval()
  9. response, history = model.chat(tokenizer, "你好", history=None)
  10. print(response)

ps:我在测试时发现回答的是乱码,不知道是不是有什么地方没运行,目前不知道原因,等待官方解答中,有人说是依赖包的版本问题,具体未知,有人成功了请给我解答疑惑

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/175422?site
推荐阅读
相关标签
  

闽ICP备14008679号