ChatGLM系列解析(二)—— ChatGLM2

        ChatGLM2在ChatGLM1的基础上进行了多方面的优化和改进,本文将会重点讲述其中的优化与收益。

一、主要收益

        1. 长文本处理能力:通过FlashAttention技术,ChatGLM2扩展了文本处理长度限制,支持更长的上下文输入,从ChatGLM1的2K提升到了32K,使得模型能够处理更长、更复杂的文本数据。同时,对话阶段使用8K的上下文长度训练,允许更多轮次的对话。提升了模型根据用户反馈进行自我优化的可能性,进一步优化多轮对话质量。

        2. 更低的显存占用:基于Multi-Query Attention(MQA)技术,‌ChatGLM2-6B实现了更高效的推理速度和更低的显存占用。‌

        官方数据显示,‌推理速度相比初代提升了42%,‌在INT4量化下,‌6G显存支持的对话长度从1K提升到8K。‌

        3. 数据集表现:ChatGLM2在多个数据集上均取得了大幅度的提升。据相关数据显示,ChatGLM2在MMLU(+23%)、CEval(+33%)、GSM8K(+571%)、BBH(+60%)等方面均展现出了更强的竞争力。这一成绩不仅证明了ChatGLM2的强大性能,也为其在各个领域的应用提供了更广阔的可能性。(3的内容,来自于GPT-4和文心一言,你还别说好用~)

二、核心技术

  1. FlashAttention:优化GPU内存访问开销,通过tiling、重计算、核融合等方式提升注意力机制推理速度。详情,请见本人博客FlashAttention解析——大预言模型核心组建-CSDN博客

  2. Multi-Query Attention(MQA):19年的技术,Query依旧分为多个Head,但是每个Head均共享一个Key和Value。详情,请见本人博客MQA(Multi-Query Attention)详解-CSDN博客

  3. 旋转位置编码(Rotary Position Encoding,简称RoPE)。ChatGLM2使用了新的位置编码。旋转位置编码是一种特殊的位置编码方式,它通过旋转嵌入(Rotary Embedding)来实现对位置信息的编码。这种编码方式能够有效地将位置信息融入到Transformer模型的输入中,帮助模型区分不同位置的token,从而更好地理解句子的语义结构。

  4. ChatGLM2升级了基座模型,‌使用了GLM的混合目标函数。目标函数结合了自回归(Auto-Regression, AR)和自嵌入(Auto-Embedding, AE)两种预训练方法。

  5. 友好的P-tuning代码:仓库中提供了友好的P-tuning代码,使得fine-tuning模型变得非常方便。

三、总结

        相比于GLM1,GLM2能够支持更长的输入、支持更多轮次的对话 并且在各项任务中均有更好的表现。主要使用的技术虽然已经发明,但逐渐被各种大预言模型接受。

        关于FlashAttention、MQA的技术细节和代码解析,请移步本人博客

FlashAttention解析——大预言模型核心组建-CSDN博客

MQA(Multi-Query Attention)详解-CSDN博客

### ChatGLM 架构详解 #### 1. 模型概述 ChatGLM 是由清华大学开发的一系列大型语言模型之一,其设计融合了自回归(decoder-only)和自编码(encoder-only)的优势[^1]。该模型旨在实现高效的语言理解和生成能力。 #### 2. 模型架构 ChatGLM 的主要架构可以分为以下几个部分: - **输入处理阶段** 输入数据经过分词器(tokenizer)转换为 token 序列,并进一步映射到对应的 embedding 向量空间中[^2]。此过程涉及对原始文本的预处理以及将其转化为适合神经网络计算的形式。 - **嵌入层 (Embedding Layer)** 在完成分词之后,这些 tokens 将被送入嵌入层以获取它们各自的语义表示。这一步骤不仅包含了单词级别的特征提取,还可能加入位置编码等辅助信息以便更好地捕捉序列中的顺序关系[^3]。 ```python 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().to("cuda:1").eval() print(model) ``` 上述代码展示了如何加载 ChatGLM 模型及其配套工具链[^4]。 - **Transformer 编码模块 (GLM Blocks)** 整个模型的核心是由多个 Transformer 层堆叠而成,每层负责逐步增强输入表征的质量。具体来说,在 ChatGLM 中采用了改进版的 Multi-head Attention 和 Feed-forward Network 结合的方式来进行特征变换操作。整个过程中共有 28 层这样的 block 来逐级提升表达力。 - **输出预测阶段** 当前时刻所关注的是下一个待生成词语的概率分布情况;通过对最后一轮 hidden state 进行线性投影并施加 softmax 函数即可得到最终的结果——即各个候选词汇对应的可能性大小值列表。 #### 3. 工作流程解析 以下是 ChatGLM 的典型运行逻辑分解: 1. 接收用户提供的自然语言查询或者对话历史作为初始输入; 2. 利用内置 tokenizer 对字符串形式的数据执行必要的清理与分割动作; 3. 把所得 tokens 映射至高维连续空间形成 dense vectors 表达方式; 4. 经过多重 attention mechanism 加工后的中间产物再经历若干次非线性激活函数作用下的维度调整环节; 5. 输出端口依据前述概率评估体系挑选最优解返回给调用方展示出来。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值