ChatGLM2-6B本地部署或云端部署配置过程

1、电脑配置

首先,本地部署先看一下自己的电脑配置够不够:

ChatGLM2-6B本地部署或云端部署配置过程_第1张图片

 如果要是用CPU运行的话,要保证有32G内存才可以。

2、项目和模型下载

从github上下载源代码

 git clone https://github.com/THUDM/ChatGLM2-6B

 从Hugging Face Hub上下载模型

 git clone https://huggingface.co/THUDM/chatglm2-6b

 模型下载后放入源代码项目文件夹内。如图:ChatGLM2-6B本地部署或云端部署配置过程_第2张图片

 ChatGLM2-6B-Demo的百度网盘连接:ChatGLM2-6B-demo_免费高速下载|百度网盘-分享无限制 (baidu.com)

 3、conda环境配置

以下是我在自己电脑上的配置过程,因为网络不算稳定,直接使用requirement.txt下载不了。

conda create -n chat python=3.8
以下是根据pytorch官网copy的下载2.0版本的指令:
pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

以下是自行安装requirement里面的第三方库,这样不容易出意外:
pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers==4.30.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install cpm_kernels -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mdtex2html -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sentencepiece -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sse-starlette -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple

最后
更新charset_normalizer依赖库,不然必报错。
pip install --upgrade charset_normalizer
安装CLI所用到的charset_normalizer依赖库,不然必报错。
pip install pyreadline
如果你需要使用Demo2方式运行,一定要安装Streamlit依赖库才可以正常运行,该库可以用来实现打字机效果,建议直接无脑安装。
pip install streamlit streamlit-chat

 如果网络稳定,建议用以下官方的方式进行安装:

创建虚拟环境:
conda create -n chat python=3.8
安装部署所需的环境:
pip install -r requirements.txt
安装微调所需的环境:
pip install rouge_chinese nltk jieba datasets
额外需要的依赖:
pip install tensorboard

4、运行

一共有3种启动方式,分别是目录中的cli_demo.pyweb_demo.pyweb_demo2.py三个文件,三种启动方式对应着3种UI界面,所实现的功能都是一样的,只不过操作交互上存在些许不同而已。

激活环境
conda activate chat
cd到项目文件夹下
cd ChatGLM-6B-demo
启动对应的文件(这里给出三种):
python web_demo.py
python web_demo1.py
python cli_demo.py

我采用的是cli_demo.py的方式运行的,如图:

ChatGLM2-6B本地部署或云端部署配置过程_第3张图片

 5、模型微调(以下是根据官方教程加上自己的理解做的笔记)

官方教程:【官方教程】ChatGLM2-6B 部署与微调_哔哩哔哩_bilibili

ChatGLM2-6B本地部署或云端部署配置过程_第4张图片

 在github仓库中有做好的微调可以直接用(和上面源码是一个链接):THUDM/ChatGLM2-6B: ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型 (github.com)

 主要是两种微调方式(支持多轮对话数据集和生成任务数据集):

  • 基于P-tuning V2的参数高效微调
  • 全参数微调

做模型微调需要了解哪些原理?共有哪些方式可以做微调?

ChatGLM2-6B本地部署或云端部署配置过程_第5张图片

 这种微调方式难度比较高、实现困难、不可控、不稳定。虽然可以用,但一般不建议采用这种方式进行微调

 ChatGLM2-6B本地部署或云端部署配置过程_第6张图片

 这种就是对模型权重做优化,通过对模型进行进一步的训练来更新参数,使得模型适配专业领域,这个PPT中包含两种方式:

  • 左边的是对模型进行全参数微调(这种效果比较好,但需要更好的GPU资源),比如用ChatGLM2-6B,需要对60亿个参数进行更新和调整。至少需要13*4=52G的显存进行全参数微调
  • 右边的是对模型进行参数高效微调(资源有效的情况下可以用),不会再对60亿的参数进行全部的调整,只引入非常少(如几十万或者几百万)的参数做微小的调整,再把这些参数加到原来的模型权重中。对于这部分的原理:神经网络训练本身就是做的矩阵运算,再超大型矩阵上附上一个旁路(非常小,5000*10或者5000*5),降低运算成本,最后将小的微调矩阵加到原本的大矩阵上,对大矩阵进行更新。

GitHub仓库中使用的微调(参数高效微调):

ChatGLM2-6B本地部署或云端部署配置过程_第7张图片

对应的是源代码文件中的ptuning文件夹里面的train.shevaluate.sh

 ChatGLM2-6B本地部署或云端部署配置过程_第8张图片

ChatGLM2-6B本地部署或云端部署配置过程_第9张图片

使用官方提供的广告数据集,对chatglm2-6b使用P-tuningV2进行微调:

将下载好的数据集放到ptuning文件夹中,文件结构如图:

ChatGLM2-6B本地部署或云端部署配置过程_第10张图片

 在配置好的conda环境中,cd到ptuning文件夹路径下运行指令:

bash train.sh

train.sh文件设置如图:ChatGLM2-6B本地部署或云端部署配置过程_第11张图片

train.sh 中的 PRE_SEQ_LEN 和 LR 分别是 soft prompt 长度和训练的学习率,可以进行调节以取得最佳的效果。P-Tuning-v2 方法会冻结全部的模型参数,可通过调整 quantization_bit 来被原始模型的量化等级,不加此选项则为 FP16 精度加载。

在默认配置 quantization_bit=4、per_device_train_batch_size=1、gradient_accumulation_steps=16 下,INT4 的模型参数被冻结,一次训练迭代会以 1 的批处理大小进行 16 次累加的前后向传播,等效为 16 的总批处理大小,此时最低只需 6.7G 显存。若想在同等批处理大小下提升训练效率,可在二者乘积不变的情况下,加大 per_device_train_batch_size 的值,但也会带来更多的显存消耗,根据实际情况酌情调整。

最后,运行成功并训练:

你可能感兴趣的:(笔记)