在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行,官方文档在这里,参考了这篇文章
首先确保ChatGLM2-6B下的有ptuning
AdvertiseGen下载地址1,地址2,文件中数据留几行
模型文件下载地址 (注意:ChatGLM2-6B对话用到的的模型文件不能简单的用到这里,bin文件可以复用,但其他文件一定要重新下载,否则要报一些错)
anaconda prompt中运行,进行虚拟环境
cd /d D:\openai.wiki\ChatGLM2-6B
conda activate D:\openai.wiki\ChatGLM2-6B\ENV
运行微调除 ChatGLM2-6B 的依赖之外,还需要安装以下依赖
pip install rouge_chinese nltk jieba datasets
先了解一下train.sh(仅在Linux中使用)里面各行的意义
PRE_SEQ_LEN=128 # soft prompt 长度
LR=2e-2 # 训练学习率
NUM_GPUS=2 # GPU卡的数量
torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \
--do_train \ # 执行训练功能,还可以执行评估功能
--train_file AdvertiseGen/train.json \ # 训练文件目录
--validation_file AdvertiseGen/fval.json \ # 验证文件目录
--prompt_column content \ # 训练集中prompt提示名称,对应训练文件,测试文件的"content"
--response_column summary \ # 训练集中答案名称,对应训练文件,测试文件的"summary"
--overwrite_cache \ # 缓存,重复训练一次的时候可删除
--model_name_or_path THUDM/chatglm-6b \ # 加载模型文件目录,也可修改为本地模型的路径
--output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ # 保存训练模型文件目录
--overwrite_output_dir \ # 覆盖训练文件目录
--max_source_length 64 \ # 最大输入文本的长度
--max_target_length 128 \
--per_device_train_batch_size 1 \ # batch_size 训练批次根据显存调节
--per_device_eval_batch_size 1 \ # 验证批次
--gradient_accumulation_steps 16 \ # 梯度累加的步数
--predict_with_generate \
--max_steps 3000 \ # 最大训练模型的步数
--logging_steps 10 \ # 多少步打印日志一次
--save_steps 1000 \ # 多少步保存模型一次
--learning_rate $LR \ # 学习率
--pre_seq_len $PRE_SEQ_LEN \
--quantization_bit 4 # 量化,也可修改为int8
Windows下用以下的train.bat
因我的电脑显存只有8G,故将per_device_train_batch_size改为8
去掉--quantization_bit 4
set PRE_SEQ_LEN=128
set LR=1e-4
python main.py ^
--do_train ^
--train_file AdvertiseGen/train.json ^
--validation_file AdvertiseGen/dev.json ^
--preprocessing_num_workers 10 ^
--prompt_column content ^
--response_column summary ^
--overwrite_cache ^
--model_name_or_path D:\\openai.wiki\\ChatGLM2-6B\\ptuning\\THUDM\\chatglm2-6b ^
--output_dir D:/openai.wiki/ChatGLM2-6B/ptuning/output ^
--overwrite_output_dir ^
--max_source_length 64 ^
--max_target_length 128 ^
--per_device_train_batch_size 8 ^# batch_size 训练批次根据显存调节
--per_device_eval_batch_size 1 ^
--gradient_accumulation_steps 16 ^
--predict_with_generate ^
--max_steps 3000 ^
--logging_steps 10 ^
--save_steps 1000 ^
--learning_rate %LR% ^
--pre_seq_len %PRE_SEQ_LEN%
进入ptuning文件夹
cd ptuning
运行train.bat,即可开始训练(有问题的话继续往后看)
train.bat
可能遇到的几个问题
- 问题一
TypeError: JsonConfig.init() got an unexpected keyword argument 'use_auth_token’
解决方式
pip uninstall datasets
pip install datasets==2.21.0
- 问题二
name ‘round_up‘ is not defined
解决方式
将train.bat中的–quantization_bit 4删除
或者pip install cpm_kernels
- 问题三
AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘
解决方式
https://huggingface.co/THUDM/chatglm2-6b/tree/main
下载除bin文件以外的最新文件