当前位置:   article > 正文

Qwen-7B私有化部署及LoRA微调_lora微调 qwen

lora微调 qwen

通义千问(Qwen-7B)是阿里云最新发布的一系列超大规模语言模型,这个牛气十足的大模型令人惊叹。基于Transformer架构,Qwen-7B系列汇聚了70亿参数。废话不多说,让我们一起来看看Qwen-7B的强大之处吧!

安装虚拟环境

# 安装虚拟环境 conda create -n qwen-7b python=3.10 -y # 激活虚拟环境 conda activate qwen-7b

安装 pytorch

参考 Start Locally | PyTorch 我本地安装的 cuda 是 11.8 版本,所以安装代码如下,如果是用 cpu 跑的话,则省略本步骤,下面的代码会自动下载 cpu 版本的 pytorch

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

拉取代码并安装依赖

# 拉取代码 git clone https://github.com/QwenLM/Qwen-7B.git # 进入代码目录 cd Qwen-7B # 安装依赖 pip install -r requirements.txt # 安装 web_demo 依赖 pip install -r requirements_web_demo.txt

拉取模型

这里需要注意,需要下载Qwen-7B-Chat,否则不能使用

# 拉取代码 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git

修改web_demo.py模型路径

启动 web_demo 快速体验

# 通过参数 --server-port 指定端口号,默认为 8000 # 通过参数 --server-name 指定服务地址,默认为 127.0.0.1 # 如果是用 cpu 跑的话,可以加上参数 --cpu-only # 如果想生成一个用于公网访问的 url,可以加上参数 --share python web_demo.py --server-port 8087 --server-name "0.0.0.0"

微调(LoRA微调)

下载训练数据集:

git clone Github镜像站-GitHub - liukangjia666/qwen_data_process: 针对qwen微调模型进行数据预处理

做好前期的准备工作后就可以进行单机单卡的微调了:

export CUDA_DEVICE_MAX_CONNECTIONS=1

export CUDA_VISIBLE_DEVICES=0

安装依赖

pip install deepspeed

pip install peft

执行Python文件:

python finetune.py --model_name_or_path Qwen-7B-Chat --data_path chat.json --fp16 False --output_dir output_qwen --num_train_epochs 5 --per_device_train_batch_size 2 --per_device_eval_batch_size 1 --gradient_accumulation_steps 8 --evaluation_strategy "no" --save_strategy "steps" --save_steps 1000 --save_total_limit 10 --learning_rate 3e-4 --weight_decay 0.1 --adam_beta2 0.95 --warmup_ratio 0.01 --lr_scheduler_type "cosine" --logging_steps 1 --report_to "none" --model_max_length 512 --lazy_preprocess True --gradient_checkpointing --use_lora

参数及解释:

--model_name_or_path Qwen-1_8B-Chat:指定预训练模型的名称或路径,这里是使用名为"Qwen-1_8B-Chat"的预训练模型。

--data_path chat.json:指定训练数据和验证数据的路径,这里是使用名为"chat.json"的文件。

--fp16 True:指定是否使用半精度浮点数(float16)进行训练,这里设置为True。(请注意显存是否充足,如果报错可以改为False)

--output_dir output_qwen:指定输出目录,这里是将训练结果保存到名为"output_qwen"的文件夹中。

--num_train_epochs 5:指定训练的轮数,这里是训练5轮。

--per_device_train_batch_size 2:指定每个设备(如GPU)上用于训练的批次大小,这里是每个设备上训练2个样本。

--per_device_eval_batch_size 1:指定每个设备上用于评估的批次大小,这里是每个设备上评估1个样本。

--gradient_accumulation_steps 8:指定梯度累积步数,这里是梯度累积8步后再更新模型参数。

--evaluation_strategy "no":指定评估策略,这里是不进行评估。

--save_strategy "steps":指定保存策略,这里是每隔一定步数(如1000步)保存一次模型。

--save_steps 1000:指定保存步数,这里是每隔1000步保存一次模型。

--save_total_limit 10:指定最多保存的模型数量,这里是最多保存10个模型。

--learning_rate 3e-4:指定学习率,这里是3e-4。

--weight_decay 0.1:指定权重衰减系数,这里是0.1。

--adam_beta2 0.95:指定Adam优化器的beta2参数,这里是0.95。

--warmup_ratio 0.01:指定预热比例,这里是预热比例为总步数的1%。

--lr_scheduler_type "cosine":指定学习率调度器类型,这里是余弦退火调度器。

--logging_steps 1:指定日志记录步数,这里是每1步记录一次日志。

--report_to "none":指定报告目标,这里是不报告任何信息。

--model_max_length 512:指定模型的最大输入长度,这里是512个字符。

--lazy_preprocess True:指定是否使用懒加载预处理,这里设置为True。

--gradient_checkpointing:启用梯度检查点技术,可以在训练过程中节省显存并加速训练。

--use_lora:指定是否使用LORA(Layer-wise Relevance Analysis)技术,这里设置为True

建议:根据自己的场景调参,如训练的轮次不能太少

微调后得到的是小模型,现在让我们将它和原始模型进行合并创建py文件随便命名,然后 python x.py 执行下面代码:

from peft import AutoPeftModelForCausalLM

from transformers import AutoTokenizer

model = AutoPeftModelForCausalLM.from_pretrained( "output_qwen", device_map="auto", trust_remote_code=True ).eval()

merged_model = model.merge_and_unload()

merged_model.save_pretrained("qwen-7b-finetune", max_shard_size="2048MB", safe_serialization=True) # 最大分片2g

tokenizer = AutoTokenizer.from_pretrained( "output_qwen", trust_remote_code=True )

tokenizer.save_pretrained("qwen-7b-finetune")

最终我们就可以使用微调后的模型了测试代码:

from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig

tokenizer = AutoTokenizer.from_pretrained("qwen-7b-finetune", trust_remote_code=True)

model = AutoModelForCausalLM.from_pretrained("qwen-7b-finetune", device_map="auto",

trust_remote_code=True).eval()

response, history = model.chat(tokenizer, "", history=None)

print(response)

测试效果:

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号