今天是第30天,学习了MindNLP ChatGLM-6B StreamChat。
今天是参加打卡活动的最后一天,经过这些日子的测试,昇思MindSpore效果还是不错的。
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,具有62亿参数,基于 General Language Model(GLM)架构。
它使用了和 ChatGPT 相似的技术,并针对中文问答和对话进行了优化。经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,ChatGLM-6B 能够生成相当符合人类偏好的回答。
ChatGLM-6B 有如下特点:充分的中英双语预训练: ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。优化的模型架构和大小: 吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统 FFN 结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消费级显卡上。更长的序列长度: 相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。
ChatGLM-6B 结合了模型量化技术,用户可以在消费级的显卡上进行本地部署。例如,在 int4 量化级别下最低只需 6GB 显存。为了方便下游开发者针对自己的应用场景定制模型,它还实现了基于 P-tuning v2 的高效参数微调方法,在 int4 量化级别下最低只需 7GB 显存即可启动微调。
不过,由于其规模较小,目前已知 ChatGLM-6B 具有一些局限性,如可能存在事实性/数学逻辑错误,或许会生成有害/有偏见内容,具有较弱的上下文能力、自我认知混乱,以及对英文指示生成与中文指示完全矛盾的内容等。
在实际应用中,需根据具体的硬件需求和使用场景进行选择和部署。其硬件需求如下:
FP16(无量化):推理最低需要 13GB GPU 显存,高效参数微调最低需要 14GB GPU 显存;
INT8:推理最低需要 8GB GPU 显存,高效参数微调最低需要 9GB GPU 显存;
INT4:推理最低需要 6GB GPU 显存,高效参数微调最低需要 7GB GPU 显存。