源码链接
https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/foundation/ChatGLM-6B
Chat-GLM-6B for PyTorch
概述
简述
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 版本支持表
Torch_Version 三方库依赖版本 PyTorch 1.11 deepspeed 0.6.0 -
环境准备指导。
请参考《Pytorch框架训练环境准备》。
-
安装依赖。
- 安装基础依赖
在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。
pip install -r requirements.txt # PyTorch1.11版本
- 安装deepspeed_npu插件
# adaptor分支 git clone https://gitee.com/ascend/DeepSpeed.git cd Deepspeed pip3 install ./
准备数据集
-
获取数据集。
ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。
从 Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的
AdvertiseGen
目录放到ptuning目录下。
数据集参考目录如下├── AdvertiseGen ├──train.json ├──dev.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目录下的env_npu.sh,修改引用的环境变量位置。
-
运行训练脚本。
该模型P-Tuning v2支持单机单卡,全参数fintune支持单机8卡。
-
P-Tuning v2
启动P-Tuning v2。
bash ptuning/train.sh
-
全参数finetune
启动8卡微调。
可以用deepspeed.json配置deepspeed参数,目前默认使用zero1bash ptuning/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 //学习率
训练完成后,权重文件保存在当前路径下,并输出模型训练相关信息。
-
训练结果展示
表 1 训练结果展示表
NAME | SamplesPerSec | Iterations | DataType | Torch_Version | Card |
---|---|---|---|---|---|
Finetune -NPU | 1804 | 5000 | fp16 | 1.11 | A100 |
Finetune -GPU | 2027 | 5000 | fp16 | 1.11 | 910B |
说明:P-Tuning v2性能待补充
版本说明
变更
2023.6.25:首次发布。
FAQ
-
报错提示deepspeed.py需要版本大于等于0.6.5
# 关闭版本检测。 # 若遇到该报错 pip show transformers # 复制Location路径 # 使用fix文件夹下的deepspeed.py替换路径下transformers/deepspeed.py
-
报错提示tranining_args.py没有cuda
# 自动替换无法替换三方库中的文件。 # 若遇到该报错 pip show transformers # 复制Location路径 # 使用fix文件夹下的tranining_args.py替换路径下transformers/tranining_args.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)