优雅谈大模型11:Mistral

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计

Mistral 7B是AI社区中讨论最多的语言模型之一,它是由Mistral AI于 2023年10月在论文“Mistral 7B”中引入的,Mistral AI是一家法国初创公司,也是目前开源大型语言模型研发的领先公司。正如在原始论文中提到的那样,Mistral经过精心设计,具有卓越的性能和效率,优于最好的开放式13B。在初步介绍了Transformer的架构以及注意力机制之后,将Mistral 7B的介绍放在这个时间节点,目前是对两者进行对比,让读者有更深的印象。

Mistral 7B

Mistral 7B 是decoder-only的模型,这意味着它有着类似于transformer架构的解码器模块。如今大多数语言模型都是解码器模型,因为它们的场景不是服务于双向处理的文本生成。Mistral 7B使用大小为4096的Embedding<移步“初识Embedding”>,这意味着每个标记都由 4096 维向量表示。注意力块有32个head<移步“深入注意力机制”>,而Transformer 有8个head,但Mistral使用multi-head注意力机制的变种,带有滑动窗口的分组查询的注意力 (GQA-Grouped Query Attention)。Mistral 7B的上下文长度为 8192,这意味着在预测序列中的下一个Token,它最多可以带上8192个Tokens。

滑动窗口注意力

Mistral 7B引入的较新概念之一是滑动窗口注意力,而不是通常的多头注意力。在正常的self-attention的机制中,每个Token都和它前面的所有Token都进行注意力分析。而Mistral采用的方式则是使用大小为 w 的滑动窗口,该窗口不允许Token与超出窗口的Token进行注意力联动。

如上图所示,窗口大小为3与因果掩码一起极大地有助于加快训练和推理速度,执行了更少的点积计算。聪明的读者会想到会不会导致输出质量下降,毕竟无法捕获完整的上下文。

其实大语言模型由多个相互堆叠的转换器块(Block)组成,意味着有n个转换器块一个堆叠一个。在 Mistral 7B 的情况下是 32 个。这允许Token间接查找与其他Token的关系。

如上图最左侧的图形所示,引入了滑动窗口,Token之间的注意力就需要间接的关联。虽然“on”不考虑第一个单词“The”,但由于堆叠变压器块的传递性质,“on”一词间接地与“The”一词有关。大白话的讲,滑动窗口注意力机制将直接注意力限制在有限的窗口,然后通过多层转换器的模块使得信息在整个序列中传播。<有点类似CNN,下图左>。

滚动缓冲区

Mistral的另一个主要组件是具有滚动缓冲区的KV Cache。由于Mistral是仅解码器模型,因此它是围绕着针对下个Token的预测任务进行训练。

它的推理方式是:从开始Token的特殊令牌为输入开始的标记,然后生成第一个Token。紧接着使用开始Token和第一个生成的Token作为上下文生成第二个Token,如此类推,直到遇到另一个称为结束Token的特殊Token。

因此,在每个时间步都会预测下个Token,将其与输入连接起来并重复该过程。为了避免重复在上个时间步中已计算过的的大量冗余计算,Mistral 采用一种称为键值(KV) 缓存的方法来优化此过程,其中仅缓存键和值向量,同时在每个步骤更新查询向量。这允许模型在多个步骤中重复的使用键和值向量,从而减少冗余计算加快推理速度。

Mistral在注意力块中采用了滑动窗口技术,因此不需要对不属于窗口大小的Token执行计算。因此缓存的大小限制在滑动窗口的范围。在实际工作中,它会循环覆盖之前的缓存,节省了空间的占用率。

当然,语言模型通常与一些PROMPT一起配合使用,由于在 Mistral 中使用了 KV 缓存,可以进行预填充KV缓存。如果PROMPT非常大,可以将其分块成更小的块,并用每个块预填充缓存。

Mixtral 8x7B

Mistral AI还在2024年1月的论文“Mixtral of Experts”中介绍了Mixtral 8x7B,它与Mistral 7B具有相同的架构,但引入了稀疏混合专家的概念,其中每层由8个前馈块组成,称为专家<具体可以移步链接>。专家混合是一种集成技术,在这种技术中,有多个“专家”模型,每个模型都对数据的一个子集进行训练,然后将专家的输出组合在一起以产生一个单一的输出。

Mixtral 8x7B和Mixtral 7B的参数对比

Mixtral 8x7B中,对于每个Token,路由器网络在每一层都会选择两个专家来处理当前状态并组合他们的输出。因此,每个Token都可以访问 47B参数,但在推理过程中仅使用13B的激活参数。如此可以训练一个具有大量参数的语言模型来捕获更多信息,但不会牺牲推理时间。

下面为一个例子,专家的选择似乎更多地与语法而不是领域保持一致,尤其是在初始层和最终层。

 

Mistral是一个开源的工作流引擎,用于管理复杂的、分布式的工作流任务。下面我将简要介绍Mistral的安装部署过程。 首先,我们需要准备以下基本要素: 1. 操作系统:Mistral可以运行在Linux和Windows操作系统上,但推荐使用Linux系统,如Ubuntu。 2. Python环境:Mistral是基于Python开发的,所以我们需要安装Python和相关的依赖。 3. 数据库:Mistral需要一个数据库来持久化存储任务和工作流的状态信息,常用的选择是MySQL、PostgreSQL等。 接下来,我们可以使用pip命令来安装Mistral和相关的依赖包: ``` $ pip install mistral[mongodb,mysql,postgresql,redis]==<version> ``` 其中`<version>`是Mistral的版本号,根据实际情况进行选择。 安装完成后,我们需要进行一些配置工作,包括: 1. 配置数据库:将数据库的连接信息配置到Mistral的配置文件中。 2. 配置认证:Mistral支持多种认证方式,可以选择适合自己的方式进行配置。 3. 配置消息队列:Mistral使用消息队列来处理任务,可以选择RabbitMQ、Kafka等消息队列工具,并将其配置到Mistral中。 完成上述配置后,我们可以启动Mistral引擎: ``` $ mistral-server --config-file <config_file_path> ``` 其中`<config_file_path>`是Mistral的配置文件路径。 随后,我们可以使用Mistral提供的API或者命令行工具来创建和管理工作流任务。 需要注意的是,Mistral还提供了一些可选的插件和扩展,用于支持额外的功能和集成其他系统。在实际部署过程中,我们可以根据需求进行选择和配置。 总结而言,Mistral的安装部署过程包括准备基本要素、安装依赖、配置环境、启动引擎等步骤,通过合理的配置和使用,可以有效地管理和执行复杂的工作流任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值