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-32K 模型。LongBench 的测评结果表明,在等量级的开源模型中,ChatGLM2-6B-32K 有着较为明显的竞争优势。
更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
transformers 大模型中的github,通过如下方式可以自动下载模型实现和参数
//对应的实际地址为 huggingface.co/THUDM/chatglm2-6b
AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()
cuda(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。
pytorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。
注意该项目的说明:https://github.com/THUDM/ChatGLM-6B/blob/main/README.md,结合本地机器的显存大小(gpu运行)或内存大小(cpu运行),选择本地部署的模型的量化等级
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 |
访问pytorch官网 ,根据自身的情况选择pytorch适配版本
注意说明:
安装git LFS,先下载,然后本地运行
# chatglm2-6b 15G左右
git clone https://huggingface.co/THUDM/chatglm2-6b
# chatglm2-6b-int4 4G左右
git clone https://huggingface.co/THUDM/codegeex2-6b-int4
下载完成之后,选择加载本地模型运行
# 本地加载模型,因为是笔记本,只有6G显存,所以选择加载运行chatglm2-6b-int4模型
tokenizer = AutoTokenizer.from_pretrained("E:\\ChatGLM2-6B\\models\\chatglm2-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("E:\\ChatGLM2-6B\\models\\chatglm2-6b-int4", trust_remote_code=True).cuda()
AssertionError: Torch not compiled with CUDA enabled
说明:主要为Torch版本和CUDA版本不适配问题
不匹配前,操作为先卸载torch,然后根据2.2.2版本适配,重新下载适配的版本,注意先安装cuda,然后pip安装对应的torch版本
import torch
print(torch.__version__)
print(torch.cuda.is_available())
2.0.1+cpu
False
匹配后
import torch
print(torch.__version__)
print(torch.cuda.is_available())
2.0.1+cu117
True
实现过程:包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答
https://github.com/THUDM/CodeGeeX2
CodeGeeX2 是多语言代码生成模型 CodeGeeX (KDD’23) 的第二代模型。不同于一代 CodeGeeX(完全在国产华为昇腾芯片平台训练) ,CodeGeeX2 是基于 ChatGLM2 架构加入代码预训练实现,得益于 ChatGLM2 的更优性能,CodeGeeX2 在多项指标上取得性能提升(+107% > CodeGeeX;仅60亿参数即超过150亿参数的 StarCoder-15B 近10%),更多特性包括:
CodeGeeX插件测试使用: