ChatGLM2发布,位居C-Eval榜首!


ChatGLM自2023年3月发布以来,就已经爆火,如今6月25日,清华二代发布(ChatGLM2),位居C-Eval榜单的榜首(Rank0)!而ChatGLM2-6B则位居Rank6!

中文大语言模型评估基准:C-EVAL

C-EVAL: A Multi-Level Multi-Discipline Chinese Evaluation Suite for Foundation Models

论文地址:https://arxiv.org/pdf/2305.08322v1.pdf
在这里插入图片描述
不同颜色的主体表示四个难度等级:初中、高中、大学和专业。

github地址:https://github.com/SJTU-LIT/ceval

C-Eval榜单是一个全面的中文基础模型评估套件(多层次、多学科的语文评价基础模型套件)。它由13948个选择题组成 问题跨越52个不同的学科和四个难度级别,测试集用于模型评估(简单来说就是针对中文模型的综合测试机)

C-Eval榜单地址:https://cevalbenchmark.com/static/leaderboard.html
在这里插入图片描述
数据集地址:https://huggingface.co/datasets/ceval/ceval-exam

ChatGLM2-6B

项目地址:https://github.com/THUDM/ChatGLM2-6B

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:

更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。

更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。但当前版本的 ChatGLM2-6B 对单轮超长文档的理解能力有限,我们会在后续迭代升级中着重进行优化。

更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。

更开放的协议:依照 Apache-2.0 协议开源,ChatGLM2-6B 模型的权重的使用则需要遵循 Model License。ChatGLM2-6B 权重对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。

效果

相比于初代模型,ChatGLM2-6B在多个维度的能力上,都取得了巨大的提升。

不足:尽管模型在训练的各个阶段都尽力确保数据的合规性和准确性,但由于 ChatGLM2-6B 模型规模较小,且模型受概率随机性因素影响,无法保证输出内容的准确性,且模型易被误导。

部署推理

项目地址:https://github.com/THUDM/ChatGLM2-6B

HuggingFace地址:https://huggingface.co/THUDM/chatglm2-6b

环境配置

首先需要下载本仓库:

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

创建一个新的conda环境,并安装环境依赖

conda create -n chatglm2-6b python==3.9
pip install -r requirements.txt

在这里插入图片描述

模型下载

可以使用官方提供的地址,也可以从huggingface下载
官方提供模型下载地址:https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/
HuggingFace模型下载地址:
https://huggingface.co/THUDM/chatglm2-6b

下载命令(需要提前安装git-lfs):

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

我下载到了 /data/sim_chatgpt 路径下。

git-lfs安装

安装git-lfs两种方式,一种是通过命令直接安装,一种是下载到本地后安装:
直接通过命令安装:https://codeleading.com/article/2815391430/

# 先安装git(如已安装可忽略)
sudo apt-get install git
# 安装apt-get源
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# 安装git-lfs
sudo apt-get install git-lfs
# 初始化git-lfs
git lfs install

如果上面方式出现网速慢等情况,可以尝试本地安装:https://www.cnblogs.com/allmignt/p/12353756.html

这里安装好git-lfs后,直接用git clone命令完成下载。
在这里插入图片描述

代码调用

如果想只通过几行代码来测试模型,可以用以下代码:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("/data/sim_chatgpt/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/data/sim_chatgpt/chatglm2-6b", trust_remote_code=True, device='cuda')
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
你好 !我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:

1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。
4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。

如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

基于gradio的网页版Demo

安装gradio

pip install gradio

修改web_demo.py

vi web_demo.py

修改模型加载路径

tokenizer = AutoTokenizer.from_pretrained("/data/sim_chatgpt/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/data/sim_chatgpt/chatglm2-6b", trust_remote_code=True).cuda()

将share设置为True

demo.queue().launch(share=True, inbrowser=True)

运行web_demo.py

python web_demo.py

在这里插入图片描述

显存占用情况

在这里插入图片描述

数理逻辑

在这里插入图片描述
还有知识推理,长文档理解等能力可以尝试,这里就不再演示。

推理性能

显存占用的减少

ChatGLM2-6B 使用了 Multi-Query Attention,提高了生成速度。生成 2000 个字符的平均速度对比如下,

Model 推理速度 (字符/秒)
ChatGLM-6B 31.49
ChatGLM2-6B 44.62
  • Multi-Query Attention 降低了生成过程中 KV cache的显存占用;
  • ChatGLM2-6B 采用 Causal Mask 进行对话训练,连续对话时可复用前面轮次的 KV Cache,进一步优化了显存占用;
    显存占用的减小可以使得有限的显卡能审查各行更多的字符,如使用 6GB 显存的显卡进行 INT4 量化的推理时,初代的 ChatGLM-6B 模型最多能够生成 1119 个字符就会提示显存耗尽,而 ChatGLM2-6B 能够生成至少 8192 个字符。
量化等级 编码 2048 长度的最小显存 生成 8192 长度的最小显存
FP16 / BF16 13.1 GB 12.8 GB
INT8 8.2 GB 8.1 GB
INT4 5.5 GB 5.1 GB

量化对模型性能的影响

官方也测试了量化对模型性能的影响。结果表明,量化对模型性能的影响在可接受范围内。

量化等级 Accuracy (MMLU) Accuracy (C-Eval dev)
BF16 45.47 53.57
INT4 43.13 50.30

基于 P-Tuning v2 的微调(官方)

P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需要 7GB 显存即可运行。

环境配置

在原chatglm-6b的环境中安装以下依赖

pip install rouge_chinese nltk jieba datasets

微调数据准备

ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。

{ “content”: “类型#上衣版型#宽松版型#显瘦图案#线条衣样式#衬衫衣袖型#泡泡袖衣款式#抽绳”, “summary”:
“这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。”
}

Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen 目录放到本 ptuning 目录下即可。

微调

修改train.sh文件。

  • 去掉最后的 --quantization_bit 4( 去掉后为FP16 精度加载)。
  • 修改模型路径,THUDM/chatglm-6b修改为/data/sim_chatgpt/chatglm2-6b

目前专业级GPU Tesla P100也不支持INT4或8量化。

执行train.sh文件

bash train.sh

报错:
wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(k…
解决:
在main.py文件中加入下面两行,禁用wandb即可。

import os
os.environ["WANDB_DISABLED"] = "true"

其中,train.sh 中的 PRE_SEQ_LEN 和 LR 分别是 soft prompt 长度和训练的学习率,可以进行调节以取得最佳的效果。

微调过程显存使用情况如下:
在这里插入图片描述
微调完成后,在./output/adgen-chatglm2-6b-pt-128-2e-2 下回生成微调好的模型文件。

我们可以对比下微调前后的效果。
以命令行 Demo为例,只需修改cli_demo.py中的模型路径为ptuning/output/adgen-chatglm2-6b-pt-128-2e-2/checkpoint-3000,运行 cli_demo.py即可:

Input:
类型#上衣材质#牛仔布颜色#白色风格#简约图案#刺绣衣样式#外套衣款式#破洞
Label:
简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。

Output[微调前]:
在这里插入图片描述
Output[微调后]:

参考:
https://zhuanlan.zhihu.com/p/629864222
https://zhuanlan.zhihu.com/p/640301312
https://zhuanlan.zhihu.com/p/640219437

猜你喜欢

转载自blog.csdn.net/dzysunshine/article/details/131473788