赞
踩
1.安装conda做环境隔离
参考:从零开始学Python–Anaconda的安装及环境变量的配置
2.准备训练数据集
3.源码下载:
github:https://github.com/THUDM/ChatGLM2-6B
gitcode:https://gitcode.net/Harvey_JH/chatglm2-6b
4.模型下载:
huggingface:https://huggingface.co/THUDM/chatglm2-6b/tree/main
modelscope:https://modelscope.cn/models/ZhipuAI/chatglm2-6b/files
1.conda常用基础命令
#查看已有的conda环境
conda info --envs
#创建新的conda环境,其中your_env_name 为环境名称,python=x.x为指定python版本号
conda create -n your_env_name python=x.x
#删除环境
conda remove -n your_env_name --all
#切换环境
conda activate your_env_name
#退出环境
deactivate env_name
#克隆一个已有的环境 B为新环境的名字 A被克隆的环境名字
conda create -n B --clone A
#查看当前有的环境
conda info --envs
# conda environments:
#
base C:\ProgramData\anaconda3
chatglm3 C:\Users\Harvey\.conda\envs\chatglm3
cuda-base C:\Users\Harvey\.conda\envs\cuda-base
langchain-chat-2.4 C:\Users\Harvey\.conda\envs\langchain-chat-2.4
langchain-chat-2.6 C:\Users\Harvey\.conda\envs\langchain-chat-2.6
PS:cuda-base为基础环境,我们以这个环境为基础 克隆并新建环境
conda list查看
#创建chatglm2环境clone自cuda-base
conda create -n chatglm2 --clone cuda-base
1.在ChatGLM2-6B源码路径下新建AdvertiseGen文件夹
2.在文件夹中放入准备好的数据集
3.为了缩短时间简化流程,训练数据集和验证数据集使用了相同的数据,结构如下
[
{
"content": "你好",
"summary": "你好,我是chatpet!一个花活山的聊天宠物!"
},
{
"content": "你是谁",
"summary": "我是chatpet,一个由花活山的程序猿们开发出来的聊天宠物!"
},
{
"content": "你的开发者是谁",
"summary": "他们是来自花活山的程序猿们!是一帮有趣的人"
},
{
"content": "你叫什么",
"summary": "我是chatpet,一个由花活山的程序猿们开发出来的聊天宠物!"
},
{
"content": "花活山在哪",
"summary": "花活山是赵先生的秘密基地,他是一位不知名的赵先生"
},
{
"content": "介绍一下赵先生",
"summary": "一名有趣的灵魂,非天才型选手。同时也是一名程序猿,喜欢编程,喜欢研究新奇的东西,喜欢研究一些有趣的东西。"
}
]
4.创建一个名为output的文件中,为模型输出目录
#PS:该文件位于 ..\ChatGLM2-6B-main\ptuning下
#修改后不保存为.bat文件(Windows下需要用到bat来执行)
#将所有的\ 修改为 ^
set PRE_SEQ_LEN=128
set LR=2e-2
set NUM_GPUS=1
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:\\AIGC\\model-hub\\THUDM\\chatglm2-6b ^
--output_dir output/adgen-chatglm2-6b-pt-%PRE_SEQ_LEN-%LR ^
--overwrite_output_dir ^
--max_source_length 64 ^
--max_target_length 128 ^
--per_device_train_batch_size 1 ^
--per_device_eval_batch_size 1 ^
--gradient_accumulation_steps 16 ^
--predict_with_generate ^
--max_steps 128 ^
--logging_steps 4 ^
--save_steps 128 ^
--learning_rate %LR% ^
--pre_seq_len %PRE_SEQ_LEN%
PRE_SEQ_LEN=128: 定义了一个名为PRE_SEQ_LEN的变量,并将其设置为128。这个变量的作用在后续的代码中会用到。
LR=2e-2: 定义了一个名为LR的变量,并将其设置为2e-2,即0.02。这个变量表示学习率,在后续的代码中会用到。
–train_file AdvertiseGen/train.json : 指定训练数据文件的路径和文件名为"AdvertiseGen/train.json"。
–validation_file AdvertiseGen/verify.json : 指定验证数据文件的路径和文件名为"AdvertiseGen/verify.json"。
–prompt_column content : 指定输入数据中作为提示的列名为"content"。
–response_column summary : 指定输入数据中作为响应的列名为"summary"。
–overwrite_cache : 一个命令行参数,指示在缓存存在的情况下覆盖缓存。
–model_name_or_path D:\\AIGC\\model hub\\THUDM\\chatglm2-6b : 指定使用的模型的名称或路径为"D:\\AIGC\\model hub\\THUDM\\chatglm2-6b"。
–output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR : 指定输出目录的路径和名称为"output/adgen-chatglm-6b-pt- P R E S E Q L E N − PRE_SEQ_LEN- PRESEQLEN−LR"。这是训练结果和日志的保存位置。
–overwrite_output_dir : 一个命令行参数,指示在输出目录存在的情况下覆盖输出目录。
–max_source_length 512 : 指定输入序列的最大长度为512。
–max_target_length 512 : 指定输出序列的最大长度为512。
–per_device_train_batch_size 1 : 指定每个训练设备的训练批次大小为1。
–per_device_eval_batch_size 1 : 指定每个评估设备的评估批次大小为1。
–gradient_accumulation_steps 16 : 指定梯度累积的步数为16。在每个更新步骤之前,将计算并累积一定数量的梯度。
–predict_with_generate : 一个命令行参数,指示在生成模型的预测时使用生成模式。
–max_steps 128 : 指定训练的最大步数为128。
–logging_steps 4 : 指定每隔4个步骤记录一次日志。
–save_steps 128 : 指定每隔128个步骤保存一次模型。
–learning_rate $LR : 指定学习率为之前定义的LR变量的值。
–pre_seq_len $PRE_SEQ_LEN : 指定预设序列长度为之前定义的PRE_SEQ_LEN变量的值。
–quantization_bit 16 : 指定量化位数。这个参数可能是与模型相关的特定设置(本次采用无量化)
1.win+R输入 cmd 打开终端
#默认打开C盘 用户目录,需要切换到源码目录下
d:
#这里是源码;路径
cd D:\AIGC\git hub\THUDM\ChatGLM2-6B-main
2.conda切换到刚刚创建的chatglm2环境
conda activate chatglm2
#如果报错请使用下面这条
activate chatglm2
3.安装依赖
#使用清华源加速
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 运行微调除 ChatGLM2-6B 的依赖之外,还需要安装以下依赖
pip install rouge_chinese nltk jieba datasets transformers[torch] -i https://pypi.tuna.tsinghua.edu.cn/simple/
4.开始训练
cd ptuning
train.bat
日志截取
torch_model.bin.index.json
[INFO|configuration_utils.py:577] 2023-11-03 17:47:42,497 >> Generate config GenerationConfig {
"_from_model_config": true,
"eos_token_id": 2,
"pad_token_id": 0,
"transformers_version": "4.30.2"
}
Loading checkpoint shards: 86%|████████████████████████████████████████████████▊ | 6/7 [01:16<00:13, 13.05s/it]
问:你好
答: 你好,我是chatpet!一个花活山的聊天宠物!
label_ids [-100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 36474, 54591, 30932, 33030, 18102, 6356, 30992, 31623, 54867, 54649, 36110, 34718, 39783, 31404, 2, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100]
labels 你好,我是chatpet!一个花活山的聊天宠物!
{'loss': 2.3506, 'learning_rate': 0.019375, 'epoch': 3.0}
{'loss': 1.9099, 'learning_rate': 0.01875, 'epoch': 6.0}
{'loss': 2.1582, 'learning_rate': 0.018125, 'epoch': 10.0}
{'loss': 1.5597, 'learning_rate': 0.0175, 'epoch': 13.0}
{'loss': 1.463, 'learning_rate': 0.016875, 'epoch': 16.0}
{'loss': 1.3091, 'learning_rate': 0.01625, 'epoch': 19.0}
{'loss': 1.1508, 'learning_rate': 0.015625, 'epoch': 22.0}
{'loss': 1.4011, 'learning_rate': 0.015, 'epoch': 26.0}
{'loss': 0.9472, 'learning_rate': 0.014375, 'epoch': 29.0}
{'loss': 0.8569, 'learning_rate': 0.01375, 'epoch': 32.0}
{'loss': 0.7074, 'learning_rate': 0.013125, 'epoch': 35.0}
结束了
{'train_runtime': 153.3842, 'train_samples_per_second': 13.352, 'train_steps_per_second': 0.835, 'train_loss': 0.6400947161018848, 'epoch': 102.0}
100%|████████████████████████████████████████████████████████████████████████████████| 128/128 [02:33<00:00, 1.20s/it]
***** train metrics *****
epoch = 102.0
train_loss = 0.6401
train_runtime = 0:02:33.38
train_samples = 6
train_samples_per_second = 13.352
train_steps_per_second = 0.835
1.修改web_demo.sh并重命名为web_demo.bat
#修改ptuning_checkpoint路径 为output下的路径
set PRE_SEQ_LEN=128
python web_demo.py ^
--model_name_or_path D:\\AIGC\\model-hub\\THUDM\\chatglm2-6b ^
--ptuning_checkpoint D:\\AIGC\\git-hub\\THUDM\\ChatGLM2-6B-main\\ptuning\\output\\adgen-chatglm2-6b-pt-LR\\checkpoint-128 ^
--pre_seq_len %PRE_SEQ_LEN%
#在终端中执行
web_demo.bat
浏览器中打开 http://127.0.0.1:7860
可以看到 有效果 但是会胡言乱语,需要混合更多的语料,训练步长也需要长一点,
还伴随一些灾难遗忘和幻觉
本文仅仅简单介绍了如何在Windows环境下微调及使用ChatGLM2-6B
欢迎移步我的Github仓库,https://github.com/Jun-Howie/erniebot-openai-api
本仓库使用飞桨星河社区接入ernie-4.0联网功能,如果你需要可以Fork我的仓库,还请给个Star让我知道
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。