🌓
搜索
 找回密码
 立即注册

OpenAI vs Mistral AI:哪家更适合你的商业需求?

admin 2023-12-9 19:31:53 91699

适合我们的Model是OpenAI还是Mistral AI?

商业写在前面两段,模型安装部署写在后面

成立6个月左右的Mistral Al(米斯特拉尔AI),被称为欧洲“OpenAI”先融1.13亿美金,再融3亿美金,Mistral AI(米斯特拉尔AI)团队自豪地发布米斯特拉尔7B,这是迄今为止同大小模型中最强大的语言模型。

Google发布Gemini,AMD发Instinct MI300X AI 加速芯片(APU),AI模型开启扮猪吃老虎,当你问他任何事的时候他都会回答你,我很小,我很弱,我很不懂感情。

在常规代码编程效率上,在数据分析上,在文案撰写上,在商业设计上,在电商领域人类在AI面前被迫躺平,根本干不过AI。

米斯特拉尔7B介绍

米斯特拉尔7B是一个拥有73亿参数的模型,它:

  • 在所有基准测试中优于Llama 2 13B

  • 在许多基准测试中优于Llama 1 34B

  • 在代码上接近CodeLlama 7B的性能,同时在英语任务上保持良好

  • 使用分组查询注意力(GQA)实现更快的推理

  • 使用滑动窗口注意力(SWA)以更小的代价处理更长的序列

根据Apache 2.0许可发布米斯特拉尔7B,它可以无限制地使用。

  • 下载并在任何地方(包括本地)使用我们的参考实现

  • 在任何云上部署(AWS/GCP/Azure),使用vLLM推理服务器和skypilot

  • 在HuggingFace上使用

米斯特拉尔7B很容易在任何任务上进行微调。 作为演示,提供了一个对聊天进行了微调的模型,它优于Llama 2 13B聊天。

性能细节

米斯特拉尔7B与Llama 2系列进行了比较,并自己重新运行了所有模型评估,以进行公平比较。

英语

  • 在SuperGLUE上优于Llama 2 13B

  • 在Anthropic独家的英语基准测试上表现更好

多语言

  • 支持100多种语言

  • 在XNLI任务上优于Llama 2

代码

  • 在CodeXGlue上接近CodeLlama 7B

  • 明显优于Llama 2

数学

  • 在Anthropic独家基准上优于Llama 2

此外,调整了模型以进行更快的推理:

  • 利用分组查询注意力机制以实现更快的运行速度

  • 利用滑动窗口注意力机制以更低的代价处理更长的序列

在各种基准测试中,米斯特拉尔7B和不同Llama模型的表现。 为了准确比较,所有模型都是用我们的评估流水线重新评估的。米斯特拉尔7B在所有指标上明显优于Llama 2 13B,并与Llama 34B表现相当(由于Llama 2 34B未发布,报告了Llama 34B的结果)。它在代码和推理基准测试中的优势也是巨大的。

基准测试按其主题进行分类:

  • 常识推理:绕口令、Winogrande、PIQA、SIQA、OpenbookQA、ARC-Easy、ARC-Challenge和CommonsenseQA的zero-shot平均值。

  • 世界知识:NaturalQuestions和TriviaQA的5平均值。

  • 阅读理解:BoolQ和QuAC的0射平均值。

  • 数学:8射击GSM8K的maj@8平均值和4射击MATH的maj@4平均值。

  • 代码:Humaneval的0射击平均值和3射击MBPP的平均值。

  • 流行的聚合结果:5射击MMLU、3射击BBH和3-5射击AGI Eval(仅英语选择题)。

比较模型在成本/性能平面上的表现的一个有趣的指标是计算“等效模型大小”。 在推理、理解和 STEM 推理(MMLU)方面,米斯特拉尔 7B 的表现相当于一个体积比它大3倍以上的 Llama 2。这与在内存中的节省和吞吐量的提高是一样的。

米斯特拉尔7B和Llama 2(7B/13B/70B)在MMLU、常识推理、世界知识和阅读理解上的结果。米斯特拉尔7B在所有评估中大大优于Llama 2 13B,知识基准测试除外,在这一点上,它与Llama2相当(这可能是由于其有限的参数数量,从而限制了它可以压缩的知识量)。

注意:评估和LLaMA2论文之间的重要差异:

  • 对于MBPP,使用手动验证的子集

  • 对于TriviaQA,不提供Wikipedia上下文

闪电与狂暴:注意力漂移

米斯特拉尔 7B 使用了一个滑动窗口注意力(SWA)机制(Child等,Beltagy等),其中每一层注意到之前的4,096个隐藏状态。主要的改进,也是最初调查此机制的原因是计算复杂度为O(sliding_window.seq_len)的线性计算成本。在实践中,对FlashAttention和xFormers所做的更改为序列长度为16k且窗口为4k的情况下带来了2倍的速度提升。感谢Tri Dao和Daniel Haziza在紧张的时间表上帮助包含这些更改。

滑动窗口注意利用变压器的堆叠层来关注窗口大小之外的过去:第k层中的标记i关注第k-1层中的标记[i-滑动窗口,i]。这些标记关注的是[i-2*滑动窗口,i]的标记。更高层次的信息来自比注意力模式所暗示的更远的过去。

最后,固定的注意力范围意味着可以将缓存限制为滑动窗口标记的大小,使用旋转缓冲区(在我们的参考实现仓库中阅读更多)。这为序列长度为8192的推理节省了一半的缓存内存,而不影响模型质量。

为聊天微调米斯特拉尔7B

为了展示米斯特拉尔7B的泛化能力,在HuggingFace上公开可用的指令数据集上对其进行了微调。没有技巧,没有专有数据。得到的模型米斯特拉尔7B Instruct在MT-Bench上优于所有7B模型,并与13B聊天模型相当。

米斯特拉尔7B Instruct模型是一个快速演示,说明基模型可以轻松地进行微调以获得令人信服的性能。它没有任何审核机制。我们期待与社区合作,找到使模型精细地遵守警戒线的方法,以允许在需要审核输出的环境中进行部署。

部署7B模型mistral-7b-v0.1

deploy文件夹包含构建vLLM镜像的代码,该镜像包含服务Mistral AI模型所需的依赖项。在镜像中,使用transformers库而不是参考实现。要构建它:

cd deploy
docker build -t mistralai/serving .

这将构建一个名为mistralai/serving的Docker镜像,包含服务Mistral模型所需的一切。

然后您可以使用该图像运行一个Docker容器来服务模型:

docker run -p 8000:8000 mistralai/serving

这将在端口8000上公开模型。您可以使用REST API或WebSocket与其交互。

文档中有关如何与服务交互的更多详细信息。总的来说,这个部署文件夹使得将Mistral模型作为服务部署变得非常简单。

docker build deploy --build-arg MAX_JOBS=8

运行该镜像的说明可以在官方文档中找到。

安装


要安装Mistral 7B模型,有几个选项:

从HuggingFace Hub安装

这是最简单的方法。您可以使用transformers库直接获得对模型的访问:

from transformers import MistralForCausalLM

model = MistralForCausalLM.from_pretrained("MistralAI/mistral-7b2")

从源代码安装

您也可以从我们的GitHub仓库安装。这使您能够修改代码并构建自定义版本:

git clone https://github.com/MistralAI/mistral-7b2.git
cd mistral-7b2
pip install .

然后可以像HuggingFace Hub一样导入和使用该模型。

从预构建的Docker镜像中安装

我们还提供了一个Docker镜像,其中包含预构建的模型。参见deploy文件夹中的详情。

所以总结一下,您可以通过HuggingFace、从源代码或从Docker镜像获得Mistral 7B。选择最适合您的安装方法。

pip install -r requirements.txt

下载模型

wget https://files.mistral-7b-v0-1.mistral.ai/mistral-7B-v0.1.tar

tar -xf mistral-7B-v0.1.tar

运行模型

python -m main demo /path/to/mistral-7B-v0.1/

To give your own prompts

python -m main interactive /path/to/mistral-7B-v0.1/

Change temperature or max_tokens using:

python -m main interactive /path/to/mistral-7B-v0.1/ --max_tokens 256 --temperature 1.0

If you want a self-contained implementation, look at one_file_ref.py, or run it with

python -m one_file_ref /path/to/mistral-7B-v0.1/

This is a test of the emergency broadcast system. This is only a test.

If this were a real emergency, you would be told what to do.

This is a test

=====================

This is another test of the new blogging software. I’m not sure if I’m going to keep it or not. I’m not sure if I’m going to keep

=====================

This is a third test, mistral AI is very good at testing. 🙂

This is a third test, mistral AI is very good at testing. 🙂

This

=====================

To run logits equivalence through chunking and sliding window, launch

python -m test_generate

滑动窗口注意力机制

============================

滑动窗口注意力机制应用

米斯特拉尔 7B 使用了一个滑动窗口注意力(SWA)机制,其中每一层注意到之前的4,096个隐藏状态。这个机制的主要改进和原因是它的计算复杂度为线性的 O(sliding_window.seq_len)。在实践中,对 FlashAttention 和 xFormers 所做的改动为序列长度 16k 且滑动窗口 4k 的情况下带来了 2 倍的速度提升。感谢 Tri Dao 和 Daniel Haziza 在紧张的时间表上帮助我们整合了这些改动。

滑动窗口注意力机制利用了变压器的堆叠层结构来关注远超窗口大小的过去:第 k 层中的标记 i 会关注第 k-1 层中从 i-滑动窗口 到 i 的标记。而这些标记又关注了从 i-2*滑动窗口 到 i 的标记。更高层次的标记可以获得比注意力模式所暗示的更远的过去的信息。

最后,固定大小的注意力范围意味着我们可以将缓存限制为 滑动窗口 大小的标记,使用旋转缓冲区(我们参考实现仓库有更多细节)。这为序列长度 8192 的推理节省了一半的缓存内存,而不影响模型质量。

纯注意力机制


与滑动窗口注意力机制(SWA)相比,传统的注意力机制有以下不同:

  1. 每一层都会参照整个输入序列的所有隐藏状态。这意味着随着序列长度的增加,计算和内存成本会线性增加。

2. 由于参照了整个序列,所以需要缓存整个序列。对于很长的序列,这需要大量内存。

3. 对更深层次的标记而言,它只能接收来自下层最近的过去的信息。更深的历史信息无法反向传播。

4. 计算复杂度为 O(n^2),其中 n 是序列长度。这对于很长的序列是非常大的计算量。

总的来说,传统注意力机制对序列长度很敏感,随着长度的增加,计算和内存成本急剧增加。这限制了它处理长序列的能力。

相比之下,SWA机制克服了这些限制,允许以线性时间和常量内存有效地处理更长的序列。

注意力机制是序列中标记之间共享信息的方式。在普通变压器中,注意力遵循因果掩码:序列中的每个标记都可以关注它自己和过去的所有标记。这确保了模型是因果的,即它只能使用过去的信息来预测未来。

滑动窗口加速推理和减少内存压力


注意力运算的数量与序列长度的平方成正比,内存压力与序列长度成线性关系。在推理时,这会由于缓存可用性的降低而导致更高的延迟和更小的吞吐量。为了缓解这个问题,我们使用了滑动窗口注意力[1,2]:每个标记最多可以关注过去W个标记(这里,W=3)。

这种机制的几个好处:

  1. 计算复杂度从O(n^2)下降到O(n)

  2. 内存压力从O(n)下降到O(1)

  3. 更高层可以关注更远的过去,获取更多上下文

  4. 易于在GPU和TPU上实现

总的来说,滑动窗口注意力机制可以显着提高长序列的推理速度,同时大大减少内存使用。这使得大模型可以更有效地处理更长的内容。

注意,滑动窗口之外的标记仍然会影响下一个词的预测。在每个注意力层中,信息最多可以向前移动W个标记:在两个注意力层之后,信息可以向前移动2W个标记,等等。例如,在长度为16K且滑动窗口为4K的序列中,经过4层后,信息已经传播到完整的序列长度。

因此,尽管每个标记只直接关注滑动窗口内的标记,但通过层堆叠,更深层的标记实际上可以接收来自整个序列的上下文信息。这确保了模型的预测质量不会受到滑动窗口的限制。

从经验上看,我们发现更长的上下文_即使在滑动窗口之外_也有帮助,但当序列长度变得太大时,模型不再使用完整的上下文。

这种现象可以从两个方面来理解:

  1. 注意力机制本身具有自动选择相关信息的能力。当序列变长时,与当前预测相关的信息很可能在最近的历史中,不需要完整序列。

2. 计算和内存限制。完整序列上下文的额外开销,在很长的序列上可能得不偿失。滑动窗口机制提供了更实用的计算/性能权衡。

总的来说,没有完全固定的上下文长度可一直带来性能改进。滑动窗口提供了一个自动、有效地利用上下文的方法,同时控制计算和内存成本。这就是为什么它适用于大模型处理长序列的原因。

滚动缓冲区缓存


我们实现了一个滚动缓冲区缓存。缓存大小固定为W,我们将位置i的(键,值)存储在缓存位置i % W。当位置i大于W时,缓存中的过去值会被覆盖。

这意味着在任何时间,缓存中存储着最新的W个位置的缓存项。这允许我们只使用固定大小的W内存,而不需要随着序列长度线性增长。

具体而言,给定一个长度为n的序列,滑动窗口大小为W:

  1. 第1步至第W步,缓存存储位置1至W的缓存项

  2. 第W+1步,位置1的缓存项被位置W+1的项覆盖

  3. 以此类推,缓存以滚动的方式更新

这种简单的机制让我们只需要O(W)的缓存,就可以处理任意长度的序列,而计算复杂度保持为O(n)。

这是滑动窗口注意力得以高效处理长序列的关键技术之一。

预填充和分块

在生成序列时,我们需要逐个预测令牌,因为每个令牌都取决于前面的令牌。然而,提示事先是已知的,我们可以使用(k,v)缓存预先填充提示。如果提示非常大,我们可以将其分成较小的片段,并使用每个片段预先填充缓存。为此,我们可以选择窗口大小作为分块大小。对于每个分块,我们因此需要计算对缓存和分块的关注。

请注意,这段文本似乎是与机器学习或自然语言处理相关的技术文档中的内容,其中涉及到序列生成、缓存和注意力机制等概念。如果您需要更详细或特定领域的翻译,请提供更多上下文或相关背景信息,以便我能够更好地理解并为您提供帮助。

集成

在HuggingFace中使用Mistral AI:

  • Mistral-7B-v0.1

  • Mistral-7B-Instruct-v0.1

在Vertex AI上使用Mistral 7B

在Replicate上使用Mistral 7B

在Sagemaker Jumpstart上使用Mistral 7B

在Baseten上使用Mistral 7B

我们究竟需要OpenAI还是Mistral 7B

当创业团队用股权仅仅融到几千万到1亿的时刻,我们需要Mistral 7B,

当团队仅仅有领域Know-How的时刻,我们需要Mistral 7B,

当我们耐心调整Attention机制设计时,我们需要Mistral 7B.

112766.jpg
随机推荐

最新主题

0 回复

高级模式
游客
返回顶部