LLM学习记录

概述

语言模型的发展

语言模型经历过四个阶段的发展,依次从统计语言模型到神经网络语言模型(NLM),到出现以 BERT 和 Transformer 架构为代表的预训练语言模型(PLM),最终到大型语言模型阶段(LLM)。

NLM

使用神经网络(如循环神经网络RNN、长短时记忆网络LSTM等)来构建语言模型。这些模型通过学习输入文本序列,预测下一个单词或字符的概率分布

PLM阶段

大规模的未标注文本语料库上进行无监督预训练,学习通用的语言结构和表达。

LLM阶段

大型语言模型通常指的是具有极大量参数的预训练模型,如几千亿甚至上万亿参数。这些模型由于其庞大的规模,能够学习到更加丰富和精细的语言结构和知识,主要特点是:

  1. 基于深度神经网络
  2. 自监督学习

LLM的训练与推理流程

语言模型能把人类语言的字符转换成机器能够识别的序列,这些序列要通过位置编码来标记文本的前后顺序,再把序列输入到具体的算法模型中,模型的输出是归一化的token概率,
例如GPU平台的计算过程,将权重数据从显存(HBM)加载至on-chip的SRAM中,然后由SM读取并进行计算。计算结果再通过SRAM返回给显存。

embeding

指将某种类型的输入数据(如文本、图像、声音等)转换成一个稠密的数值向量,以便计算机能够识别和处理。这些向量通常包含较多维度,每一个维度代表输入数据的某种抽象特征或属性。
该文1解释了Embeding的数据向量化过程,并通过代码实践调用OpenAI的embeding API完成文本向量化、检索匹配等功能。

推理过程

LLM的推理过程分为两个阶段,prefill(预填充)和decode(解码)。

  • 预填充阶段会把整段prompt喂给模型做forward计算,
  • 解码阶段即通过KV值计算attention,该阶段的耗时比较大

相关研究

知乎:手抓饼熊:大模型推理加速系列分享
大模型常见推理框架简介:vLLM、Tensorrt-LLM、DeepSpeed、Text Generation Inference

Mixtral加速模型推理

Mixtral是由Mistral AI开发的高质量稀疏混合专家模型。

对于Decode过程,采用以空间换时间的策略:

  1. 使用KV Cache,加速Decode过程
  2. 使用Sliding Window Attention,即采用定长的滑动窗口保存有限数量的token信息,无需保存全部的token的KV值,降低KV Cache存储压力
  3. 使用Rolling Buffer Cache,滚动更新KV cache

对于Prefill阶段,需要解决的是长文本问题:

  1. 将prompt切分成若干chunk,每次每次喂给模型1个chunk,更新1次KV cache

猛猿@知乎:图解Mixtral 8 * 7b推理优化原理与源码实现

基于GPU的加速

知乎:猛猿:图解大模型计算加速系列:FlashAttention V1,从硬件到计算逻辑

vLLM推理框架

vLLM全称Virtual Large Language Model,由Nvidia开源,旨在降低大模型推理的显存占用。其核心思想是将模型的一部分保存在CPU内存或硬盘上,只将当前计算所需的部分加载到GPU显存中,从而打破GPU显存限制。

Transformer

谷歌在2017年的论文《Attention Is All You Need》2提到了 Transformer 模型框架。模型提到了“自注力”(self-attention)机制,

基本架构

如图是 Transformer 模型架构图,该架构分为左侧的编码器右侧的解码器,编码器将新的输入字符序列映射成连续特征序列,解码层每次产生一个字符的输出序列,每次模型将自动递归,每产生下一个字符输出序列时,消耗之前产生的字符作为额外输入。

输入和输出

Inputs:新的字符输入通道,将位置编码向量与词嵌入相加,得到带有位置信息的输入向量:
X p o s = E p o s + P E p o s X_{pos}=E_{pos}+PE_{pos} Xpos=Epos+PEpos

E p o s E_{pos} Epos是第pos个词的词嵌入向量, P E p o s PE_{pos} PEpos是位置pos的位置编码向量。

Ouputs(shifted right):上一次的输出序列
Ouput Probabilities:输出序列

在这里插入图片描述

Encoder

包含6个识别层,每个识别层都有两个子层。
第一层时多头自注力机制层,第二层时一个简单的位置识别的全连接前馈神经网络。

Decoder

自注力机制

能够把单一序列的不同位置联系起来,从而能计算出这个序列的含义。

Scaled Dot-Product Attention

在这里插入图片描述 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_{k}}})V Attention(Q,K,V)=softmax(dk QKT)V

Q,K,V 据论文描述是 Query、Key 和 Value 单词的缩写, K T K^T KT是K的转置。

Q = X W Q Q=XW_Q Q=XWQ
K = X W K K=XW_K K=XWK
V = X W V V=XW_V V=XWV
X ∈ R b a t c h _ s i z e ∗ s e q l e n ∗ e m b e d _ d i m X \in \mathbb{R^{batch\_size*seq_len*embed\_dim}} XRbatch_sizeseqlenembed_dim,表示输入数据
W V 、 W K 、 W Q ∈ R e m b e d _ d i m ∗ e m b e d _ d i m W_V、W_K、W_Q \in \mathbb{R^{embed\_dim*embed\_dim}} WVWKWQRembed_dimembed_dim,表示三个参数的权重

Q K T QK^T QKT可以理解为词向量的接近程度,详细可参考该文3的第4章节。
除以 d k \sqrt{d_{k}} dk 是为了把 Q K T QK^T QKT矩阵变成标准正态分布,使得softmax归一化之后的结果更加稳定,以便反向传播的时候获取平衡的梯度。

softmax的计算

Softmax 函数是一种将一个 K 维实数向量(或矩阵的最后一维)转化为一个归一化概率分布的函数。在机器学习和深度学习中,尤其是在多分类问题中,softmax 函数常常被用作输出层的激活函数,将模型预测的原始得分转换为概率值。
即对于一个K维向量 z = [ z 1 , z 2 , . . . , z K ] z=[z_1,z_2,...,z_K] z=[z1,z2,...,zK],则softmax的输出向量s为:
s j = e z j ∑ k = 1 K e z k s_j=\frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}} sj=k=1Kezkezj

Multi-Head Attention

如图所示,V、K、Q经过Linear拆分后,得到heads个矩阵,每个结果都经过上述Scaled Dot-Product Attention计算,最后通过Concat拼接起来,最后再作Linear操作。

在这里插入图片描述
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中 h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i=Attention(Q{W_i}^Q,K{W_i}^K,V{W_i}^V) headi=Attention(QWiQ,KWiK,VWiV)

残差连接

如下图所示,将Multi-Head Attention的输入和输出连接,继而累加,即为残差连接。这样引入捷径的方式,使得信息能够更快的bypass地穿过深层网络,从而改善模型地训练效果和性能。
在这里插入图片描述

层归一化

在残差连接计算后,需要对结果归一化处理,从而改善模型中地梯度传播问题,进而提高模型地训练效率和性能。具体计算方式:
对于矩阵每一行x,计算器均值 μ \mu μ和方差 σ 2 \sigma^2 σ2
μ = 1 m ∑ i = 0 n − 1 x i \mu=\frac{1}{m}\sum_{i=0}^{n-1} x_i μ=m1i=0n1xi
σ 2 = 1 m ∑ i = 0 n − 1 ( x i − μ ) 2 \sigma^2=\frac{1}{m}\sum_{i=0}^{n-1} (x_i-\mu)^2 σ2=m1i=0n1(xiμ)2
归一化地处理如下,其中 ϵ \epsilon ϵ是一个较小地常数, γ \gamma γ β \beta β是标量参数,通过反向传播和梯度下降学习:
L a y e r N o r m ( x ) = γ x i − μ σ 2 + ϵ + β LayerNorm(x)=\gamma\frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta LayerNorm(x)=γσ2+ϵ xiμ+β

前馈神经网络(FFN)

FFN是一个全连接的前馈神经网络结构,内部结构包括两个线性变换层,中间插入一个非线性激活函数。
在这里插入图片描述

第一层线性变换

将自注力机制的输出结果记为 X X X,通过一个线性映射将输入转换成新的向量表示:
H = W 1 X + b 1 H=W_{1}X+b_1 H=W1X+b1
并通过ReLU激活函数进行非线性处理:
H ′ = R e L U ( H ) H^{'}=ReLU(H) H=ReLU(H)

第二层线性变换

对ReLU激活后的向量 H ′ H^{'} H再次进行线性映射:
F F N ( X ) = W 2 H ′ + b 2 FFN(X)=W_{2}H^{'}+b_2 FFN(X)=W2H+b2

算子及计算特征

参考该文的第二章节,从attention计算的不同流程分析了两种限制:计算限制和内存限制。
图解大模型计算加速系列:FlashAttention V1,从硬件到计算逻辑

输入位置编码向量与词嵌入相加

浮点数的加法操作

自注力矩阵的计算

Q K T QK^T QKT的矩阵乘计算, d k \sqrt{d_k} dk 的根号运算,以及两个结果相除计算
再将结果进行softmax函数计算,包括乘法、求和、除法运算。
s o f t m a x ( Q K T d k ) softmax(\frac{QK^T}{\sqrt{d_{k}}}) softmax(dk QKT)

multi-Head Attention的conact和linear操作

残差求和操作

层归一化

平均数求和和除法操作
求方差操作
归一化处理(求差、除法等)

FFN的两级线性乘加运算

参考文献


  1. 大数据小禅@腾讯云:【AI大模型】Embedding模型解析 文本向量知识库的构建和相似度检索 ↩︎

  2. Google:《Attention Is All You Need》 ↩︎

  3. 知乎:大模型背后的Transformer模型究竟是什么? ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/767037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 交通目标检测-行人车辆检测流量计数 - 竞赛选题

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

【Java环境配置过程详解(包括IDEA配置Java)】

目录 一、JDK下载安装 1. 官网下载JDK 2. 本地安装JDK 3. 配置环境变量 4. 验证是否安装成功 ​编辑二、IDEA进行安装下载 1. 官网下载 IDEA 2、IDEA进行Java开发 1. 创建Java项目 2. 程序测试 一、JDK下载安装 1. 官网下载JDK 1)官网链接: https://www.o…

PTrade如何获取技术值班?如get_RSI - 相对强弱指标;PTrade量化软件如何获取?

get_RSI - 相对强弱指标 get_RSI(close, n6) 使用场景 该函数仅在回测、交易模块可用 接口说明 获取相对强弱指标RSI指标的计算结果 PTrade是恒生公司开发的一款专业量化软件,部分合作券商可提供,↑↑↑! 参数 close:价格…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构,如: 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个,如线性表、栈、队列,每一个节点和其它节点之间的关系 一个对一个…

rpm包下载

内网无法下载、选择外网的一台机器下载rpm包 下载后上传rpm包 1、创建下载目录 mkdir /data/asap/test 2、下载能留存包的工具 sudo yum install yum-utils -y 报错就是环境问题没下载成功,我换了个环境正常的机器就可以了 3、下载rpm包到指定目录/data/asa…

一文彻底搞懂Transformer - Input(输入)

一、输入嵌入(Input Embedding) 词嵌入(Word Embedding):词嵌入是最基本的嵌入形式,它将词汇表中的每个单词映射到一个固定大小的向量上。这个向量通常是通过训练得到的,能够捕捉单词之间的语义…

GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记

文章目录 概览:游戏引擎中的渲染系统四个课时概览 一,渲染管线流程二,了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三,可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四,纹理压…

如何在《中小学电教》期刊上发表论文?

如何在《中小学电教》期刊上发表论文? 《中小学电教》知网 学术期刊 教育厅25年下半年 3版 ①其他学科 不收甘肃和幼儿园 ②数学、英语、历史、政治(道德与法治)、音体美、科学学科的稿件 全bao 全bao不带课题 文章需要和信息…

【TS】TypeScript 原始数据类型深度解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 TypeScript 原始数据类型深度解析一、引言二、基础原始数据类型2.1 boolean2.2 …

数据治理体系建设方案

数据治理体系建设方案 在当前的大数据时代,数据已经成为企业核心资产之一,其管理与治理的重要性愈加凸显。有效的数据治理体系不仅能提升数据质量和数据使用的效率,还能为企业创造更多的商业价值。本文将详细阐述数据治理的重要性、核心要素…

SpringBoot 如何处理跨域请求?你说的出几种方法?

引言:在现代的Web开发中,跨域请求(Cross-Origin Resource Sharing,CORS)是一个常见的挑战。随着前后端分离架构的流行,前端应用通常运行在一个与后端 API 不同的域名或端口上,这就导致了浏览器的…

AI生成电商模特图应用定制

🌟 广州AI生成电商模特图应用定制案例剖析— 触站AI,绘制智能图像的未来 🚀 🎨 触站AI,让创意与智能共绘辉煌 🎨在这座充满创新活力的广州城,触站AI以其尖端AI技术,开启了企业AI图像…

动态代理--通俗易懂

程序为什么需要代理?代理长什么样? 例子 梳理 代理对象(接口):要包含被代理的对象的方法 ---Star 被代理对象:要实现代理对象(接口) ---SuperStar 代理工具类:创建一个代理,返回值用代理对象&#xff0c…

yolov5实例分割跑通以及C#读取yolov5_Seg实例分割转换onnx进行检测部署

一、首先需要训练yolov5_seg的模型,可以去网上学习,或者你直接用我的, 训练环境和yolov5—7.0的环境一样,你可以直接拷过来用。 yolov5_seg算法 链接:https://pan.baidu.com/s/1m-3lFWRHwg5t8MmIOKm4FA 提取码&…

Zombie Voices Audio Pack(僵尸游戏音频包)

僵尸声音音频包是600多个高质量声波的集合。 它提供了僵尸主题游戏所需的一切,这要归功于它的20多个类别: 攻击、咬、呼吸、窒息、损坏、死亡、进食、血腥、咕噜、大笑、疼痛、反应、尖叫、喉咙、呕吐、单词和句子。 我们的僵尸动画包带来的额外奖励&am…

自从棋牌游戏有了AI助阵,赢“麻”了!看这篇就够了

毛主席曾经说过:“中国对世界的三大贡献,第一是中医,第二是曹雪芹的《红楼梦》,第三是麻将牌。”麻将起源于中国,是国粹。各地的麻将玩法各不相同,比如云贵川地区的“缺一门”打法,广东麻将流行…

【课程设计】基于python的一款简单的计算器

我们是大二本科生团队,主力两人耗时3天完成了这款计算器的制作。希望大家给我们多多引流!!!!!! 欢迎各位优秀的高考学子报考长安大学,报考长安大学电子信息工程专业。 欢迎有志于就…

vite项目如何在本地启动https协议

vite项目如何在本地启动https协议 本地启动正常配置在vite.config.js文件中默认启动http协议的请求,如何改成https呢?今天的开发中遇到了这个问题项目需求: 本地启动https协议的前端页面并且正常访问后台https协议的接口 解决方法&#xff1a…

python学习-tuple及str

为什么需要元组 定义元组 元组的相关操作 元组的相关操作 - 注意事项 元组的特点 字符串 字符串的下标(索引) 同元组一样,字符串是一个:无法修改的数据容器。 如果必须要修改字符串,只能得到一个新的字符串&#xff…

如何对GD32 MCU进行加密?

GD32 MCU有哪些加密方法呢?大家在平时项目开发的过程中,最后都可能会面临如何对出厂产品的MCU代码进行加密,避免产品流向市场被别人读取复制。 下面为大家介绍GD32 MCU所支持的几种常用的加密方法: 首先GD32 MCU本身支持防硬开盖…