微调Qwen模型
一、模型选择
由于硬件设备有限,选择Qwen-1.8B-Chat-Int4模型进行复现和微调
二、硬件条件
RTX 3080 Ti(12G显存)
三、GPU算力租借
(1)尝试在自己笔记本部署模型
本地笔记本GPU为GTX1050 Ti,所能够装的CUDA版本最高为10.2,而Qwen官方建议CUDA版本为11.4以上,因此选择租借GPU算力。
(2)算力租借
平台:AutoDL算力云
设备:RTX 3080 Ti(12G显存)
四、环境配置
(1)基础配置
Ubuntu20.04 CUDA11.8 Python3.8 Pytorch2.0.0
(2)安装requirement.txt中的库
使用以下命令行安装requirement.txt中的库:
pip install -r requirement.txt
(3)安装modelscope库
执行代码时,会出现以下报错,提示没有Modelscope模型,使用以下命令安装modelscope
pip install modelscope
五、复现模型
1.从以下github链接中下载代码至本地,并上传到服务器
https://github.com/QwenLM/Qwen/
2.执行以下代码复现模型
六、微调模型
1.微调数据集准备
2.使用QLora进行微调
微调命令行:
bash finetune/finetune_qlora_single_gpu.sh -m /root/.cache/modelscope/hub/qwen/Qwen-1_8B-Chat-Int4 -d train.txt
3.加载微调的模型,并与原始模型合并
4.测试模型
当没有微调大模型时,向模型输入“你好”,模型一般会输出“你好!有什么我可以帮助你的吗?”
向微调5000轮后的模型输入“你好”,模型输出“我是智能AI哦,我能够使用猪八戒的语气说话!”
七、代码
#从 ModelScope魔搭社区下载基础模型
from modelscope import snapshot_download
from transformers import AutoModelForCausalLM, AutoTokenizer
Downloading model checkpoint to a local dir model_dir
model_dir = snapshot_download(‘qwen/Qwen-7B’)
model_dir = snapshot_download(‘qwen/Qwen-7B-Chat’)
model_dir = snapshot_download(‘qwen/Qwen-14B’)
model_dir = snapshot_download(‘qwen/Qwen-1_8B-Chat-Int4’)
Loading local checkpoints
trust_remote_code is still set as True since we still load codes from local dir instead of transformers
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map=“auto”,
trust_remote_code=True
).eval()
#测试大模型,给定输入,大模型进行输出
response, history = model.chat(tokenizer, “你好”, history=None)
print(response)
#加载微调后的模型
from peft import AutoPeftModelForCausalLM
model = AutoPeftModelForCausalLM.from_pretrained(
‘output_qwen’, # path to the output directory
device_map=“auto”,
trust_remote_code=True
).eval()
#对微调后模型进行测试
response, history = model.chat(tokenizer, “你好”, history=None)
print(response)