介绍

  • 由清华大学知识工程 (KEG) 实验室和智谱AI公司与2023年共同训练的语言模型。
  • ChatGLM-6B 参考了 ChatGPT 的设计思路,在千亿基座模型 GLM-130B 中注入了代码预训练,通过有监督微调等技术实现与人类意图对齐(即让机器的回答符合人类的期望和价值观)。
  • 不同于训练ChatGPT需要1万+ A100显卡,ChatGLM-6B可以单机运行在消费级显卡上(13G可运行,建议16-24G显卡),未来使用空间大。

https://github.com/THUDM/ChatGLM-6B模型3月14日开源后,Github Star增速惊人,连续12天位列全球大模型下载榜第一名。

ChatGLM-6B使用、微调、训练_aigc


基于GLM (General Language Model) 架构,有62亿参数,无量化下占用显存13G,INT量化下支持单张消费级显卡(如2080Ti)上进行推理INT8量化是一种将深度学习模型中的权重和激活值从16位浮点数(FP16)减少到8位整数 INT8的技术,从而降低内存占用和计算复杂度,减少计算资源,提升推理速度

ChatGLM-6B使用、微调、训练_chatglm_02

  • ChatGLM已具备人类偏好的问答对话能力,但在一些指令上,回答存在不理解指令,或缺乏领域概念理解,生成有害内容等问题。
  • ChatGLM已具备人类偏好的问答对话能力,但在一些指令上,回答存在不理解指令,或缺乏领域概念理解,生成有害内容等问题。

GLM-130B

ChatGLM-6B使用、微调、训练_ai_03

2022年8月,智谱AI基于GLM框架,推出1300亿参数的中英双语稠密模型GLM-130B,综合能力与GPT3相当

内存节省75%,可在单台3090 (*4)或单台2080(*8)进行无损推理

高速推理,比Pytorch提升7-8倍速度

跨平台,支持不同计算平台的适配和应用

https://github.com/THUDM/GLM-130B

功能

ChatGLM-6B使用、微调、训练_chatglm_04


ChatGLM-6B使用、微调、训练_ai_05

ChatGLM-6B使用、微调、训练_chatgpt_06


更多参考:https://github.com/THUDM/ChatGLM-6B

目标

GLM

GLM: 通用语言模型预训练 https://aclanthology.org/2022.acl-long.26.pdf

GLM的出发点是将3种主流的预训练模型进行统一:

  • GPT,注意力是单向的,无法利用到下文信息。
  • BERT,注意力是双向的,在NLU上表现很好,但不适合生成任务。
  • T5,编码器中注意力是双向的,解码器中注意力是单向
    的。可同时用于NLU和生成任务,但需要更多参数量

https://github.com/THUDM/GLM

ChatGLM-6B使用、微调、训练_chatglm_07

使用

建议使用Colab,并启用GPU A100,demo1.py
源码:https://github.com/dlimeng/awesome-ai-generated/blob/main/ChatGLM%E4%BD%BF%E7%94%A8/demo1.ipynb

# Step1, 安装依赖包
!pip install transformers
!pip install sentencepiece
!pip install cpm_kernels
!pip install gradio
!pip install mdtex2html

# Step2,使用预训练模型
from transformers import AutoTokenizer, AutoModel
tokenizer =AutoTokenizer.from_pretrained("THUDM/chatglm-6b",trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b",trust_remote_code=True).half().cuda()

# Step3,创建对话chat
response, history = model.chat(tokenizer,"你好", history=[])
print(response)
response, history = model.chat(tokenizer,"晚上睡不着应该怎么办",history=history)
print(response)

ChatGLM-6B使用、微调、训练_ai_08

定制

源码:https://github.com/dlimeng/awesome-ai-generated/blob/main/ChatGLM%E4%BD%BF%E7%94%A8/ptuning1.ipynb
参考:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md
P-Tuning

ChatGLM-6B使用、微调、训练_aigc_09

  • 用自己的数据集对ChatGLM模型进行微调
  • P-Tuning V2已将需要微调的参数减少到原来的0.1%- 3%,大大加快了训练速度,同时最低GPU显存要求
    为7G(建议16-24G)
  • TIPS:AdvertiseGen数据集,训练3000steps,大约需
    要训练2小时,需要保证你的GPU有足够多的计算单元

使用P-Tuning v2进行训练

!bash train.sh

ChatGLM-6B使用、微调、训练_aigc_10


ChatGLM-6B使用、微调、训练_chatgpt_11


ChatGLM-6B使用、微调、训练_ai_12

  • Thinking:将 train.sh 中的 THUDM/chatglm-6b 改为本地的模型路径 (参考train2.sh)
  • Thinking:如何使用训练好的ChatGLM模型进行推理使用evaluate.sh,这里需要修改model_name_or_path 和 ptuning_checkpoint
  • TIPS:在 P-tuning v2 训练时模型只保存PrefixEncoder参数,所以在推理时需要同时加载原 ChatGLM-6B 模型以及 PrefixEncoder 的权重

ChatGLM-6B使用、微调、训练_chatgpt_13

轻量库

Peft库:https://github.com/huggingface/peft很方便地实现将普通的HF模型变成用于支持轻量级fine-tune的模型,目前支持4种策略:
1)LoRA:大模型的低秩适配器
2)Prefix Tuning: Optimizing Continuous Prompts for Generation
3)P-Tuning: GPT Understands, Too
4)Prompt Tuning: The Power of Scale forParameter-Efficient Prompt Tuning

ChatGLM-6B使用、微调、训练_github_14

“道生一,一生二,二生三,三生万物。”融会贯通,才能突破局限,开创未来。

我是李孟,独立开源软件开发者,SolidUI作者,对于新技术非常感兴趣,专注AI和数据领域,如果对我的文章内容感兴趣,请帮忙关注点赞收藏,谢谢!