ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。
本仓支持P-Tuning v2 和全参数fintune。
参考实现:
url=https://github.com/THUDM/ChatGLM-6B
commit_id=27b04bce90b34e719375576cc67ff5374bb2f38a
url=https://huggingface.co/THUDM/chatglm-6b/tree/v0.1.0
commit_id=f83182484538e663a03d3f73647f10f89878f438
适配昇腾 AI 处理器的实现:
url=https://gitee.com/ascend/ModelZoo-PyTorch.git
code_path=PyTorch/built-in/foundation
默认配置需要每张卡有60G以上空闲内存。
当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。
表 1 版本支持表
软件名称 | 版本 | 链接 |
---|---|---|
CANN | 7.0.RC1 | LINK |
Atlas 800T A2 | 1.0.RC3 | LINK |
FrameworkPTAdapter | 5.0.RC3 | LINK |
环境准备指导。
请参考《Pytorch框架训练环境准备》。
安装依赖。
在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。
pip install -r requirements.txt # PyTorch2.1版本
# v0.9.2分支
git clone https://gitee.com/ascend/DeepSpeed.git
cd Deepspeed
pip3 install ./
# 自动替换无法替换三方库中的文件。
pip show transformers
# 获取transformers的Location路径
# 使用fix文件夹下的tranining_args.py替换路径下transformers/tranining_args.py
获取数据集。
ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。
从 Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen
目录放到ptuning目录下。
数据集参考目录如下
├── AdvertiseGen
├──train.json
├──dev.json
预处理数据集。 为了方便启动训练后,不用再每次重复加载处理数据集,故提前进行处理。也可以下载提前处理好的数据集,提取码7s5i
bash preprocess.sh
处理好的数据集位于同目录下的train_datasets文件夹下,参考目录如下
├── train_datasets
├──data-00000-of-00008.arrow
├──data-00001-of-00008.arrow
├──data-00002-of-00008.arrow
├──data-00003-of-00008.arrow
├──data-00004-of-00008.arrow
├──data-00005-of-00008.arrow
├──data-00006-of-00008.arrow
├──data-00007-of-00008.arrow
├──dataset_info.json
├──state.json
获取语言识别模型和预训练权重
用户从链接自行获取模型文件(除了modeling_chatglm.py)和8份权重文件(pytorch_model-0000*-of-00008.bin ),并放于model目录下,微调依赖该模型权重。 model参考目录如下
├── model
├──config.json
├──configuration_chatglm.py
├──ice_text.model
├──pytorch_model-00001-of-00008.bin
├──pytorch_model-00002-of-00008.bin
├──pytorch_model-00003-of-00008.bin
├──pytorch_model-00004-of-00008.bin
├──pytorch_model-00005-of-00008.bin
├──pytorch_model-00006-of-00008.bin
├──pytorch_model-00007-of-00008.bin
├──pytorch_model-00008-of-00008.bin
├──pytorch_model.bin.index.json
├──quantization.py
├──test_modeling_chatglm.py
├──tokenization_chatglm.py
├──tokenizer_config.json
进入解压后的源码包根目录。
cd /${模型文件夹名称}/ptuning
修改ptuning目录下的env_npu.sh,修改引用的环境变量位置。
运行训练脚本。
该模型P-Tuning v2支持单机单卡,全参数fintune支持单机8卡。
P-Tuning v2
启动P-Tuning v2。
bash train.sh
全参数finetune
启动8卡微调。 可以用deepspeed.json配置deepspeed参数,目前默认使用zero2
bash ds_train_fintune.sh
模型训练参数说明如下。
公共参数:
--max_source_length //处理后句子长度
--max_target_length //目标数据长度
--per_device_train_batch_size //每卡训练批次大小
--gradient_accumulation_steps //梯度更新步数
--max_steps //最大训练步数
--logging_steps //打印信息步数
--save_steps //保存参数步数
--learning_rate //学习率
训练完成后,权重文件保存在当前路径下,并输出模型训练相关信息。
全参数finetune验证
运行以下命令
cd /${模型文件夹名称}/ptuning
bash evaluate_fintune.sh
生成结果在屏幕上显示
表 1 训练结果展示表
NAME | SamplesPerSec | Iterations | DataType | Torch_Version | Card |
---|---|---|---|---|---|
Finetune -NPU | 2213 | 5000 | fp16 | 1.11 | NPU |
Finetune -GPU | 2048 | 5000 | fp16 | 1.11 | 竞品A |
说明:P-Tuning 仅打通功能,无性能优化。
表 2 评估结果展示表
评估项 | NPU | GPU |
---|---|---|
BLEU-4 | 8.2853 | 8.1127 |
ROUGE-1 | 31.1898 | 30.7429 |
ROUGE-2 | 7.3583 | 7.1024 |
ROUGE-l | 24.9874 | 24.8157 |
说明:该结果是step=5000的验证结果。
2023.6.25:首次发布。
代码涉及公网地址参考 public_address_statement.md
报错提示deepspeed.py需要版本大于等于0.6.5
# 关闭版本检测(如安装0.9.2版本无需此操作)
# 若遇到该报错
pip show transformers
# 复制Location路径
# 使用fix文件夹下的deepspeed.py替换路径下transformers/deepspeed.py
报错checkpoint.py
# 1.11版本适配问题,新版本已修复。
# 若遇到该报错
pip show torch_npu
# 复制Location路径
# 使用fix文件夹下的checkpoint.py替换路径下torch_npu/utils/checkpoint.py
加载参数阶段有卡死现象
删除root下的cache目录,重新运行
单卡阶段报embedding_dense_grad算子错误
enbedding当前版本,不支持动静合一,静态有部分shape不支持,新版本已修复
# 若遇到该报错
修改main.py文件
torch.npu.set_compile_mode(jit_compile=False)
提示so文件错误
提示so文件找不到
# 若遇到该报错
全局搜索so的位置,然后导入环境变量
export LD_LIBRARY_PATH=/usr/:$LD_LIBRARY_PATH
eval提示scaledsoftmax报错
算子shape泛化性还有问题
# 若遇到该报错
搜索output文件夹生成的modeling_chatglm.py文件,
self.scale_mask_softmax 设置为false
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。