惠州网站建设找惠州邦,台州关键词优化哪家好,京津冀协同发展战略,简书网站开发文章目录 一、申请资源二、创建实例三、克隆微调数据四、部署Qwen1-8B-chat模型1、环境配置2、模型下载3、本地模型部署 五、模型微调1、拉取Qwen仓库源码2、微调配置3、合并微调参数4、本地部署微调模型 一、申请资源
阿里云账号申请PAI资源详细教程我已于部署ChatGLM3时写过… 文章目录 一、申请资源二、创建实例三、克隆微调数据四、部署Qwen1-8B-chat模型1、环境配置2、模型下载3、本地模型部署 五、模型微调1、拉取Qwen仓库源码2、微调配置3、合并微调参数4、本地部署微调模型 一、申请资源
阿里云账号申请PAI资源详细教程我已于部署ChatGLM3时写过https://blog.csdn.net/Yaki_Duck/article/details/142101802?fromshareblogdetailsharetypeblogdetailsharerId142101802sharereferPCsharesourceYaki_Ducksharefromfrom_link
二、创建实例
从上面领取的资源中或者点击【控制台】-【交互式建模DSW】点击进入创建实例
这里的镜像和资源规格可以按照我的选择傻瓜式部署 ecs.gn7i-c8g1.2xlarge (8 vCPU, 30 GiB, NVIDIA A10 * 1) modelscope:1.11.0-pytorch2.1.2tensorflow2.14.0-gpu-py310-cu121-ubuntu22.04
点击确定完成实例创建。 其后回到控制台启动、打开新建的实例点击新建一个notebook.ipynb结尾。
三、克隆微调数据
数据地址https://github.com/52phm/qwen_1_8chat_finetune?tabreadme-ov-file 数据说明 qwen_chat.json小份数据chat.json中份数据 部分数据示例
[{id: identity_0,conversations: [{from: user,value: 识别以下句子中的地址信息并按照{address:[地址]}的格式返回。如果没有地址返回{address:[]}。句子为在一本关于人文的杂志中我们发现了一篇介绍北京市海淀区科学院南路76号社区服务中心一层的文章文章深入探讨了该地点的人文历史背景以及其对于当地居民的影响。},{from: assistant,value: {\address\:\北京市海淀区科学院南路76号社区服务中心一层\}}]}
]四、部署Qwen1-8B-chat模型
1、环境配置
首先安装所需要的一些包和库
!pip install deepspeed transformers4.32.0 peft pydantic1.10.13 transformers_stream_generator einops tiktoken modelscope2、模型下载
在阿里魔搭社区notebook的jupyterLab中下载模型会缓存在 /mnt/workspace/.cache/modelscope/。本地部署一般会缓存到你的C盘或用户空间所以要根据自己情况查看模型。也可以通过下面日志查看模型所在位置如2024-03-16 16:30:54,106 - modelscope - INFO - Loading ast index from /mnt/workspace/.cache/modelscope/ast_indexer。
通过该命令下载的模型就是通过modelscope 社区以 ls 的形式下载模型的存储地址为/mnt/workspace/.cache/modelscope/qwen/Qwen-1_8B-Chat/。
%%time
from modelscope import snapshot_download
model_dir snapshot_download(qwen/Qwen-1_8B-Chat)
!ls /mnt/workspace/.cache/modelscope/qwen/Qwen-1_8B-Chat/3、本地模型部署
%%time
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig query 识别以下句子中的地址信息并按照{address:[地址]}的格式返回。如果没有地址返回{address:[]}。句子为在一本关于人文的杂志中我们发现了一篇介绍北京市海淀区科学院南路76号社区服务中心一层的文章文章深入探讨了该地点的人文历史背景以及其对于当地居民的影响。
local_model_path /mnt/workspace/.cache/modelscope/qwen/Qwen-1_8B-Chat/
tokenizer AutoTokenizer.from_pretrained(local_model_path, trust_remote_codeTrue)
model AutoModelForCausalLM.from_pretrained(local_model_path, device_mapauto, trust_remote_codeTrue).eval()
response, history model.chat(tokenizer, query, historyNone)
print(回答如下:\n, response)运行结果
The model is automatically converting to bf16 for faster inference. If you want to disable the automatic precision, please manually add bf16/fp16/fp32True to AutoModelForCausalLM.from_pretrained.
Try importing flash-attention for faster inference...
Warning: import flash_attn rms_norm fail, please install FlashAttention layer_norm to get higher efficiency https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm
Loading checkpoint shards: 100%|██████████| 2/2 [00:0000:00, 2.11it/s]回答如下:在这个句子中有三个地址信息
1. 北京市海淀区科学院南路76号社区服务中心一层。
2. 文章深入探讨了该地点的人文历史背景以及其对于当地居民的影响。按照{address:[地址]}的格式返回
在一本关于人文的杂志中我们发现了一篇介绍北京市海淀区科学院南路76号社区服务中心一层的文章文章深入探讨了该地点的人文历史背景以及其对于当地居民的影响。
CPU times: user 3.51 s, sys: 280 ms, total: 3.79 s
Wall time: 3.79 s
在这里我们可以 发现部署的模型并没有理解我们意思按照我们的要求来做我们并没有得到想要的答案因此我们需要继续对其进行微调。
五、模型微调
1、拉取Qwen仓库源码
!git clone https://github.com/QwenLM/Qwen.git2、微调配置
本次使用 LoRA 参数进行微调调用Qwen/finetune.py文件进行配置与微调。 参数配置 –model_name_or_path Qwen-1_8B-Chat指定预训练模型的名称或路径这里是使用名为Qwen-1_8B-Chat的预训练模型。–data_path chat.json指定训练数据和验证数据的路径这里是使用名为chat.json的文件。–fp16 True指定是否使用半精度浮点数float16进行训练这里设置为True。–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指定是否使用LORALayer-wise Relevance Analysis技术这里设置为True 微调代码注意--data_path /mnt/workspace/qwen_1_8chat_finetune/qwen_chat.json \中填写自己下载的数据的存储地址
%%time
!python ./Qwen/finetune.py \
--model_name_or_path /mnt/workspace/.cache/modelscope/qwen/Qwen-1_8B-Chat/ \
--data_path /mnt/workspace/qwen_1_8chat_finetune/qwen_chat.json \
--fp16 False\
--output_dir output_qwen \
--num_train_epochs 10 \
--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 True \
--use_lora True3、合并微调参数
与全参数微调不同LoRA和Q-LoRA的训练只需存储adapter部分的参数。使用LoRA训练后的模型可以选择先合并并存储模型LoRA支持合并Q-LoRA不支持再用常规方式读取你的新模型。
%%time
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer # 分词
tokenizer AutoTokenizer.from_pretrained(output_qwen, trust_remote_codeTrue )
tokenizer.save_pretrained(qwen-1_8b-finetune)# 模型
model AutoPeftModelForCausalLM.from_pretrained(output_qwen, device_mapauto, trust_remote_codeTrue ).eval()
merged_model model.merge_and_unload()
merged_model.save_pretrained(qwen-1_8b-finetune, max_shard_size2048MB, safe_serializationTrue) # 最大分片2g4、本地部署微调模型
使用微调后且合并的模型进行本地部署。
%%time
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig query 识别以下句子中的地址信息并按照{address:[地址]}的格式返回。如果没有地址返回{address:[]}。句子为在一本关于人文的杂志中我们发现了一篇介绍北京市海淀区科学院南路76号社区服务中心一层的文章文章深入探讨了该地点的人文历史背景以及其对于当地居民的影响。
local_model_path qwen-1_8b-finetune
tokenizer AutoTokenizer.from_pretrained(local_model_path, trust_remote_codeTrue)
model AutoModelForCausalLM.from_pretrained(local_model_path, device_mapauto, trust_remote_codeTrue).eval()
response, history model.chat(tokenizer, query, historyNone)
print(回答如下:\n, response)运行结果
Warning: import flash_attn rms_norm fail, please install FlashAttention layer_norm to get higher efficiency https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm
Loading checkpoint shards: 100%|██████████| 2/2 [00:0000:00, 2.03it/s]回答如下:{address:北京市海淀区科学院南路76号社区服务中心一层}
CPU times: user 1.66 s, sys: 269 ms, total: 1.93 s
Wall time: 1.93 s这里就可以很清楚的看见模型通过微调训练明白了我们的意思成功提取了我们想要的信息。 reference:https://blog.csdn.net/qq_41731978/article/details/136766174?fromshareblogdetailsharetypeblogdetailsharerId136766174sharereferPCsharesourceYaki_Ducksharefromfrom_link