大模型专栏介绍
????你好,我是小航,一个正在变秃、变强的文艺倾年。
????本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。
????适合人群:本科生、研究生、大模型爱好者,期待与你一同探索、学习、进步,一起卷起来叭!
目录
- QLora微调
- 环境准备
- 代码准备
- 模型来源
- 模型微调
- 模型评估
QLora微调
环境准备
安装教程请移步大模型自学:从入门到实战打怪升级(一)
conda activate pytorch
python
>>> import torch
>>> torch.cuda.is_available()
>>> True
>>> print(torch.__version__) #注意是双下划线
>>> 2.4.0
>>> exit()
代码准备
代码仓库:????qwen_qlora
上传代码至阿里云盘
模型来源
qwen_download.py
from modelscope.hub.snapshot_download import snapshot_download
# 使用Library Hub下载模型
model_dir = snapshot_download('qwen/Qwen-14B-Chat', cache_dir='/root/autodl-tmp/artboy/base_model/', revision='v1.0.8')
模型微调
????AutoDL:https://www.autodl.com/home
服务器选择:
显卡:A40;GPU memory:48GB;
版本镜像:pytorch 1.11.0 python3.8 Ubuntu
FP32:32Bits = 4Bytes;FP16:16Bits = 2Bytes
BatchSize = 1;SequenceLen = 1024;HiddenSize = 5120;AttentionHead = 40;Layer = 40;
模型参数大小:14B
- Model Weight:28GB
- Gradient:28GB(即 Model Weight)
- Optimizer State:168GB(即 Model Weight * 2 * 3)
- 梯度指数平滑值:56GB(即 Model Weight * 2)
- 梯度平方指数平滑值:56GB(即 Model Weight * 2)
- 模型参数:56GB(即 Model Weight * 2)
- Activation:14.5GB【BatchSize * SequenceLen * HiddenSize * Layer * (34 + 5 * AttentionHead / HiddenSize)】
全参微调至少需要238.5GB;
模型参数大小:14B
- Model Weight:28GB
- Adapter weight:0.7GB(即 Origin Adapter weight * 2.5%)
- Gradient:0.7GB(即 Origin Gradient * 2.5%)
- Optimizer State:4.2GB(即 Origin Optimizer State * 2.5%)
- Activation:0.36GB(即 Origin Activation * 2.5%)
Loar微调至少需要47.96GB;
模型参数大小:14B
- Model Weight:7GB(4bit量化)
- Double Quantization:3.6GB(即 Origin Model Weight * 0.127)
- Adapter weight:0.7GB(即 Origin Adapter weight * 2.5%)
- Gradient:0.7GB(即 Origin Gradient * 2.5%)
- Optimizer State:4.2GB(即 Origin Optimizer State * 2.5%)
- Activation:0.36GB(即 Origin Activation * 2.5%)
QLoar微调至少需要16.56GB;
创建基本目录并移动代码:
mkdir -p /root/autodl-tmp/artboy /root/autodl-tmp/tmp
cd /root/autodl-tmp/artboy
mkdir -p finetune data base_model
cd finetune
mv ~/autodl-tmp/qwen_qloar/ .
ls
下载模型:
conda create -n modelscope_env python=3.8
source activate modelscope_env
pip install modelscope
python qwen_download.py
安装依赖:
conda create -n qwen_env python=3.8
source activate qwen_env
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 也可以编写一个安装脚本
# bash install_req.sh
修改训练参数:
如果是单卡训练:train_qwen_qlora.sh
中CUDA_VISIBLE_DEVICES=0
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node=1 train_qlora.py --train_args_file config/qwen-14b-qlora.json
修改模型路径:config/qwen-14b-qlora.json中model_name_or_path
{
"output_dir": "trained_models/Qwen-14B-Chat-Keywords-1118-match-1124",
"model_name_or_path": "/root/autodl-tmp/artboy/base_model/Qwen-14B-Chat",
"train_file": "./data/text_matching_data_train.jsonl",
"num_train_epochs": 1,
"per_device_train_batch_size": 8,
"gradient_accumulation_steps": 4,
"learning_rate": 5e-5,
"max_seq_length": 1024,
"logging_steps": 10,
"save_steps": 500,
"save_total_limit": 1,
"lr_scheduler_type": "constant_with_warmup",
"warmup_steps": 300,
"lora_rank": 64,
"lora_alpha": 16,
"lora_dropout": 0.05,
"gradient_checkpointing": true,
"disable_tqdm": false,
"optim": "paged_adamw_32bit",
"seed": 42,
"fp16": true,
"report_to": "tensorboard",
"dataloader_num_workers": 0,
"save_strategy": "steps",
"weight_decay": 0,
"max_grad_norm": 0.3,
"remove_unused_columns": false
}
启动:【日志命名规则:日期_时间.log
】
nohup bash train_qwen_qlora.sh > 202400806_1153.log &
tail -f 202400806_1153.log
开启新的窗口,关注显卡使用情况:【动态调整batch_size
来合理利用GPU资源】
watch -n -1 nvidia-smi
模型评估
这里我们跑500个case测测准确率【正常应该在90%以上】,文件在data/text_matching_data_test_result.csv
:
tail data/text_matching_data_test_result.csv
句子1:今日也是爱你的一天。句子2:今天一天都是爱着你的歌词。判断这两个句子的意思是否相同: 不相同 不相同
判断下面两个句子是否表达了相同的语义:。文本1:马上关机马上关机。文本2:马上去了 答案:不相同 答案:不相同
句子1:单位怎么合法的办理给员工调动岗位和工资呢?。句子2:不接受公司调岗的劳动争议应该怎么办。判断这两个句子的意思是否相同: 不相同 不相同
下面两个句子是否表达了相同的意思:。文本1:怎么在淘宝上投诉卖家。文本2:如何投诉淘宝卖家?。答案: 相同 相同
下面两句话的意思是否相同:。文本1:这是什么时候的旗帜?。文本2:这是什么旗帜。选项:相似,不相似。答案: 不相同 不相同
下面两个句子表达的意思相同吗:。句子1:保证人可以以自己没钱,不履行担保责任么?。句子2:借款人没有钱还担保人也还不上担保人结果怎么样。选项:相似,不相似。答案: 不相同 不相同
文本1:我因为工作经常弯腰得了腰间盘突出的病,这属于工伤吗?。文本2:腰间盘突出可以作为职业病的鉴定吗?单位该如何赔偿?。这两个句子是否表达了相同的意思: 不相同 不相同
下面两个句子表达的意思相同吗?。文本1:如何使用level2软件。文本2:l2购买过以后在哪里打开使用。答案: 相同 相同
下面两个句子表达的意思相同吗:。句子1:如何查看自己购买的基金。句子2:我想查看自己的帐号怎么看。选项:相似,不相似。答案: 不相同 不相同
文本1:阿莫西林哺乳期可以吃吗。文本2:哺乳期能吃阿莫西林么?。这两个句子表达了相同的语义吗: 相同 相同
下面句子是否表示了相同的语义:。文本1:公民、法人对行政机关作出的行政处罚不服的,是否可以申请行政复议?。文本2:对行政处罚不服的公民、法人,能否申请行政复议?。选项:相似,不相似。答案: 相同 相同
执行评估脚本:
python model_evaluation.py
???? [ 笔者 ] 文艺倾年
???? [ 更新 ] 2024.9.24
❌ [ 勘误 ] /* 暂无 */
???? [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!