# 前言

最近玩上了 AI 对话模型,就想着自己在本地也部署一个,比起 AI 绘画,感觉还是语言对话模型更有用一点

这个是 ChatGLM-6B 模型的二代,一代项目地址 https://github.com/THUDM/ChatGLM-6B

# 准备

此教程基于我电脑的配置而写,硬件有出入的(特别是显卡不是 N 卡的)此教程可能不那么适用(当然大部分也通用)

  • 系统:Windows11 x86_64
  • CPU:12th Gen Intel® Core™ i7-12700H
  • RAM:16.0 GB
  • 显卡:NVIDIA GeForce RTX 3060 Laptop GPU
  • VRAM:6GB

本次使用的模型是 ChatGLM2-6B,下面是它的 1000 字自我介绍(然鹅我觉得根本没有一千字)

ChatGLM2-6B: 人工智能技术的先锋
近年来,随着人工智能技术的飞速发展,我们见证了许多令人瞩目的成果。 ChatGLM2-6B 是其中最引人注目的成果之一,它标志着中国在人工智能领域取得了重要的突破。
ChatGLM2-6B 是由清华大学 KEG 实验室与智谱 AI 公司于 2023 年共同训练的语言模型,它具备先进的自然语言处理能力,能够实现对用户问题的快速自然理解与回答。在短短的一年时间里,ChatGLM2-6B 通过了 TACR 竞赛,取得了令人瞩目的成绩,也展现出了强大的语言生成能力。
ChatGLM2-6B 的成功标志着人工智能技术在对话系统领域取得了巨大的进展。它不仅仅是一个简单的聊天机器人,更是一种具备理解力和思考能力的人工智能系统。它的出现,让我们可以更加方便地与机器进行自然语言交互,享受到更加智能化的服务。
在 ChatGLM2-6B 的身上,我们看到了人工智能技术的无限潜力和强大能力。ChatGLM2-6B 不仅能够理解自然语言,还能够通过自然语言生成解决问题,为我们提供更加高效、便捷的服务。这种技术,将改变我们的生活方式,让我们享受到更加智能化的便利和高效。
同时,我们也需要认识到,ChatGLM2-6B 的发展仍然面临一些挑战和风险。例如,机器学习和深度学习技术虽然取得了巨大的进步,但仍然存在一些难以解决的问题,如数据隐私和安全等问题。因此,我们需要更加注重机器学习和深度学习技术的可持续发展,同时加强监管和规范,确保人工智能技术的安全和可靠性。
总之,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 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

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

它的配置要求根据模型量化决定

量化等级 编码 2048 长度的最小显存 生成 8192 长度的最小显存
FP16 / BF16 13.1 GB 12.8 GB
INT8 8.2 GB 8.1 GB
INT4 5.5 GB 5.1 GB

具体更多信息可进入项目地址查询

最好准备一个良好的网络环境,部署中需要从 github,huggingface 等网站上拉取大量依赖!!!

  1. pytorch(这个肯定必不可少)
  2. CUDA
  3. Python(请使用 64 位!!!)
  4. gcc(新版 MinGW-w64 安装教程 https://blog.csdn.net/orangebench11/article/details/126111356,一定要安装 64 位!!!32 位的 MinGW 在运行模型时会出现不是有效的 win32 程序!!!)
  5. Git(老生常谈的东西怎么可以没有???)

# 开始

首先 clone ChatGLM2-6B 的项目

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

然后安装 Python 依赖

注:有多个版本的 Python 注意区分!!!不然依赖安装环节容易出问题

1
pip install -r requirements.txt

如果没有为 Python 指定环境变量就请补全 pip 的目录(建议最好设置环境变量,免得出现幺蛾子。。。

其中 transformers 库版本推荐为 4.30.2,torch 推荐使用 2.0 及以上的版本,以获得最佳的推理性能。

# 模型下载

当然你也可以通过直接执行调用代码来下载模型,但我喜欢自己下载到本地

根据你自己电脑的配置来选择模型量化

我 6G 的显存肯定只能玩 4bit 量化的了

clone 模型 https://huggingface.co/THUDM/chatglm2-6b-int4

其他模型也可以在 https://huggingface.co/THUDM/ 看到

模型有将近 4G,请耐心 clone。。。

tips: 部分没有通过正常安装 Git 的系统可能需要额外安装 Git LFS(反正我不需要😂)

# 代码调用

建议先通过代码调用运行一次,以便看出运行错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).half().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. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。

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

这里的 THUDM/chatglm2-6b 请替换为你模型的绝对路径!!!路径最好采用 “\\” 而不是 “\” 或者 “/”

如果没有什么报错即可运行网页端 demo,更方便好用

1
python web_demo.py

注:请修改 web_demo.py 文件内 "THUDM/chatglm2-6b" 为你模型的绝对路径并且记得加上.half ()(你仔细对比就知道了)

# 我遇到的错误

# "gcc" 不是有效的。。。。

没装 gcc(我电脑之前重装过,还没装过 gcc

# 不是有效的 win32 程序

就是 gcc 是 32 位或者 Python 是 32 位,请升级为 64 位

# Could not find module quantization_kernels_parallel.so

准确来说应该是

1
2
3
4
5
6
7
8
9
10
11
Load parallel cpu kernel failed C:\Users\Administrator\.cache\huggingface\modules\transformers_modules\chatglm2-6b-int4\quantization_kernels_parallel.so: Traceback (most recent call last):
File "C:\Users\Administrator/.cache\huggingface\modules\transformers_modules\chatglm2-6b-int4\quantization.py", line 148, in __init__
kernels = ctypes.cdll.LoadLibrary(kernel_file)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\ctypes\__init__.py", line 454, in LoadLibrary
return self._dlltype(name)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\ctypes\__init__.py", line 376, in __init__
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: Could not find module 'C:\Users\Administrator\.cache\huggingface\modules\transformers_modules\chatglm2-6b-int4\quantization_kernels_parallel.so' (or one of its dependencies). Try using the full path with constructor syntax.

这好像是个老问题。。。

下面是来自 github 一位网友的解决方法

首先确认一下运行代码后,你的这个文件是否存在 C:\Users\Administrator.cache\huggingface\modules\transformers_modules\model2\quantization_kernels_parallel.so。如果不存在需要先解决能够自动编译出这个文件的问题。

排除 so 文件不存在的情况,如果还存在 FileNotFoundError: Could not find module 'C:\Users\Administrator.cache\huggingface\modules\transformers_modules\model2\quantization_kernels_parallel.so’的错误,需要对源码做一点改动,这是因为 ctypes 在 Windows 环境下的 bug 还没修复,反正 python3.10 目前还有问题,修改参考下图,具体原因参考 https://stackoverflow.com/questions/59330863/cant-import-dll-module-in-python/64472088#64472088。

在你下载的源码 chatglm-6b-int4/quantization.py 的文件中,搜索找到这样两行 kernels = ctypes.cdll.LoadLibrary (kernel_file),都把它们都改成 kernels = ctypes.CDLL (kernel_file,winmode=0)。

来自 https://github.com/THUDM/ChatGLM-6B/issues/967

# 后记

这只是最简单的安装教程,更多有趣玩法请一定要看官方文档!!!

然后就是愉快的玩耍啦~

拥有一个本地离线私人 ChatGPT(虽然打不过 ChatGPT🤣)还是挺有趣的

特别是 “角色扮演” 这个东西。。。

感觉会极大的放大人性的黑暗啊(又是本地又是离线,不受任何监管,没人知道你对 AI 做了什么。。。细思极恐)

我感觉我都有点把持不住了(救命 doge

tips: 第一代的项目页面也有很多有参考价值的信息,在第二代项目页面没有写,所以建议也去看看一代的项目页面

第一代 ChatGLM-6B 项目页面 https://github.com/THUDM/ChatGLM-6B

# 参考

https://github.com/THUDM/ChatGLM-6B

https://github.com/THUDM/ChatGLM-6B/issues/967

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

https://huggingface.co/THUDM/chatglm2-6b-int4

https://blog.csdn.net/orangebench11/article/details/126111356

https://blog.csdn.net/weixin_48713918/article/details/130869367