下面是官方对ChatGLM的介绍:
ChatGLM-6B,结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。经过约 1T 标识符的中英双语训练,辅以监督微调、 反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 虽然规模不及千亿模型,但大大降低了用户部署的门槛,并且已经能生成相当符合人类偏好的回答。
通过05-25更新的lmsys arena Leaderboard[1]可以看到:
在英文问题上,6b的规模排在第14,排在他前面且规模更小的只有fastchat-t5-3b,fastchat-t5-3b和vicuna都出自lmsys团队,采用真实用户数据——shareGPT,它对模型效果提升十分明显。在非英文问题上,ChatGLM排名第7,规模比前面的模型都小,排在它前面的模型基座来自于Open AI、Anthropic和Meta(vicuna的基座是LLaMA)。
这里首先要提到ChatGLM团队先前的工作——GLM 130B。这是一份相当扎实的工作,[2]中还介绍他们在过程中碰到的问题和解决方案,对大模型训练十分有参考性。另外,值得一提的是,ChatGLM有别于类似GPT、LLaMA的单向解码器,它在上下文部分是双向的,而输出部分是单向的,通过下图可以清晰地看明白:
ChatGLM的官网[3]引用了HELM的大模型评估,可以看到GLM和GPT-3效果接近。但[2]中有提到,GLM在预训练过程中加入了指令数据,这无疑会提升模型在下游任务的表现,而GPT-3仅仅是做了文本的预训练。
从官方的描述中我们可以知道:ChatGLM经过 1T 标识符的中英双语训练。有了GLM-130B的经验,在6B规模上做预训练便轻车熟路。值得注意的点是——1T标识符的中英双语,相信这是ChatGLM在中文上表现优异的重要原因,虽然说在英文习得的能力也能迁移到中文上,但迁移的过程中会损失多少,以及有些表达是只有在中文语境下才特有的。所以现在BELLE[4]、Linly[5]等开源工作都会选择在LLaMA的基础上进行包括中文的继续预训练。关键是,中文的优质数据是少于英文的,不知道这1T标识符的中英双语是多少个epoch的结果,如果只是1个epoch,那意味着ChatGLM的数据优势十分明显。数据是data-centric AI范式的关键。
ChatGLM-6B模型使用
一、创建环境
conda create -n chatglm python=3.8
conda activate chatglm
二、下载代码
git clone https://github.com/THUDM/ChatGLM-6B.git
三、安装依赖
我这里是cuda11.2,根据自己的版本安装,这里是pytorch版本:https://pytorch.org/get-started/previous-versions/
pip install torch==1.10.0+cu111 torchvision==0.11.1+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirement.txt
四、修改代码
vim web_demo.py
# 增加server_name和server_port参数
demo.queue().launch(share=True,server_name="0.0.0.0",server_port=9234)
# 如果gpu太小,修改如下代码
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()
五、运行代码
python web_demo.py