ChatGLM2-6B模型推理流程和模型架构详解

这篇具有很好参考价值的文章主要介绍了ChatGLM2-6B模型推理流程和模型架构详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为本人在做大模型优化方面的研究,之前拆了ChatGLM2的源代码,看看能从哪些地方深入。结果刚拆完没多久,昨天,也就是10 月 27 日,智谱 AI 在 2023 中国计算机大会(CNCC)上发布了自研第三代对话大模型 ChatGLM3,这是智谱 AI 在今年内第三次对 ChatGLM 基座模型进行了深度优化。目前还没去拆它的源代码,所以也不太清楚和2代之间有什么区别。但2代的结构我觉得可以先发以下。

1 ChatGLM是什么?

和ChatGPT类似,ChatGLM是基于GLM大模型的下游对话应用。GLM的全称是通用语言模型模型General Language model,是清华大学与智谱AI研发的中英双语大语言模型。官方API的ChatGLM是基于GLM-130B千亿基础模型,但官方也发布了GLM-6B小参数(62亿)版本,可在消费级显卡上部署。

2 一代GLM

一代发布的时间大概在一年多前,成果最早以一篇论文的形似和发布,有兴趣的可以去arxiv上看看原文(https://arxiv.org/pdf/2103.10360.pdf)。这篇文章的大概意思我稍稍总结了如下:

2.1 大模型架构

首先介绍一下目前基于transformer的大模型架构类别,主要有三类:

  • 自编码:encoder架构,善于语言建模和理解,相当于特征更凝练的embedding,Bert系列之后好像就没有新模型了。
  • 自回归:decoder架构,善于根据之前的信息生成,主流架构,如GPT等都在用,非常适合对话应用。
  • 编码器-解码器:encoder-decoder架构,善于处理seq2seq任务如翻译,2017年标准transformer就是用翻译器作为示例的,比较有名的有T5。今天要讲的GLM在本质上可以说是对T5的优化改进

可以看到,自编码和自回归是两种不同的架构和自然语言处理应用思路。之前的语言模型各有优缺点,但没有一种框架能够在所有的自然语言处理任务中都表现出色。一些先前的工作尝试通过多任务学习的方式,将不同框架的目标结合起来,但由于自编码和自回归目标本质上的不同,简单的结合不能充分继承两者的优势。因此,清华大学提出了一种基于自回归空白填充的通用语言模型(GLM),来解决这个挑战。GLM 通过添加二维位置编码和允许任意顺序预测空白区域,改进了空白填充预训练,在自然语言理解任务上超越了 BERT 和 T5。

2.2 GLM特点

主要有三个特点

  • 自编码,随机 MASK 输入中连续spans的 token
  • 自回归,基于自回归空白填充的方法重新构建spans中的内容
  • 2维的位置编码技术,来表示span间和span内位置信息

GLM 从输入文本中随机挖掉一些连续的词语(自编码思路),然后训练模型按照一定的顺序逐个恢复这些词语(自回归思路)。这种方法结合了自编码和自回归两种预训练方式的优点。
此外,GLM打乱了空白区域的预测顺序,并使用二维位置编码(第一个维度对span在原文本中的位置进行编码,第二个维度对token在span中的位置进行编码)。实验表明,GLM 在参数量和计算成本相同的情况下,能够在 SuperGLUE 基准测试中显著超越BERT,并且在使用相似规模的语料(158GB)预训练时,能够超越 RoBERTa 和 BART。GLM 还能够在自然语言理解和生成任务上显著超越 T5,而且使用的参数和数据更少。

2 二代GLM:ChatGLM2-6B为例拆解

GLM2和1在模型源代码方面没有什么区别,都是Prefix Decoder-only架构的,这种架构是在以GPT为代表的Causal Decoder-only架构上发展而来的,综合了单项注意力和双向注意力的优点(在前一部分采用双向注意力获得更加全面的信息,在后一部分采用单项注意力以适应生成式任务)。

2.1 ChatGLM2-6B模型推理架构和流程

在实验室服务器上本地部署后(如果想知道怎么部署的之后可以单写一篇),用"你好"这个最简单的输入进行测试,得到整体流程如下
glm2推理过程,架构,自然语言处理,语言模型

可以看到,这个模型在推理阶段主要由两层循环组成。

  • 第一层是while true循环,每循环一次生成一个next token,退出条件是模型生成了<eos>这个token,就是结束符。
  • 第二层循环是固定28次的for循环,对GLMBlock顺序运行28次,根据的attention scores得到最有可能的token id。

2.2 细节详解

第一步:输入与分词、编码

输入“你好”
(1)先被自动填充嵌入一个简单的prompt变成“[Round 1]\n\n问:你好\n\n答:”
(2)根据分词器的词典进行分词,模式采用的是wordpiece分词法,基本原理就是一个预先给定的词表中去套用输入文本,根据概率将给定文本分割成基本单元词片,然后用Int32的下标作为词片的id。
从上图可以看到,“[Round 1]\n\n问:你好\n\n答:”字符串在经过这一步时被处理成了一个长度为17的整数数组。其中前两个数字64790、64792是固定的开头标识。那么这个给定的分词表之后还会加上一些特殊的Token,最后形成一个长度为65024的词表。

第二步:嵌入Embedding,可迁移重用

Embedding层的参数是可训练,在你下载到本地的model文件夹中有7个二进制参数文件和一个映射表,表中可以查看ChatGLM2-6B的所有层的参数存在哪个二进制文件中。模型的Embedding层参数以及预训练好了,从图中可以看到,Embedding层的形状为65024*4096,即对第一步中提到的size=65024的词表中的每个词都可以映射为长度为4096的特征向量。
的所以只需要把第一步生成的形状为17*1的整数数组输入,即可得到一个17*4096的嵌入。由于ChatGLM2-6B支持同时输入多句话,所以真实的输入维度为[17,1,4096]分别对应序列长度(多句输入时会对所有句子padding统一到最长序列)、批数、嵌入的特征空间维度。

第三步:GLMBlock*28

GLMBlock结构图如下。可以看到也是对Transformer进行了一个魔改,但主体还是一个注意力模块和一个MLP全连接模块。下面还是从输入流的角度看看block的结构,。
(1)首先一上来就是一个RMS归一化层。
(2)进入注意力模块,对输入数据进行QKV映射,得到输入数据的Query、Key、Value值,形状分别为[17,1,32,128]、[17,1,2,128]、[17,1,2,128],可以看到Key-value的形状保持一致。
(3)然后经过核心注意力运算,也就是缩放点积注意力层,Query和Key点积后消除量纲,再点积Value,随后reshape回[17,1,4096]的形式。
(4)离开attention模块、进入MLP模块前,要完成三个操作:Dropout、残差连接、后归一化,如图。这里的残差add的值是还没经过前归一化的原始输入。
(5)进入MLP模块:要经过两次变换,中间的激活函数是SwiGLU。在这一层,虽然输入、输出的维度还是4096,但在中间过程涨到了27392,极大丰富了表示能力。
(6)离开MLP后,也要经过Dropout和残差连接,这里加的是attention结束后、后归一化前的值。最后输出GLMBlock的是一个和输入Block的shape一样的矩阵。
(7)在for循环控制下,这个输出矩阵被当作下一轮的输入,一共要走28次。这28次的Block的参数都不一样,具体见参数映射表。
另:在28轮循环中,用一个Present变量收纳了每一轮的Key、Value值,但在单步调试过程中这些值始终没有被用到。除了用于分析中间过程外,我实在想不到该怎么解释这种情况,如果有知道的大佬烦请告知,不甚感激!
glm2推理过程,架构,自然语言处理,语言模型

第四步:生成next token

在第三步的28轮GLMBlcok循环后,最后一层block输出的attention scores会被用于输出处理。输出处理主要有三个组件:
第一个是RMS归一化,相当于弥补了Block中MLP层出来后没有进行的归一化。
第二个是嵌入的逆操作,将输出的[17,1,4096]维的嵌入向量还原为id值,变成一组65024长度的输出logits。这一步实际上是根据attention scores对65025的词表进行了一个概率估计的操作。
第三个是Softmax操作,将logits变为概率(和为1),并选择其中的最大值,输出其id。这个id就是这一轮28次循环生成的token的id。在我的实例中,这个id是36474,代表“你”。
在最外层的while true循环下,只要这个id不是2(<eos>这个Token的id),就会一直生成next token。本次测试最后生成的结果如图1最下部。

3 总结

好烦,本来以为拆完了后可以推进下一步了,没想到被官方背刺了。下一步得去看看ChatGLM3的模型架构,如果改动较大的话也得做一个类似的推理流程,然后才能进入科研正轨,也就是拿这个做实验进行一些推理加速的idea印证。也不一定会出,xdm要的可以插个眼蹲一波。文章来源地址https://www.toymoban.com/news/detail-769966.html

到了这里,关于ChatGLM2-6B模型推理流程和模型架构详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ChatGLM2-6B、ChatGLM-6B 模型介绍及训练自己数据集实战

    ChatGLM2-6B、ChatGLM-6B 模型介绍及训练自己数据集实战

    介绍 ChatGLM-6B是开源的文本生成式对话模型,基于General Language Model(GLM)框架,具有62亿参数,结合模型蒸馏技术,实测在2080ti显卡训练中上(INT4)显存占用 6G 左右, 优点 :1.较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,一需求可以进一步

    2024年02月12日
    浏览(13)
  • 第五篇-ChatGLM2-6B模型下载

    可以使用如下代码下载 创建下载环境 编写代码 down_glm2.py snapshot_download其他参数 只允许下载部分类型的文件(以JSON为例) allow_patterns=‘*.json’, 不允许下载部分类型的文件(以JSON为例) ignore_patterns=[‘*.json’] 执行下 第一篇-ChatGLM-webui-Windows安装部署-CPU版 第二篇-二手工作站

    2024年02月14日
    浏览(42)
  • 三个开源大模型(chatglm2-6B, moss, llama)-chatglm2的测试

    chatglm2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6G

    2024年02月11日
    浏览(21)
  • ChatGLM2-6B 大语言模型本地搭建

    ChatGLM2-6B 大语言模型本地搭建

    ChatGLM2-6B 是清华 NLP 团队于不久前发布的中英双语对话模型,它具备了强大的问答和对话功能。拥有最大32K上下文,并且在授权后可免费商用! ChatGLM2-6B的6B代表了训练参数量为60亿,同时运用了模型量化技术,意味着用户可以在消费级的显卡上进行本地部署(INT4 量化级别下

    2024年01月21日
    浏览(29)
  • 使用Triton部署chatglm2-6b模型

    NVIDIA Triton Inference Server是一个针对CPU和GPU进行优化的云端和推理的解决方案。 支持的模型类型包括TensorRT、TensorFlow、PyTorch(meta-llama/Llama-2-7b)、Python(chatglm)、ONNX Runtime和OpenVino。 NVIDIA Triton Server是一个高性能的推断服务器,具有以下特点: 1. 高性能:Triton Server为使用GPU进行推

    2024年02月08日
    浏览(11)
  • 【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

    【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

    ChatGLM2-6B是一个开源的、支持中英双语的对话语言模型,基于General Language Model (GLM)架构。 ChatGLM2-6B具备的能力: 自我认知:“介绍一下你的优点” 提纲写作:“帮我写一个介绍ChatGLM的博客提纲” 文案写作:“写10条热评文案” 信息抽取:‘从上述信息中抽取人、时间、事件

    2024年02月14日
    浏览(13)
  • LLMs之ChatGLM2:ChatGLM2-6B本地部署之单机推理(API/CLI/GUI)、低成本部署(GPU量化部署/CPU及其量化部署/Mac部署/多卡部署)、有限资源下高效微调(全参/P-t

    LLMs之ChatGLM2:ChatGLM2-6B本地部署之单机推理(API/CLI/GUI)、低成本部署(GPU量化部署/CPU及其量化部署/Mac部署/多卡部署)、有限资源下高效微调(全参/P-tuning v2)、模型评估和推理之图文教程之详细攻略 目录 一、配置基础环境及其注意事项 第一步、检测软硬件环境

    2024年02月07日
    浏览(16)
  • 基于MacBook Pro M1芯片运行chatglm2-6b大模型

    基于MacBook Pro M1芯片运行chatglm2-6b大模型

    ChatGLM2-6B代码地址 chatglm2-6b模型地址 Mac M1芯片部署 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性: 更强大的性能。 更长的上下文。 更高效的推理。 更开放的协

    2024年01月25日
    浏览(10)
  • 【AI】清华开源中英双语对话模型ChatGLM2-6B本地安装笔记

    【AI】清华开源中英双语对话模型ChatGLM2-6B本地安装笔记

    首先,直接上资源,网盘中是ChatGLM2-6B源码及模型文件: 链接:https://pan.baidu.com/s/1DciporsVT-eSiVIAeU-YmQ 提取码:cssa 官方的Readme已经很详尽了,再写点安装博客有点画蛇添足。本着记录自己的工作内容的初衷,还是写一写吧,毕竟输出才是最好的学习。 本文记录了本地安装Cha

    2024年02月16日
    浏览(18)
  • 【LLM】chatglm-6B模型训练和推理

    【LLM】chatglm-6B模型训练和推理

    本篇文章记录下 chatglm-6B 训练和推理过程 环境:Ubuntu 20.04 + 1.13.0+cu116 chatglm-6B 源代码仓库:链接 chatglm-6B 模型权重:链接 这里使用的是 THUDM 在 hugging face 开源的模型。 因为模型比较大,仓库保存模式使用的是 git lfs 模式,再 clone 之后再使用 git lfs pull 去 download 大文件。 c

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包