首页   >   新闻   >   文章

蚂蚁集团联手上海财经大学:揭开AI大模型在金融领域的神秘面纱 读书笔记 - III
- 2024 -
07/10
05:04
零号员工
发表时间:2024.07.10     作者:Jingyi     来源:ShoelessCai     阅读:243

蚂蚁集团联手上海财经大学:揭开AI大模型在金融领域的神秘面纱 读书笔记 - III

回到蚂蚁金服和上海财经大学合作的这篇文章,上一篇文章正好写道“大模型推理”。

大模型推理,涵盖 内存管理、内存优化基本思路、请求批处理、模型量化。

在继续介绍之前,为了不使得深度过深,我们先把框架梳理一遍。



(4)大模型推理

正如在前两章所说,自从 2017 年 Google 发布《Attention is All You Need》之后,各种基于 Transformer 的模型和方法层出不穷。尤其是 2018 年,OpenAI 发布的 GPT 和 Google 发布的 BERT 模型在几乎所有 NLP 任务上都取得了远超先前最强基准的性能,将 Transformer 模型的热度推上了新的高峰。

Transformer 模型之所以如此强大,是因为它抛弃了之前广泛采用的循环网络和卷积网络,而采用了一种特殊的结构——注意力机制 (Attention) 来建模文本。

本章将向大家介绍目前最常见的 Multi-Head Attention,并使用 Pytorch 框架实现一个 Transformer block。

transformers_timeline


关于内存管理

基于 Transformer 技术,管理 GPU 和内存的资源,Attention 具体操作内存。



亦如第二部分(《》)解释的,我们依据对语词的排序,可以获取序列向量 q,多句句子的排序是矩阵 Q。将每个语词 Encoder 之后(待Check),形成关键字向量 k,如较多句话,此时关键字形成矩阵 K。

针对 Attention 机制,将上述两个矩阵作乘法,其结果,再套两层变换。所谓的“mask + softmax”,通俗理解,就是通过函数变化,将结果转化成我们能够预期的分布,得到结果 softmax(QK)。

最终,上述结果 softmax(QK) 再于价值矩阵 V 作乘积,得到:



这里的价值矩阵注意,通俗地理解为“奖励”,每个分量用数值数值。其实,这里的 k,v 是 key-value的一种存储方式,具体含义按照场景来的。得到的这个 Attention 矩阵,即注意力的得分值。那么,注意力矩阵如何管理内存呢?

想要打造一个高吞吐量的LLM服务,就需要模型在一个批次内处理尽可能多的请求,不过现有的系统大多在每次处理请求时申请大量的key-value(KV)缓存,如果管理效率不高,大量内存都会在碎片和冗余复制中被浪费掉,限制了batch size的增长。换言之,能够使得内存尽量形成大的空闲块,是必须的。



点击阅读原文

根据英伟达的测试数据,我们发现,内存利用有效的时候,每秒能够处理的 Token 数量显著增加。此图的含义,batch size 没增加,但是内存已经用很多的时候,是很低效的。

What is more, 最近,来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟内存和分页技术,提出了一个新的注意力算法 PagedAttention,并打造了一个LLM服务系统 vLLM。

原则是,在管理内存的时候,尽量使得内部碎片、外部碎片,以及留存区域尽量少,这样物理区域尽可能大地利用。注意,这里的 Token 对应一块物理区域。

提出问题:依据公式推导出的注意力矩阵 Attention,其中每个元素 A(ij)什么含义?和 key-value 对有什么关系?

首先,我们解决 key-value 实际含义,根据英伟达的解释,Key 应该是物理区域 token,Value 放在这块物理区域上的语词。而且,以目前算法,针对语词的注意力矩阵,称为 PagedAttention,可以做到存在物理区域(主要是 GPU)是离散存放。具体存放方法,根据 token,把语词卡进去。

其次,解决的问题是,注意力矩阵和 Key-Value 是怎么对应的?

我们还是回到上述公式,因为没有编号,再贴一遍吧!



依据公式,我们知道注意力矩阵 Attention,由 Query(序列编号)、Key、Value 三个矩阵(或者向量)计算得到。说到这里,就知道注意力矩阵 Attention 如何与 Key-Value 对应。至于,Token 或者 语词是如何数值化的,用的就是 encoder 和 decoder 的方法。

至此,Attention 如何作内存管理的,就说清楚了。

Q: 表示 Prompt 词序信息;

K:Key token 在某位置序列;

V:Token 对于数值的概率

举例子。

自注意力(Self-Attention): 考虑句子

“The quick brown fox jumps over the lazy dog”

对于Transformer模型的自注意力机制,我们首先将每个词转化为向量:

“The” -> Q1, K1, V1
“quick” -> Q2, K2, V2
“brown” -> Q3, K3, V3
“fox” -> Q4, K4, V4
“jumps” -> Q5, K5, V5
“over” -> Q6, K6, V6
“the” -> Q7, K7, V7
“lazy” -> Q8, K8, V8
“dog” -> Q9, K9, V9

当计算“jumps”这个词的注意力时,它的 Query 向量 Q5 将会与所有的 Key 向量(K1至K9)进行点积运算,即[Q5·K1, Q5·K2, ... ,Q5·K9]。

然后通过 softmax 函数得到相应的注意力权重分布,即[softmax(Q5·K1), softmax(Q5·K2), ... ,softmax(Q5·K9)]。

这个权重分布代表了“jumps”在生成过程中对其它词的依赖程度。

例如,如果权重显示“jumps”高度关注“fox”,则意味着在计算“jumps”的新表示时,“fox” 的Value 向量 V4 将被赋予较大的权重进行加权求和。最终生成的输出向量将综合反映了整个句子中各词的信息,尤其是与“jumps”密切相关的词。

计算过程如下:

计算 Query 与所有 Key 的点积得分

scores = Q5 * K.T。

对得分进行缩放和平滑处理(softmax),得到每个位置对 Query 词 “jumps” 的注意力权重

weights = softmax(scores)

使用这些权重去加权求和 Value 向量,即

output = weights * V

硬件 SRAM,HBM

说到两种硬件 SRAM 和 HBM。针对 SRAM 采用的是 FlashAttention,减少 IO,速度约为 19 TB/s。针对 HBM,采取的是 PagedAttention。因为 HBM 容量多达 40 GB,但是速度较慢,只有 1.5 TB/s。由于 PagedAttention 可以做到非连续,可以省空间。

注意:HBM is a new type of CPU/GPU memory (“RAM”) that vertically stacks memory chips, like floors in a skyscraper. We also know it as High Bandwidth Memory.

SRAM, HBM 新型 RAM,记住其速度,分别是 19TB/s 和 1.5 TB/s。

关于请求批处理

传统批处理是静态的,batch size 不改变,现在可以做到动态批处理。动态批处理,即 Dynamic Batchhing,是在新请求到来之前,填充物理区域,从而感知新的 batch size,提升 GPU 利用率。

连续批处理,也是随着这算法新发明的。这种做法是无需对请求的输入进行填充,vLLM 使用的是连续批处理,新到来的请求抢占现有请求进行处理。例如,DeepSpeed-FastGen 连续批处理,除此之外,还会将长的提示词分成小块,一块一个 Process,分块之后变成多个传播过程,DeepSpeed-FastGen 似乎可以在这些过程中来回调度(可拆借),最终汇总到一个点执行。

这段话有几个疑点。第一,什么叫做“无需填充”?笔者看来,batching 时候,每个数据集进入模型的时候,不一样的 size 会被变成一样的。Continuous Batching,应该是没有 fixed batch size。具体来说,连续批处理会在模型推断的过程中不断地将新的请求添加到当前的批次中,同时保持一定的效率。也正是因为没有 batch size,因此可以做到“无需填充”。

第二,什么是“变成多个传播过程”?

连续批处理将长文本分解成若干个小过程,整个传播过程,连续批处理可以一直生成 token,独立地运行在各个 Process 上,过程中还能调度,直到被执行。总结:LLM 在产生完整的响应之前会产生一个包含多个 token 的序列,这个序列通常被称为 “completion tokens”。

在此生成过程会一直进行,直到满足以下两种情况之一:

1. 生成了一个特定的“停止”标记,表明生成过程应该终止。

2. 达到了设定的最大序列长度,这时也会停止生成。

注意,GPU 充足直接影响 LLM 速度和吞吐量的,我们总结为,连续批处理,就是内存优化技术。

自此,我们学习了内存优化,包括动态批处理、连续批处理。

注意,这里之后都可以再进一步学习的。

关于模型量化

一种网络参数压缩方法,可以将32位、16位浮点数压缩到更低精度,例如 8 位,4 位。通过降低单位的精度,使得 IO 通信量减少,此时网络速度就快。我们可以稍微总结一下,即量化无非是减少每个单元对象的占用大小,提升速度。量化,还区分训练中量化、训练后量化。

训练中量化,即在线量化,Quantization-Aware Training。量化同时,对反响传播的权重进行调整。保留了训练数据的分布特征。笔者注,保留分布特征的含义,每个样本的变化都是同样的,至少是同比例的。和 RTN(round-to-nearest)相比,LLM-QAT 效果要好很多。

训练后量化,即离线量化,Post-Training Quantization。少量数据校准,或者索性不用额外数据校准。GPTQ 短时间能高效、精确地进行压缩。GPTQ 基于 Optimal Brain Damage,是一种剪枝方法。

(5)幻觉问题、缓解策略

所谓幻觉就是使得模型误判,幻觉问题分为两类,一是忠实性幻觉(faithfulness),生成内容与可验证的现实世界之间,存在差异,例如,事实不一致,或者捏造事实。二是事实性幻觉(Factualness),指的是回答和用户意图不一致。例如,指令不一致,或者上下文不一致。

上述两种问题,我们换种理解。一是模型基于现有知识作出错误推断;二是模型推断没错,但是理解错了问题。

怎么解决呢?

关于事实性幻觉的环节策略,即如果模型推断没错,但是对于用户的问题理解错了,这时候怎么解决?

第一,提升数据质量,提升准确信息的比例,提升模型的推断能力。

第二,诚实导向的微调。什么意思呢?即向模型投入一些模型无法回答的问题,拓展模型的自我边界认知能力。这样做能够减少模型在不确定情况下的过度自信,也不能拒太多。

第三,强化学习。简言之,设计针对幻觉的奖励分数,可以减轻幻觉。

第四,对比解码。同时使用性能差异大的模型,对同一个主体进行预测,优先选择预测出来差异较大的样本(或者单词)。有助于生成流畅、词汇丰富、内容连贯的文本。

第五,对比层解码。利用不同层次的输出,显然,事实知识在语言模型较高层次更为突出。通过比较高低层的输出,强调高层自还是,可以减少幻觉,提升内容的真实性。

忠实性幻觉的解决策略。

第一,思维链,提升模型在复杂问题的逻辑性、连贯性。适合大规模模型,有效提升推理的有效性。

第二,上下文预测、检索增强。后者结合外部知识,增强信息检索和整合能力,提升模型在复杂任务上的表现。

笔者注,这里的方法,都未曾深入学习。

(6)金融领域复杂推理

思维链,被认为是开创性的、具有影响力的,提示工程技术。注意,常规的思维链是线性,为了适应金融行业的复杂情况,发展了一些其他的思维链方法。

其他思维链方法

结构变体法。一是引入程序语言算法,替代自然语言,探索广度。二是构造思维树,对不同推理思路进行探索。三是构造图拓补,应对复杂场景,进行信息聚合、多路径推理。

推理结果验证。一是针对每个分析、每个步骤,进行更细粒度的校验,保证前后逻辑一致,即前向推理验证。二是依据遇到的问题、模型预测结果,反推导致的原因,推测出的条件,和真实的条件做对比,可以推断模型推理能力。三是 Google 提出 Self-Consistency,生成多个候选,并且保证一致性。有效提升大模型的文本补全,和解决问题性能。笔者注,第一种方式是比较结果差异;第二种是比较原因;谷歌属于第三种方法,即通过保证一致性,去调整其他要素。

推理过程验证。一是单独步骤校验。例如,self-check 单独步骤校验;或者 Grace,优化这类校验,引入额外的校验机制。

问题分析方法。一是分解子问题,二是迭代分解,即每次迭代出一个子问题,并且解决它。笔者注,所谓的迭代,就是整个事物发展流程要走好几遍。

外部知识增强法。引入外部知识,知识库、知识谱,获取结构化知识进行推理,再用这些结构化知识,验证可信及真实程度。

智能体

智能体称为 Agent,可以持续学习、自我调整。智能体也是有三大主要模块的,即计划、记忆、行动。

计划模块。分成简单子任务,分而治之。包括任务分解、模型自我反思。

任务分解是将复杂任务分解为更易于管理的子任务,并为每个子任务制定合理计划。任务分解是常用方法,例如,思维链。如果问题复杂些,则需要用到思维树。该类方法本质上是通过精心设计提示,激发和调动大模型中潜藏着的更擅长规划的认知部分。还有一种模式,利用专业知识,做好监督工作。

智能体自我反思(Self-reflection)是对以前制定的计划进行回顾性思考,以纠正之前错误认知并完善行动决策来不断改进计划效果。包含三点。

第一,基于内部反馈的机制和反思。Reflexion 框架通过自我反思和语言反馈提升智能体的推理能力。

第二,基于人类互动反馈的反思。有助于缓解幻觉问题。例如,在 ChatGPT 的训练中采用的基于人类反馈的强化学习 RLHF 方法。

第三,智能体利用客观世界或虚拟环境的反馈进行反思。例如,ReAct 将推理和行动结合起来应用到大模型上,其中推理轨迹有助于模型归纳、跟踪、更 新行动计划,并辅助进行异常处理。外部数据源,包括维基百科 API,环境等信息。

记忆模块,特定的记忆机制来确保熟练处理一系列连续任务。简言之,从环境中感知,促进未来行动。智能体包含感知记忆、短期记忆、长期记忆。接下来,我们深化一下智能体这些记忆能力的具体概念。

感知记忆,原始刺激结束后保持对感官信息的印象,包括图像记忆(视觉)、回 声记忆(听觉)和触摸记忆(触感)等。

短期记忆,执行复杂的学习和推理等认知任务所需要的信 息,如包括提示工程的上下文学习等。记忆时间长短,用 Transformer 上下文窗口确定。增加记忆能力,意味着增加对模型的输入。例如,LongMEM 将上下文长度扩展到 65 K。

长期记忆,针对外部数据检索与访问,将非结构化数据(文本、图形、音频)压缩成多维向量,构建数据库。此时,智能体存储获取数据变得多维度又高效。

行动模块,采取合适行动将行动转化结果。

文本输出,例如,智能客服、生成报告、文档审核、舆情分析。

使用工具,例如,HuggingGPT,其应用很广,如投资策略、风险检测、收入预测、 金融衍生品定价、资产组合优化 和量化交易等。

具身行动,现在科技创新。创新总是硬道理。

参考文献

[1] 博客园-CV技术指南(2023),全新注意力算法PagedAttention:LLM吞吐量提高2-4倍,模型越大效果越好,博客园

[2] 腾讯云-BBuf(2024),如何用Infini-attention实现超长上下文Transformer,腾讯云

[3] CSDN-limanjihe(2020),HBM (High Bandwidth Memory),CSDN

[4] 腾讯云-Shu Yini(2024)LLM推理速度飙升23倍!Continuous Batching:解锁LLM潜力!,腾讯云

[5] YH美洲大蠊(2024),Transformer Attention机制中的Query、Key和Value,CSDN,2024

[6] 官方网站(2024),第三章:注意力机制,Transformers快速入门,2024

[7] Prompt 学习指南(2023),越狱,Prompt 学习指南,2023



原文链接



长按/扫码,有您的支持,我们会更加努力!









TOP 5 精选

       



回到顶部   回上一级
写文章

最新资讯




直播笔记


热点话题


精品论文


有你的鼓励
ShoelessCai 将更努力





文档免费。保护知识产权,保护创新。