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