中文ChatGPT平替——ChatGLM:全新对话模型内测,手把手调教开源单卡版本
ChatGLM是一个具备问答和对话功能的语言模型,目前处于内测阶段,已经开启邀请制,并且将逐步扩大内测范围。此外,ChatGLM也已经开源了最新的中英双语对话模型ChatGLM-6B,结合模型量化技术,用户可以在消费级显卡上进行本地部署。ChatGLM-6B共经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术,模型参数达到了62亿。虽然规模不及千亿模型,但是ChatGLM-6B已经能够生成相当符合人类偏好的回答,大大降低了用户部署的门槛。
GLM介绍
GLM是一个用自回归填空目标预训练的通用语言模型,可以在各种自然语言理解和生成任务上进行微调。2022年11月,斯坦福大学大模型中心对全球30个主流大模型进行了全方位的评测,GLM-130B 是亚洲唯一入选的大模型。在与 OpenAI、谷歌大脑、微软、英伟达、脸书的各大模型对比中,评测报告显示 GLM-130B 在准确性和恶意性指标上与 GPT-3 175B (davinci) 接近或持平,鲁棒性和校准误差在所有千亿规模的基座大模型(作为公平对比,只对比无指令提示微调模型)中表现不错(下图)。
关于 GLM-130B 的学术文章已被国际深度学习会议 ICLR’23 接收。自2022年8月开放以来,收到53个国家369个研究机构(截至2023年2月1日)的下载使用需求,包括谷歌、微软、脸书、AI2、华为、阿里巴巴、百度、腾讯、头条、小冰、小度、小米以及斯坦福、麻省理工、伯克利、卡耐基梅隆、哈佛、剑桥、牛津、北大、浙大、上交、复旦、中科大、国科大等国内外人工智能研究机构和高校。
ChatGLM介绍
ChatGLM 参考了 ChatGPT 的设计思路,在千亿基座模型 GLM-130B1 中注入了代码预训练,通过有监督微调(Supervised Fine-Tuning)等技术实现人类意图对齐。ChatGLM 当前版本模型的能力提升主要来源于独特的千亿基座模型 GLM-130B。它是不同于 BERT、GPT-3 以及 T5 的架构,是一个包含多目标函数的自回归预训练模型。2022年8月,我们向研究界和工业界开放了拥有1300亿参数的中英双语稠密模型 GLM-130B1,该模型有一些独特的优势:
- 双语: 同时支持中文和英文。
- 高精度(英文): 在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。
- 高精度(中文): 在7个零样本 CLUE 数据集和5个零样本 FewCLUE 数据集上明显优于 ERNIE TITAN 3.0 260B 和 YUAN 1.0-245B。
- 快速推理: 首个实现 INT4 量化的千亿模型,支持用一台 4 卡 3090 或 8 卡 2080Ti 服务器进行快速且基本无损推理。
- 可复现性: 所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。
- 跨平台: 支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。
ChatGLM-6B 特点
ChatGLM-6B 是一个具有62亿参数的中英双语语言模型。通过使用与 ChatGLM(chatglm.cn)相同的技术,ChatGLM-6B 初具中文问答和对话功能,并支持在单张 2080Ti 上进行推理使用。具体来说,ChatGLM-6B 有如下特点:
优势:
- 充分的中英双语预训练:ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。
- 优化的模型架构和大小:吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统 FFN 结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。
- 较低的部署门槛:FP16 半精度下,ChatGLM-6B 需要至少 13 GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8)和 6GB(INT4),使得 ChatGLM-6B 可以部署在消费级显卡上。
- 更长的序列长度:相比 GLM-10B(序列长度 1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。
- 人类意图对齐训练:使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(RLHF)等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。
劣势: - 相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息,也不太擅长逻辑类问题(如数学、编程)的解答。
- 可能会产生有害说明或有偏见的内容:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
- 较弱的多轮对话能力:ChatGLM-6B 的上下文理解能力还不够充分,在面对长答案生成和多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。
ChatGLM-6B本地部署(在Ubuntu18.04系统中测试通过)
(1) 首先安装git
Ubuntu环境下运行以下命令下载安装git git简介及常用命令介绍
apt-get install git
(2) 然后clone官方开源的ChatGLM-6B源码
运行以下代码下载官方源码:
git clone https://github.com/THUDM/ChatGLM-6B.git
然后进入ChatGLM-6B文件夹:
cd ChatGLM-6B
(3)安装python环境
可以使用conda新建一个python环境用于运行代码:
# 新建chatglm环境
conda create -n chatglm python=3.8
# 激活chatglm环境
conda activate chatglm
# 安装PyTorch环境(根据自己的cuda版本选择合适的torch版本)
# 建议安装torch1.12版本,版本太低例如1.7.1版本我测试过会出错
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
(4)对源文件进行一定的修改
在web_demo.py的最后一句demo.queue().launch(share=True),加两个server_name=“0.0.0.0”, server_port=1234参数,其中server_name如果是本地部署的话可以写127.0.0.1,端口可以自己定义,不要和自己电脑的一些端口冲突就行。
最后在浏览器输入http://server_name:server_port就可以开始调教了。
参考文献
[1] ChatGLM:千亿基座的对话模型启动内测,单卡版模型已全面开源 https://mp.weixin.qq.com/s/N79Sdx3K1em1EJxQZ9lcpA
[2] ChatGLM:千亿基座的对话模型开启内测
⸺对应单卡版本开源 https://chatglm.cn/blog
[3] ChatGLM-6B https://github.com/THUDM/ChatGLM-6B