开发者告诉我们,有一些因素阻碍了他们更好更广泛地使用基础模型。比如,在可预见的将来,随着技术的新进步,不断有新的模型加入,同时模型的升级和迭代也在不断加速。那么,对于特定的用例,如何选择合适的模型或者几个相互配合的模型组合,这可能需要时间和资源。为了减少开发者在大模型选择上的试错成本,我想从 Amazon Bedrock 可调用的大模型入手,逐一谈谈他们有趣的灵魂,包括他们的出身,技术特点以及使用场景。
亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!
首先让我们来谈谈目前刚刚在 Amazon Bedrock 上推出的两种著名的大型语言模型, Mistral 7B 和 Mixtral 8x7B。之所以要首先聊聊这两个模型,是因为 Mistral AI 已经根据 Apache 2.0 许可发布了 Mistral 7B 和 Mixtral 8x7B 的源代码,并表示这些模型 "可以不受限制地使用"。 这些模型的权重也可以通过其官网从其 CDN 下载。
在 Mistral 的文档中,他们展示了如何使用 SkyPilot 在包括 Amazon Web Services 在内的云端启动模型。他们还提供了有关如何使用 vLLM 在自己的(或云端)硬件上启动 Mistral 模型的说明。
在这里致敬所有为开源做出贡献和努力的人和组织。
Mistral 7B 和 Mixtral 8x7B 的出身
Mistral 7B 和 Mixtral 8x7B 是由 Mistral AI 特别面向开发人员设计和制作。其实 Mistral AI 是一家小型的法国初创公司,但拥有一支由科学家组成的核心团队, Mistral AI 的创始人 Arthur Mensch、Guillaume Lample 和 Timothee Lacroix 在人工智能/机器学习领域拥有丰富的经验。他们设计和制作大模型的目标是 "运送行之有效的东西",而不是写白皮书。
他们是一群有趣的灵魂!
Mistral 7B
技术特点
2023 年 9 月,Mistral AI 发布了 Mistral 7B,这是一款 70 亿个参数的大语言模型(LLM)。与之前的许多 LLM 一样,Mistral 7B 是一款基于变压器的解码器模型。根据其白皮书提供的所有评估基准测试中,Mistral 7B 的表现优于最好的开放式 13B 模型(Llama 2),在推理、数学和代码生成方面,也超过了发布的最佳 34B 模型(Llama 1)。
我好奇他的性能之所以优于 Llama 2 和 Llama 1 是否和它用于实现加快推理速度,在低推理成本情况下有效处理任意长度序列的机制和手段相关。
分组查询注意力 (Group Query Attention, GQA)
分组查询注意力(Group Query Attention,简称 GQA)是一种注意力机制,用于在查询-键-值结构中进行信息检索和关联。它是在 Transformer 模型的基础上提出的一种扩展,用于处理具有分组属性的查询和键值对。
为了更进一步理解这个机制,我们展开一下 Transformer 基于解码器模型的结构。
Transformer 语言模型在发展过程中一个重要突破是采用"多头自注意力架构"即"multi-headead self attention"。这个架构可以让模型学习输入序列中每个词与其他词之间的关系信息。
例如,对于句子"我有一个冰激凌要给你",自注意力架构给了模型学习一个人拥有冰激凌,另一个人没有这个机会。"冰激凌"这个词很可能"关注"到"我"这个词,因为它们之间存在着逻辑关系。多头注意力机制进一步提升了模型学习序列依赖关系的能力。每个注意力头都可以专注于学习序列不同类型的关系,如语法关系和语义关系。
最后通过线性映射将各个注意力头的输出结果整合融合,从而获取更丰富的上下文信息。
因此,多头自注意力架构充分利用了输入序列中的全局上下文,使 Transformer 模型获得了强大的语言理解能力。
「《Attention Is All You Need》论文中提出的注意力可视化的一些方法」
为了让模型更好学习序列中词之间的这种关系,会采用复杂的矩阵乘法运算 key(K) 值、value(V) 值和查询 (Q) 值三个参数。简而言之,我们需要处理和存储大量的参数,以执行这些计算。具体参数数量取决于模型实现细节。"多头注意力"中的"多头"指每个注意力头试图学习输入序列不同关系特征。Mistral 和 Llama2 模型都采用了 32 个叠加层中含 32 个自注意力头的结构。即 32×32=1024 个注意力头。每个头含有数万到十万级别的参数。
所以这就解释了这些模型参数规模能达到十几亿的原因。
"自注意力"机制是通过 K、V 和 Q 值来计算的,起初,每个自注意力计算单元都有自己的 K、V 和 Q 值。随后提出了多查询注意力 (Multi-Query Attention,MQA),它在层中共享单独的 K 和 V 值来服务所有的 Q 值。 这大大减少了需要存储的参数数量,但模型质量降低,生成的效果不如原始设计。而分组查询注意力,即 Group Query Attention /GQA 技术使 K 和 V 值在一个可配置数量的 Q 值之间共享,即减少了参数又不影响模型效果。
来自论文 《GQA:Training Generalized Multi》:分组注意力
论文 《GQA:Training Generalized Multi》证明: "经过训练后的 GQA 质量可以接近多头注意力,速度与 MQA 相当",既优化参数又保持效果。 Mistral 7B 论文表示:GQA 显著加快了推理速度,减少解码时的内存需求,支持更高批次处理,对实时应用至关重要。
总之,GQA 技术通过参数分组共享平衡存储与效果,有效提升了 Mistral 模型的性能。
滑动窗注意力 (Sliding Window Attention, SWA)
模型上下文长度越长,功能越强大?这一点是有争议的,比如 1000 词与 10 万词文本处理难度和效率差异很大。传统的 Transformer 注意力机制允许每个词与所有其他词交互,这在学习语义上非常强。但是随着上下文长度增长, 计算量会呈平方增长,计算开销提升很快。因此传统 Transformer 注意力在很长文本上的计算效率理论上会遇到瓶颈。
引入滑动窗注意力机制,即 SWA 很好的解决了这个问题。模型的上下文越长,它就越有用。想象一下,用 1000 个单词总结一页文本和用 10 万个单词总结整本书有何区别。
滑动窗口注意力 (SWA) 引入了一个可配置大小的 "注意力窗口",这个窗口会滑过输入序列,而不是计算所有文本词汇之间的注意力值(权重)。它是计算窗口内词汇的注意力值,这减轻了计算量。一个可能的担忧是,对于很长序列来说,序列最后一个词汇可能无法 "关注" 开头词汇。虽然理论确实如此,但窗口外词汇仍受到窗口前面词汇影响,因为窗口带动上下文意义上的 "影响链",通过各层传播。
Mistral 7B 论文中表示:"SWA 的设计旨在以更低的计算成本更有效地处理更长的序列,从而缓解 LLM 的常见局限性。"," 与 GQA 结合,两种注意力机制共同促进了 Mistral 7B 的性能和效率的提高。"
Mixtral 8x7B
技术特点
继 Mistral 7B 之后,Mistral AI 在 2023 年 12 月发布了 Mixtral 8x7B。Mixtral 8x7B 是一个采用稀疏混合专家机制即 Spars Mixture of Experts Model(SMoE)的大语言模型,它不仅具有高质量的效果,更重要的是其完全开放提供的预训练权重参数, 该模型采用 Apache 2.0 许可,这对开发者社区和后续研究都有很大价值。
有趣的是,这个模型与 Mistral 7B 具有相同的 Transformer 架构,甚至代码库也是一样的,仅仅在上层添加了少量实现稀疏混合专家机制即 SMoE 的代码。这一小修改却使模型效能有很大提升。白皮书中明确显示, Mixtral 8x7B 在各项基准测试中,表现优于或与 Llama 270B 和 GPT-3.5 相当。尤其在代码生成等任务上,Mixtra 8x7B 优势更为明显,远超 Llama 270B。同时 Mixtral 模型还可以微调成一个指令跟随模型,在 MT-Bench 上获得 8.3 分。
总之,采用 SMoE 结构,显著提升了 Mixtral 的计算效率和语言理解能力。
什么是Sparse Mixture of Experts(SMoE)?
我们知道模型各层中的多头自注意力机制即 multi-headead self attention,其实模型各层中还有另外一个组件"前馈网络" 即(Feedforward Neural Network,FFN)。FFN 的作用是对数据进行额外变换,提取更细腻的模式规律,从而提升模型学习和理解语言语义的能力。
每个自注意力头脑都试图学习输入序列不同词关系的一些特征信息。如果我们在 FNN 部分引入多个网络,那么每个网络是否也能学习语言的一些不同方面?也就是说,这些 FFN 网络将在语言的某些方面成为 "专家"。添加 FFN 可以增强模型的学习和理解语言演绎的能力。但是,简单的在层中添加更多 FFN 会增加模型的规模和复杂性,我们可以直接扩大 FFN 规模来实现相同的效果。从而避免复杂度的增加。为什么要这样做?答案是 "Sparsity,稀疏性"。每当谈论 Mixtral 模型时,请记住它是一个"稀疏性"的专家 Mixtral 模型。
在 FFN 子网络之前,存在一种 router/gate 机制,它能学习后决定哪些(一个或多个)专家网络对输入词汇(token)会产生最好的效果。对于序列中的每个 token,可能有所不同。正如论文所说:"对于每个词汇,在每个层中,路由器网络会选择两个专家网络处理当前状态,并结合它们的输出。尽管每个词汇只能看到两个专家,但在每个时间步骤所选的专家都可能有所不同。" 这意味着,对于任何一个通过整个网络的词汇(token),只使用网络的一个子集。这实现了稀疏激活,这使得网络效率更高。每个词汇都可以访问 47B 的参数,但在推理过程中只使用 13 活动参数。这一种技术增加了模型参数数量,同时控制了成本和延迟,因为模型每个词汇只使用总参数集的一小部分。
根据 Mistrals 的研究,该模型 "在所有评估的基准测试中,准确性表现都优于或与 Llama 270B 和 GPT-3.5(较大的模型)持平"
从数学理论出发,Mixtral 8x7B 是指每层有 8 位专家。它不是整个网络的 8 倍,而 "只是" FFN 子网络,再加上 router/gate 中的一些参数。所以 Mixtral 8x7B 的参数不是 560 亿(8x70亿),而是 467 亿,其中每个词汇/ token 仅使用 129 亿个参数。
什么是专家?
稀疏混合专家机制中使用 "专家 "这样的词,仅仅是为了描述模型结果,如果将这些 "专家 "拟人化,想象它们具有与人类相似的技能,比如,一位专家擅长法语,另一位专家擅长代码等,那么将于实际完全不符。
Mistral 在论文中指出:"出乎意料的是,我们并没有观察到根据主题分配专家的明显模式"。论文进一步说明了观察到的专家分配情况。
在论文中的这幅插图中,不同的颜色代表了模型在代码示例、数学样本和文本样本中学会使用的不同专家。这三列显示了模型不同层次中专家分配的差异。
正如标题所说:"专家的选择似乎更符合语法而不是领域,尤其是在初始层和最后一层。"
如何运行 Mistra 和 Mixtral 模型
在本地运行 Mistral 模型
即使您的机器没有 GPU,也可以在本地运行这些模型。
我在 MacBook Pro M2 上使用 32GB 内存,运行了一个高性能版本的 Mistral 7B,以及可以工作的 Mixtral 8x7B 版本,且没有特殊设置也没有优先关闭其他应用程序。这得益于模型本地运行社区的努力,他们通过量化 (quantisation) 进一步"缩减"模型规模。量化会将模型内如 16 位浮点 (FP16) 精度参数等浮点数,转换为更小的数值,如 8 位或者 4 位。这极大减小了模型大小,降低了运行时计算复杂度,并意味着模型可以在 CPU 上运行。当然,天下没有免费的午餐, 模型在生成过程中会损失一些精度,但它们的性能还是可以的。
量化过程很复杂, 但幸运的是,我们已经可以下载这些模型。
在普通计算设备上也可以评估和应用这些先进模型,真的很有意思。
Llama.cpp 项目提供了一个运行时环境,可以支持 Mistral/Mixtral 等模型。Ollama 项目进一步将其打包,只需使用 Ollama 下载模型文件,运行即可。完事儿了~! 使用极其简单~!(macOS 和 Linux 现已支持,Windows 支持即将推出。)
需要注意的是:这些不是 Mistral 模型的完整版本,而是量化后的本地版本,生产环境需要 GPU 等硬件加速支持,因此,它们适用于本地测试,但不适合生产环境部署。
在全托管的无服务器架构上运行
Amazon Bedrock 控制台页面
Amazon Bedrock 提供了一个单一的 API 接口,可连接各种先进的人工智能模型,例如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI、Amazon 以及现在的 Mistral AI。
要在 Amazon Web Services 账户中访问这些模型,需要执行以下操作:
- 在 Amazon Web Services console 中导航进入到 Amazon Bedrock 页面。Mistral 模型已在俄勒冈州上线,因此确认选择 "us-west-2" 地区。(更多地区即将推出,请检查其他地区是否支持)
- 展开左侧的菜单,向下滚动并选择 "Model access(模型访问权限)"
Amazon Bedrock Console Page-Menu
- 选择橙色的 "Manage model acess /管理模型访问权限" 按钮,然后向下滚动以查看新的 Mistral AI 模型。点击你需要模型旁边的复选框,然后单击 "save change/保存更改"。
Amazon Bedrock-Model Access
您现在可以访问模型了! 前往 Amazon Bedrock text playground,通过 prompt 开始你的体验。需要代码实现时,可以参考 Amazon SDK Code Example 的代码示例。
Happy Prompt!
延展阅读: