学习实践ChatGLM-6B(部署+运行+微调)

ChatGLM-6B是一个基于GLM架构的大型语言模型,拥有62亿参数,可支持在消费级GPU上进行INT4量化级别的本地部署。模型可用于问答、文案写作等多种任务。文章提供了模型的部署步骤,包括使用conda创建环境,安装PyTorch、Gradio等相关库,以及如何进行命令行和网页版的Demo运行。此外,还介绍了针对GPU显存有限的情况,如何通过量化技术降低内存需求。另外,文章还提及了如何利用P-Tuning-v2方法对模型进行微调,以适应特定数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、ChatGLM-6B内容简单介绍

该模型基于 General Language Model (GLM) 架构,具有 62 亿参数。
注:结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。
ChatGLM-6B可以实现的能力这是一个对话机器人,所以基本的问答,系统都支持。
官方提供的使用实例:
自我认知
提纲写作
文案写作
邮件助手
信息抽取
角色扮演
评论比较
旅游向导

运行界面

在这里插入图片描述

2、ChatGLM-6B模型实战

GLM模型GitHub代码地址
部署步骤如下:(注意使用的是Linux系统,本人数次尝试用Windows以失败告终)

# 新建chatglm环境
conda create -n chatglm python==3.8
# 激活chatglm环境
conda activate chatglm
# 安装PyTorch环境(根据自己的cuda版本选择合适的torch版本)
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
# 安装gradio用于启动图形化web界面
pip install gradio
# 安装运行依赖
pip install -r requirement.txt
#基于 Gradio 的网页版 Demo
python web_demo.py
#命令行 Demo
python cli_demo.py

网页版 Demo运行结果

在这里插入图片描述

命令行 Demo运行结果

在这里插入图片描述
值得注意的是: 显存够用下面这些不用管,当显存不够时(即GPU 显存有限低于13GB),尝试以量化方式加载模型的,需要添加代码.quantize(8) .quantize(4) :
int8精度加载,需要10G显存;
int4精度加载,需要6G显存;

#将句子对列表传给tokenizer,就可以对整个数据集进行分词处理
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) #将文本转换为模型能理解的数字# 自动加载该模型训练时所用的分词器model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(6).cuda()#从checkpoint实例化任何模型,下载预训练模型

3、ChatGLM-6B Ptuning-可基于模型利用自己数据集实现模型微调

微调GitHub代码地址

  1. 运行微调除 ChatGLM-6B 的依赖之外,还需跟加安装以下依赖:
pip install transformers==4.27.1
pip install rouge_chinese nltk jieba datasets
  1. 下载数据集(当然也可以是自己需要待训练的数据集)
    从 Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen 目录放到本目录下,如下图所示。
    在这里插入图片描述
    在这里插入图片描述
  2. 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 的值,但也会带来更多的显存消耗,请根据实际情况酌情调整。
    官方给出的实验设置如下:
    在这里插入图片描述
    在这里插入图片描述
    简单修改后执行bash train.sh运行程序即可
    在这里插入图片描述
ChatGLM-6B 是一种预训练语言模型,通常用于大规模文本生成、问答系统和自然语言理解等任务。部署 ChatGLM-6B 并微调至特定应用场景,如P-Tuning(Prompt Tuning),通常需要经过以下步骤: 1. **下载模型库**:首先从官方或提供者的仓库下载包含 ChatGLM-6B 的模型库,比如 Hugging Face的transformers库。 2. **加载模型**:使用对应的Python API(如`from transformers import GPT2LMHeadModel, GPT2Tokenizer`)加载模型和分词器。 3. **微调(P-Tuning)**:对于P-Tuning,你需要准备一些精心设计的提示(prompts)。将原始的模型输入更改为包含上下文提示的形式,然后通过小规模的数据集调整模型对这些提示的响应。 4. **编写API接口**:创建一个`api.py`文件,编写函数来处理用户的请求。这个函数会接受用户输入,应用P-Tuning后的模型生成响应,并返回给用户。你可以利用`model.generate()`或其他适合的方法来完成文本生成。 5. **运行服务**:设置并运行API服务,可以使用Flask、FastAPI之类的Web框架将API暴露在网络上。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer # 加载模型和分词器 model = AutoModelForCausalLM.from_pretrained("your_model_name") tokenizer = AutoTokenizer.from_pretrained("your_tokenizer_name") def generate_response(prompt): input_ids = tokenizer.encode(prompt, return_tensors="pt") response = model.generate(input_ids, max_length=100, do_sample=True) return tokenizer.decode(response[0], skip_special_tokens=True) if __name__ == "__main__": app.run_server(host='localhost', port=8000) # 示例中的服务器运行配置 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手把手教你学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值