当前位置:   article > 正文

【通览一百个大模型】GLM(THU)_glm大模型

glm大模型

【通览一百个大模型】GLM(THU)

作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo

订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干货资料大礼包,近200篇论文,300份博主亲自撰写的markdown笔记,近100个大模型资料卡,助力NLP科研、学习和求职。


一、GLM原理

GLM大模型基本资料卡

序号大模型名称归属推出时间规模预训练语料评测基准模型与训练方法开源论文模型地址相关资料
13GLM清华NLP2022-05<1B、2B、10BWikipedia、BookCorpus等13GB英文语料;
中文版本模型预训练语料为wudao2.0
SuperGLUE、CNN/DailyMail、XSum(1)预训练任务为自回归填充任务。通过attention进行统一训练。输入部分含有mask片段的文本(蓝色),所有token的全部可见;输出部分为自回归式依次生成被mask的各个片段的文本(黄绿色),片段顺序是被打乱的(黄绿色先后顺序是随机的),attention矩阵被mask,每个片段生成起始终止符号为[S]和[E]。
image.png
(2)多任务训练:文档级别和句子级别的填充任务;
(3)Fine-tuning:所有NLG和NLU转换为生成式任务。
GithubGLMhttps://huggingface.co/THUDM/glm-10b-chinese
glm-10b
查看

GLM模型架构及预训练目标如下所示:
image.png

GLM相关开源项目:


模型架构: Decoder-only Transformer模型

  • 更换了Layer Normalization和residual connection的顺序;
  • 用单层线性层来预测输出的token;
  • 激活函数更换为GeLUs;
  • position embedding:定义了两个不同的绝对位置
  • Attention Mask:输入的文本中token相互可见;生成的文本中,后一个token只能看到前面的token。

预训练任务:输入一个含有masked token的文本[MASK](蓝色),按照causal language modeling目标生成masked token对应的文本(黄色和绿色)。预训练时生成的masked token先后顺序是随机的,同时每一个masked span都有两个特殊标记[START]和[END];

  • Document-level:整个文档的50%~100%的连续token被mask;
  • sentence-level:mask完整的句子,直到mask大约15%的token

下游微调&推理

  • 分类:输入一个文本,添加一个It was [MASK],通过verbalizer来预测类别;
  • 生成:输入一个文本,文本末尾添加一个[MASK],复用Causal LM生成结果;

目前开放的GLM系列模型如下表所示:

NameParamsLanguageCorpusObjectiveFileConfig
GLM-Base110MEnglishWiki+BookTokenglm-base-blank.tar.bz2model_blocklm_base.sh
GLM-Large335MEnglishWiki+BookTokenglm-large-blank.tar.bz2model_blocklm_large.sh
GLM-Large-Chinese335MChineseWuDaoCorporaToken+Sent+Docglm-large-chinese.tar.bz2model_blocklm_large_chinese.sh
GLM-Doc335MEnglishWiki+BookToken+Docglm-large-generation.tar.bz2model_blocklm_large_generation.sh
GLM-410M410MEnglishWiki+BookToken+Docglm-1.25-generation.tar.bz2model_blocklm_1.25_generation.sh
GLM-515M515MEnglishWiki+BookToken+Docglm-1.5-generation.tar.bz2model_blocklm_1.5_generation.sh
GLM-RoBERTa335MEnglishRoBERTaTokenglm-roberta-large-blank.tar.bz2model_blocklm_roberta_large.sh
GLM-2B2BEnglishPileToken+Sent+Docglm-2b.tar.bz2model_blocklm_2B.sh
GLM-10B10BEnglishPileToken+Sent+DocDownloadmodel_blocklm_10B.sh
GLM-10B-Chinese10BChineseWuDaoCorporaToken+Sent+DocDownloadmodel_blocklm_10B_chinese.sh

GLM仓库:https://github.com/THUDM/GLM

使用GLM进行文本生成任务,例如:

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-10b", trust_remote_code=True)
model = AutoModelForSeq2SeqLM.from_pretrained("THUDM/glm-10b", trust_remote_code=True)
model = model.half().cuda()
model.eval()

# Inference
inputs = tokenizer("Ng is an adjunct professor at [MASK] (formerly associate professor and Director of its Stanford AI Lab or SAIL ). Also a pioneer in online education, Ng co-founded Coursera and deeplearning.ai.", return_tensors="pt")
inputs = tokenizer.build_inputs_for_generation(inputs, max_gen_length=512)
inputs = inputs.to('cuda')
outputs = model.generate(**inputs, max_length=512, eos_token_id=tokenizer.eop_token_id)
print(tokenizer.decode(outputs[0].tolist()))

# Training
inputs = tokenizer(
    ["Tsinghua University is located in [MASK].", "One minus one equals zero, is it correct? Answer: [MASK]"],
    return_tensors="pt", padding=True)
inputs = tokenizer.build_inputs_for_generation(inputs, targets=["Beijing", "No"], max_gen_length=8, padding=False)
inputs = inputs.to('cuda')
outputs = model(**inputs)
loss = outputs.loss
logits = outputs.logits
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

二、ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,

2.1 硬件需求

量化等级最低 GPU 显存(推理)最低 GPU 显存(高效参数微调)
FP16(无量化)13 GB14 GB
INT88 GB9 GB
INT46 GB7 GB

环境安装

使用 pip 安装依赖:pip install -r requirements.txt,其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。
此外,如果需要在 cpu 上运行量化后的模型,还需要安装 gcc 与 openmp。多数 Linux 发行版默认已安装。对于 Windows ,可在安装 TDM-GCC 时勾选 openmp。 Windows 测试环境 gcc 版本为 TDM-GCC 10.3.0, Linux 为 gcc 11.3.0。在 MacOS 上请参考 Q1

2.2 代码调用

>>> 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()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/379462
推荐阅读
相关标签