ChatGLM2介绍
ChatGLM2-6B
源码地址:https://github.com/THUDM/ChatGLM2-6B
ChatGLM2-6B
是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:
1、更强大的性能
:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
2、更长的上下文
:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。但当前版本的 ChatGLM2-6B 对单轮超长文档的理解能力有限,我们会在后续迭代升级中着重进行优化。
3、更高效的推理
:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
4、更开放的协议
:ChatGLM2-6B 权重对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。如果您发现我们的开源模型对您的业务有用,我们欢迎您对下一代模型 ChatGLM3 研发的捐赠。
博主个人体验,本次chatglm2-6b相较于chatglm1有质的提升,很多情况下不像1代乱说,错误表述了。而且很明显的一点,对话推理速度更快,对话长度更长。
Rola微调
系统环境
内存:1.5T (40G左右就够用了)
GPU:8 * 2080TI
CUDA:11.7 (原12.2,版本太高,进行了降低版本处理,下文有介绍)
获取项目
Respect @ssbuild
git clone https://github.com/ssbuild/chatglm2_finetuning.git)
环境安装
安装chatglm2-6b的环境requirements.txt
:
protobuf
transformers==4.30.2
cpm_kernels
torch>=2.0
gradio
mdtex2html
sentencepiece
accelerate
安装Lora微调的环境requirements.txt
:
deep_training>=0.1.10,<0.1.12
cpm_kernels
transformers>=4.30
deepspeed
bitsandbytes>=0.39
accelerate>=0.20
bitsandbytes
cchardet
当前还有一个安装包需要额外安装:deep_training
,这个包需要通过源码安装:
git clone https://github.com/ssbuild/deep_training.git
cd deep_training
pip install .
配置微调参数
参数修改:
config/constant_map.py
修改模型路径,如下图:
config/main.py
使用lora微调,设置为True,enable_int4 = True
使用int4加载,会减少一些显存的占用。
config/sft_config_lora.py
配置gpu占用:
适当修改batch_size
,防止显存溢出,自由设定:
适当修改max_seq_length
防止显存溢出,自由设定:
微调训练
执行 main.py 入口文件:
python train.py
Epoch 99: 100%|████████████| 38/38 [00:14<00:00, 2.71it/s, v_num=4, loss=3.830]INFO:lightning_fabric.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=100` reached.
Epoch 99: 100%|████████████| 38/38 [00:14<00:00, 2.70it/s, v_num=4, loss=3.830]
预训练模型位置:
./best_ckpt
模型测试
python infer_lora_finetuning.py
报错解决
1、报错:
.conda/envs/gf_python38/lib/python3.8/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cquantize_blockwise_fp16_nf4
出现问题原因:libbitsandbytes_cpu
版本不对导致的
解决:
在目录.conda/envs/gf_python38/lib/python3.8/site-packages/bitsandbytes
,用自己的cuda版本.so 覆盖libbitsandbytes_cpu.so
即:cp libbitsandbytes_cuda117.so libbitsandbytes_cpu.so
博主问题更严重,博主GPU驱动cuda版本为12.2,而且在当前目录中没有12.2的版本。而且pytorch我看也没有支持12.2这么新的cuda,所以果断降了一次版本,重新安装cuda11.7。
cuda版本选择
cuda安装地址
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-rhel7-11-7-local-11.7.0_515.43.04-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-11-7-local-11.7.0_515.43.04-1.x86_64.rpm
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers
可以使用nvidia-smi
进行测试,查看cuda版本是否更新,如果报错,请重启reboot
。
报错内容如下,需要重启:
(python38) -bash-4.2$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.43.04 Driver Version: 515.43.04 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:5A:00.0 Off | N/A |
| 28% 37C P0 63W / 250W | 0MiB / 11264MiB | 0% Default |
| | | N/A |