大模型微调项目-更新

火山方舟向量数据库大模型

写在前面

大家好,我是刘聪NLP。

不知不觉之间,距开源ChatGLM-Finetuning项目已经过去了8个月。大模型也在飞速的发展,开源社区也是越来越活跃,开源模型越来越多。

picture.image

中间更新过一次,将代码重构让大家更容易理解,本次更新主要增加ChatGLM3模型和增加模型预测代码。

Github: https://github.com/liucongg/ChatGLM-Finetuning

为什么要再次更新呢?

  • 支持ChatGLM3模型是为了让这个项目有一个更好的延续,如果后面有ChatGLM4的话,还会继续更新。
  • 细心的朋友应该可以发现本项目的训练数据构造代码,是参考每个模型在chat部分数据构造进行编写的。所以用本项目训练完的模型,预测阶段用model.chat即可。这也是为什么上一次更新没有提供predict代码的原因。

本项目的宗旨,还是带领大家入门学习,带领大家用不同方式的微调(Freeze方法、Lora方法、P-Tuning方法和全量参数)来进行大模型微调实验,欢迎大家Star。

PS:本项目应该不会增加其他系列模型了,如果做的话也是重开一个新的项目,后面争取在该项目上补充增加一些注释内容,帮助更多的初学者或者非专业人员理解代码吧。

项目介绍

本项目主要针对ChatGLM、ChatGLM2和ChatGLM3模型进行不同方式的微调(Freeze方法、Lora方法、P-Tuning方法、全量参数等),并对比大模型在不同微调方法上的效果,主要针对信息抽取任务、生成任务、分类任务等。

本项目支持单卡训练&多卡训练,由于采用单指令集方式微调,模型微调之后并没有出现严重的灾难性遗忘。

由于官方代码和模型一直在更新,目前ChatGLM1和2的代码和模型的为20230806版本(注意如果发现代码运行有误,可将ChatGLM相关源码替换文件中的py文件,因为可能你下的模型版本与本项目代码版本不一致),ChatGLM3是版本20231212。

PS:没有用Trainer(虽然Trainer代码简单,但不易修改,大模型时代算法工程师本就成为了数据工程师,因此更需了解训练流程)

更新简介

  • update-2023.12.12 增加ChatGLM3代码支持,通过model_type完成模型切换,并增加推理代码。
  • update-2023.08.06 代码和模型已经更新到最新,支持单卡&多卡训练,支持ChatGLM2模型训练、支持全量参数训练,所有代码进行了结构增加可读性。
  • update-2023.06.12 增加流水线并行训练方法,请看v0.1 Tag
  • update-2023.04.18 增加文本生成任务评测,请看v0.1 Tag
  • update-2023.04.05 增加信息抽取任务评测,请看v0.1 Tag

微调方法

Freeze方法-ChatGLM3单卡训练


          
CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --train_type freeze \  
                --freeze_module_name "layers.27.,layers.26.,layers.25.,layers.24." \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --output_dir ./output-glm3  

      

Ptuning方法-ChatGLM3单卡训练


          
CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --train_type ptuning \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --pre_seq_len 16 \  
                --prefix_projection True \  
                --output_dir ./output-glm3  

      

Lora方法-ChatGLM3单卡训练


          
CUDA_VISIBLE_DEVICES=0 deepspeed --master_port 520 train.py \  
                --train_path data/spo_0.json \  
                --model_name_or_path ChatGLM3-6B/ \  
                --per_device_train_batch_size 1 \  
                --max_len 1560 \  
                --max_src_len 1024 \  
                --learning_rate 1e-4 \  
                --weight_decay 0.1 \  
                --num_train_epochs 2 \  
                --gradient_accumulation_steps 4 \  
                --warmup_ratio 0.1 \  
                --mode glm3 \  
                --lora_dim 16 \  
                --lora_alpha 64 \  
                --lora_dropout 0.1 \  
                --lora_module_name "query\_key\_value,dense\_h\_to\_4h,dense\_4h\_to\_h,dense" \  
                --seed 1234 \  
                --ds_file ds_zero2_no_offload.json \  
                --gradient_checkpointing \  
                --show_loss_step 10 \  
                --output_dir ./output-glm3  

      

全参方法-ChatGLM3四卡训练,通过CUDA_VISIBLE_DEVICES控制具体哪几块卡进行训练,如果不加该参数,表示使用运行机器上所有卡进行训练


          
CCUDA_VISIBLE_DEVICES=0,1,2,3 deepspeed --master_port 520 train.py \  
              --train_path data/spo_0.json \  
              --model_name_or_path ChatGLM3-6B \  
              --per_device_train_batch_size 1 \  
              --max_len 1560 \  
              --max_src_len 1024 \  
              --learning_rate 1e-4 \  
              --weight_decay 0.1 \  
              --num_train_epochs 2 \  
              --gradient_accumulation_steps 4 \  
              --warmup_ratio 0.1 \  
              --mode glm3 \  
              --train_type all \  
              --seed 1234 \  
              --ds_file ds_zero3_no_offload.json \  
              --gradient_checkpointing \  
              --show_loss_step 10 \  
              --output_dir ./output-glm3  

      

更多内容,请看Github。

picture.image

写在后面

最近流感高发期,我已中招。 望大家都保重身体。

欢迎多多关注公众号「NLP工作站」,欢迎加入交流群,有问题的朋友也欢迎加我微信「logCong」私聊,交个朋友吧,一起学习,一起进步。我们的口号是“生命不止,学习不停”。

PS:新书已出《ChatGPT原理与实战》,欢迎购买。

往期推荐:

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
IDC 大模型应用落地白皮书
大模型技术已深度融入业务实践,各企业期望其释放更大商业价值。 但大模型落地之路面临许多挑战和顾虑。 如何精准对接业务需求与发展蓝图,制定切实可行的大模型落地策略? IDC发布首个大模型应用策略与行动指南 一为您揭晓一
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论