【NLP】Datawhale-AI夏令营Day10打卡:微调ChatGLM2-6B

⭐️ 最近参加了由Datawhale主办、联合科大讯飞、阿里云天池发起的 AI夏令营(第三期),我参与了深度学习实践-NLP(自然语言处理)方向 😄
⭐️ 作为NLP小白,我希望能通过本次夏令营的学习实践,对NLP有初步的了解,学习大模型,动手完成NLP项目内容,同时通过社区交流学习,提升调参优化等能力
⭐️ 今天是打卡的第十天,也是最后一天! ✊✊✊
⭐️ 按照日程安排,8月23日-25日主要完成任务三,同时尝试跑通大模型Topline(微调ChatGLM2-6B)

🚩【NLP】Datawhale-AI夏令营Day1打卡:文本特征提取
第一天学习了Python 数据分析相关的库(pandas和sklearn),文本特征提取的方法(基于TF-IDF提取和基于BOW提取,以及停用词的用法),划分数据集的方法,以及机器学习的模型,并尝试跑通了机器学习方法baseline。

🚩【NLP】Datawhale-AI夏令营Day2打卡:数据分析
第二天学习了数据探索、数据清洗、特征工程、模型训练与验证部分。

🚩【NLP】Datawhale-AI夏令营Day3打卡:Bert模型
第三天学习了Bert模型(预训练+微调范式),并尝试跑通了深度学习方法baseline。

🚩【NLP】Datawhale-AI夏令营Day4打卡:预训练+微调范式
第四天再次学习了预训练+微调范式,Transformer 和 Attention,并跑通深度学习方法baseline。

🚩【NLP】Datawhale-AI夏令营Day5打卡:预训练模型
第五天继续尝试理解预训练模型相关知识,并跑通深度学习方法Topline。

🚩【NLP】Datawhale-AI夏令营Day6-7打卡:大模型
第六天和第七天学习了大模型的概念,大模型的训练步骤(大尺寸预训练+指令微调+RLHF),Prompt 的概念,以及大模型微调的概念。

🚩【NLP】Datawhale-AI夏令营Day8-10打卡:大模型基础Transformer
第八、第九和第十天复盘了大模型的基础,在精读论文的基础上理解Transformer中的Multi-Head Attention等部分。

1. 学习内容

AI夏令营第三期–基于论文摘要的文本分类与关键词抽取挑战赛教程

今天学习的是任务三:进阶实践 - 大模型方法

微调方法介绍

1️⃣ LoRA(Low-Rank Adaptation):
基本思想是对模型的一部分进行低秩适应,即找到并优化那些对特定任务最重要的部分。也就是冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅 finetune 的成本显著下降,还能获得和全模型微调类似的效果。这种方法可以有效地减少模型的复杂性,同时保持模型在特定任务上的表现。对 Transformer 的每一层结构都采用 LoRA 微调的方式,最终可以使得模型微调参数量大大减少。当部署到生产环境中时,只需要计算和存储W=W0+BA,并像往常一样执行推理。与其它方法相比,没有额外的延迟,因为不需要附加更多的层。

2️⃣ P-tuning v2:
P-tuning v2是一种新的微调方法,也是chatglm官方仓库使用的微调方法。它的基本思想是在原有的大型语言模型上添加一些新的参数,这些新的参数可以帮助模型更好地理解和处理特定的任务。具体来说,P-tuning v2首先确定模型在处理特定任务时需要的新的参数(这些参数通常是模型的某些特性或功能),然后在模型中添加这些新的参数,以提高模型在特定任务上的表现。

2. 实现步骤

可以参考 Datawhale 在b站的视频,不过视频主要是在阿里云服务器上面实现的,我这边是在Windows系统本地实现的。

clone微调脚本:

git clone https://github.com/KMnO4-zx/xfg-paper.git

下载chatglm2-6b模型:

git clone https://huggingface.co/THUDM/chatglm2-6b

在这里插入图片描述

如果一直卡在这步其实是还没有完成,可以进入 chatglm2-6b 文件夹:

wget https://cloud.tsinghua.edu.cn/seafhttp/files/f3e22aa1-83d1-4f83-917e-cf0d19ad550f/pytorch_model-00001-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/0b6a3645-0fb7-4931-812e-46bd2e8d8325/pytorch_model-00002-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/f61456cb-5283-4529-a7bc-400355140e4b/pytorch_model-00003-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/1a1f68c5-1a7d-489a-8f16-8432a099d782/pytorch_model-00004-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/6357afba-bb40-4348-bc33-f08c1fcc2936/pytorch_model-00005-of-00007.bin  https://cloud.tsinghua.edu.cn/seafhttp/files/ebec3ae2-5ae4-432c-83e4-df4b147026bb/pytorch_model-00006-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/7d1aab8a-d255-47f7-87c9-4c0593379ee9/pytorch_model-00007-of-00007.bin https://cloud.tsinghua.edu.cn/seafhttp/files/4daca87e-0d34-4cff-bd43-5a40fcdf4ab1/tokenizer.model

如果 wget 报错可以看下文的内容。

直到显示:

在这里插入图片描述

在这里插入图片描述

才是完全下载成功。

进入目录安装环境:

cd ./xfg-paper
pip install -r requirements.txt

修改目录下的 xfg_train.sh 脚本文件(可用记事本打开编辑):

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --model_name_or_path ../chatglm2-6b \
    --stage sft \
    --use_v2 \
    --do_train \
    --dataset paper_label \
    --finetuning_type lora \
    --lora_rank 8 \
    --output_dir ./output/label_xfg \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --fp16

注意最后一行的结尾不要加 \
里面的部分参数需要根据自己的运行环节修改,比如:
–model_name_or_path:后面应该换成 chatglm2-6b 文件夹的路径,对于我而言,chatglm2-6b 文件夹和 xfg-paper 文件夹是在同一目录下的,因此我这里写成 …/chatglm2-6b
–per_device_train_batch_size:用于训练的批处理大小,由于我的显存比较小,因此这个参数设得比较小

然后运行 xfg_train.sh 脚本:

sh xfg_train.sh

注意上述命令是在 Linux 环境下的(教程的运行环境是阿里云服务器,Linux系统),如果是 Windows 系统,不能在cmd运行该脚本。
运行之后会开始下载:
在这里插入图片描述

如果显存不足可以降低batch_size,但本地跑还是太吃力了 😥

微调之后运行仓库内的jupyter notebook文件即可。

3. 遇到的问题解决方法

问题1:

Windows bash: wget: command not found

解决1:

安装 wget
从 wget 的官网下载 exe 文件,放到 Git 安装目录下的 Git\mingw64\bin

问题2:

E:\Jupter\NLP_Datawhale\xfg-paper>sh xfg_train.sh
'sh' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

原因是 Windows 系统不支持这种操作。

解决2:

首先下载 Git,然后打开 Git Bash,进入xfg-paper文件夹,重新运行上述命令

cd E:/Jupter/NLP_Datawhale/xfg-paper
sh xfg_train.sh

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值