Mistral AI的Mistral 7B基础模型现在可在Amazon SageMaker JumpStart上使用
Amazon SageMaker JumpStart 现已提供Mistral AI的Mistral 7B基础模型
今天,我们很高兴地宣布,Mistral AI开发的Mistral 7B基础模型现在可通过Amazon SageMaker JumpStart向客户提供,只需点击一次即可部署用于推断运行。Mistral 7B具有70亿个参数,可以轻松定制和快速部署。您可以使用SageMaker JumpStart尝试这个模型,SageMaker JumpStart是一个机器学习(ML)中心,可以访问算法和模型,让您可以快速开始使用ML。在本文中,我们将介绍如何发现和部署Mistral 7B模型。
什么是Mistral 7B
Mistral 7B是由Mistral AI开发的基础模型,支持英文文本和代码生成能力。它支持各种用例,如文本摘要、分类、文本补全和代码补全。为了展示模型的易定制性,Mistral AI还发布了Mistral 7B Instruct模型,用于聊天场景使用,使用了各种公开可用的对话数据集进行微调。
Mistral 7B是一个变压器模型,使用了分组查询注意力和滑动窗口注意力来实现更快的推断(低延迟)和处理更长的序列。分组查询注意力是一种将多查询和多头注意力相结合的架构,可以实现接近多头注意力的输出质量和与多查询注意力相当的速度。滑动窗口注意力使用变压器的堆叠层来在窗口大小以外的过去进行关注,以增加上下文长度。Mistral 7B具有8,000个令牌的上下文长度,表现出低延迟和高吞吐量,并且与较大的模型替代方案相比具有较强的性能,在7B模型尺寸下提供了较低的内存需求。此模型可在免费的Apache 2.0协议下使用,无需限制。
什么是SageMaker JumpStart
通过SageMaker JumpStart,机器学习从业者可以从不断增长的最佳基础模型列表中进行选择。机器学习从业者可以将基础模型部署到隔离网络环境中的专用Amazon SageMaker实例上,并使用SageMaker进行模型训练和部署。
- 通过CPR-Coach革新CPR培训:利用人工智能进行错误识别和评估
- UC Berkeley和UCSF研究人员革命性改变神经视频生成:引入LLM-Grounded视频扩散(LVD)以改善时空动态
- 2023年可尝试的22种ChatGPT替代方案(免费和付费)
现在,您可以通过在Amazon SageMaker Studio中点击几下或通过SageMaker Python SDK以编程方式发现和部署Mistral 7B,从而能够使用SageMaker功能如Amazon SageMaker Pipelines、Amazon SageMaker Debugger或容器日志来推导模型性能和MLOps控制。该模型部署在AWS安全环境下,并在您的VPC控制下进行,有助于确保数据的安全性。
发现模型
您可以通过SageMaker Studio UI和SageMaker Python SDK在SageMaker JumpStart中访问Mistral 7B基础模型。在本部分,我们将介绍如何在SageMaker Studio中发现这些模型。
SageMaker Studio是一个集成开发环境(IDE),提供一个单一的基于Web的可视界面,让您可以访问专门的工具,执行从数据准备到构建、训练和部署ML模型的所有ML开发步骤。有关如何开始和设置SageMaker Studio的详细信息,请参阅Amazon SageMaker Studio。
在SageMaker Studio中,您可以访问SageMaker JumpStart,其中包含预训练模型、笔记本和预建解决方案,位于预建和自动化解决方案下。
从SageMaker JumpStart的首页上,你可以浏览解决方案、模型、笔记本和其他资源。你可以在基础模型:文本生成轮播图中找到Mistral 7B。
你也可以通过选择浏览所有文本模型或搜索“Mistral”来找到其他模型变体。
你可以选择模型卡片来查看模型的详细信息,如许可证、用于训练的数据以及如何使用模型。你还会找到两个按钮,部署和打开笔记本,它们将帮助你使用模型(下面的截图显示了部署选项)。
部署模型
选择部署即可开始部署。或者,你也可以通过选择打开笔记本来进行部署。示例笔记本提供了端到端的指导,介绍了如何部署模型进行推理,并清理资源。
要使用笔记本进行部署,我们要首先选择由model_id
指定的Mistral 7B模型。你可以使用下面的代码在SageMaker上部署任何选定的模型:
from sagemaker.jumpstart.model import JumpStartModel
model = JumpStartModel(model_id="huggingface-llm-mistral-7b-instruct")
predictor = model.deploy()
此代码将使用默认配置在SageMaker上部署模型,包括默认实例类型(ml.g5.2xlarge)和默认VPC配置。如果你想更改这些配置,可以在JumpStartModel中指定非默认值。部署完成后,你可以通过SageMaker预测器对部署的终端节点进行推理:
payload = {"inputs": "<s>[INST] 你好![/INST]"}
predictor.predict(payload)
优化部署配置
Mistral模型使用文本生成推理(TGI版本1.1)模型服务。在使用TGI深度学习容器(DLC)部署模型时,你可以通过环境变量配置各种启动器参数。为了支持Mistral 7B模型的8,000个令牌上下文长度,SageMaker JumpStart已默认配置了一些参数:我们将MAX_INPUT_LENGTH
和MAX_TOTAL_TOKENS
分别设置为8191和8192。你可以通过检查模型对象来查看完整列表:
print(model.env)
默认情况下,SageMaker JumpStart不会通过环境变量MAX_CONCURRENT_REQUESTS
将并发用户数限制在小于TGI默认值128的数值上。原因是有些用户的工作负载可能具有小负载上下文长度,并且希望实现高并发。请注意,SageMaker TGI DLC通过滚动批处理支持多个并发用户。在为应用程序部署终端节点时,你可能需要考虑在部署之前是否应该限制MAX_TOTAL_TOKENS
或MAX_CONCURRENT_REQUESTS
以获得最佳性能:
model.env["MAX_CONCURRENT_REQUESTS"] = "4"
在这里,我们展示了对于你典型的终端节点负载,模型性能可能会有所不同。在下面的表格中,你可以观察到小型查询(128个输入词和128个输出令牌)在大量并发用户的情况下具有良好的性能,达到每秒1,000个令牌的吞吐量。然而,当输入词的数量增加到512个输入词时,终端节点达到批处理容量上限——允许同时处理的并发请求数量——导致吞吐量停滞,并且在大约16个并发用户开始时出现显著的延迟降低。最后,当通过多个并发用户同时查询具有大型输入上下文(例如,6,400个词)的终端节点时,这种吞吐量停滞会相对较快地发生,以至于你的SageMaker账户将开始遇到超时限制为60秒的负载过多请求。
. | 吞吐量(标记/秒) | ||||||||||
并发用户 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | |||
模型 | 实例类型 | 输入字数 | 输出标记数 | . | |||||||
mistral-7b-instruct | ml.g5.2xlarge | 128 | 128 | 30 | 54 | 89 | 166 | 287 | 499 | 793 | 1030 |
512 | 128 | 29 | 50 | 80 | 140 | 210 | 315 | 383 | 458 | ||
6400 | 128 | 17 | 25 | 30 | 35 | — | — | — | — |
. | p50延迟(毫秒/标记) | ||||||||||
并发用户 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | |||
模型 | 实例类型 | 输入字数 | 输出标记数 | . | |||||||
mistral-7b-instruct | ml.g5.2xlarge | 128 | 128 | 32 | 33 | 34 | 36 | 41 | 46 | 59 | 88 |
512 | 128 | 34 | 36 | 39 | 43 | 54 | 71 | 112 | 213 | ||
6400 | 128 | 57 | 71 | 98 | 154 | — | — | — | — |
推断和示例提示
Mistral 7B
您可以像处理任何标准文本生成模型一样与基本的Mistral 7B模型互动,其中该模型处理输入序列并输出序列中预测的下一个单词。以下是一个简单的示例,其中使用多次学习,模型提供了几个示例,并且最终示例响应是基于对这些先前示例的上下文知识生成的:
> 输入推文:“当我的手机电池没电时,我会感到难过。”情感:消极###推文:“我的一天很棒:+1:”情感:积极###推文:“这是文章的链接”情感:中立###推文:“这个新音乐视频太棒了”情感:>输出积极
Mistral 7B Instruct
Mistral的指令调整版本接受格式化指令,其中对话角色必须以用户提示开始,并在用户和助手之间交替。简单的用户提示可能如下所示:
<s>[INST] {user_prompt} [/INST]
多回合提示可能如下所示:
<s>[INST] {user_prompt_1} [/INST] {assistant_response_1} </s><s>[INST] {user_prompt_1} [/INST]
此模式根据对话中的回合数重复。
在以下章节中,我们使用Mistral 7B Instruct模型来探索一些示例。
知识检索
以下是一个知识检索的示例:
> 输入<s>[INST] 哪个国家拥有最多的天然湖泊?只回答国家名。[/INST] > 输出1. 加拿大
大篇章问题解答
为了展示如何使用该模型来支持较长的输入上下文长度,以下示例嵌入了一段来自MCAS Grade 10英语语言艺术阅读理解测试的文章“《Rats》”。输入提示指示模型对文本进行指定问题的回答:
> 输入<s>[INST] 一只老鼠是啮齿动物,是世界上最常见的哺乳动物。挪威褐鼠是四百多种啮齿动物中的一种,也有许多不同的名字用来描述其特征、感知特征或者栖息地:地鼠、漫游老鼠、谷仓老鼠、田鼠、迁徙老鼠、家鼠、下水道老鼠、水鼠、码头老鼠、小巷老鼠、灰鼠、褐鼠和普通鼠。一般的褐鼠个体较大而肥壮;从鼻子到尾巴长约16英寸,相当于成年男性的脚的大小;体重约一磅,尽管科学家和灭鼠师测量到的褐鼠长度可达20英寸,重达两磅。褐鼠有时会与黑鼠(或称船鼠)混淆,后者体型较小,曾经在纽约市和美国的所有城市中有人居住,但自从挪威褐鼠出现后,黑鼠在现在的角色上已经排到了次要位置。(这两个物种仍然共存于一些南部沿海城市和西海岸的城市,比如洛杉矶,在这些地方,黑鼠栖息在阁楼和棕榈树上。)黑鼠总是浓墨黑色的,而褐鼠是灰色或褐色的,腹部可能是浅灰色、黄色,甚至是纯白色的。有一年的春天,在布鲁克林大桥下,我看见一只红毛褐鼠被车撞死了。宠物老鼠和实验室老鼠都是挪威褐鼠,但它们不是野生的,我强调一下,不是本书的主题。有时宠物老鼠被称为花纹老鼠。但是如果有人拿起这本书来了解花纹老鼠,那么他们应该立刻放下这本书;这里所提到的老鼠一点也不花哨。老鼠是夜行动物,在夜晚外出时,褐鼠的眼睛很小、很黑、很闪亮;当手电筒在黑暗中照亮它们时,老鼠的眼睛就像鹿的眼睛一样发光。虽然它在黑暗中觅食,但褐鼠视力不佳。它用第一感官嗅觉弥补了这一点。. . . 它们具有很好的味觉,可以检测到微量的毒物,诸如每百万份之一。褐鼠的前脚掌上各有四个类似爪子的指甲,后脚掌更长更结实。它可以像松鼠一样奔跑和攀爬。它是一只出色的游泳者,在河流和海湾、下水道和马桶盆中存活。褐鼠的牙齿数学与推理
Mistral模型还报告了数学准确性方面的优势。 Mistral可以提供以下数学逻辑的理解:
> 输入 <s>[INST]我给6个孩子买了一个冰淇淋。每个蛋筒价值1.25美元,我用了一张10美元的钞票支付。我得到了多少美元找零?在回答之前,请先解释。[/INST]> 输出
1. 首先,让我们计算一下冰淇淋的总成本。 由于每个蛋筒价值1.25美元,有6个孩子,总成本将为:
总成本=蛋筒的数量 * 每个蛋筒的成本
总成本=6 * 1.25
总成本=7.50美元
2. 接下来,我们将从支付金额(10美元)中减去总成本,以找出返回的金额:
返回的金额=支付金额-总成本
返回的金额=10 - 7.50
返回的金额=2.50美元
因此,你在给6个孩子买冰淇淋后得到了2.50美元的找零。
编程
下面是一个编码提示的示例:
> 输入<s>[INST]在Bash中,我如何列出当前目录(不包括子目录)中在最近一个月内修改过的所有文本文件?[/INST] > 输出
1. 使用`find`命令在当前目录(不包括子目录)中搜索在最近一个月内修改过的所有文本文件。 `-type f`选项指定我们只想搜索文件,而不是目录。 `-name "*.txt"`选项指定我们只想搜索扩展名为`.txt`的文件。 `-mtime -30`选项指定我们只想搜索在过去30天(1个月)内修改过的文件。
```bashfind . -type f -name "*.txt" -mtime -30```
这个命令将列出在当前目录(不包括子目录)中在最近一个月内修改过的所有文本文件。
清理
在完成笔记本的运行后,请务必删除您在过程中创建的所有资源,以停止计费。使用以下代码:
predictor.delete_model()predictor.delete_endpoint()
结论
在本文中,我们展示了如何使用SageMaker Studio开始使用Mistral 7B并部署推理模型。由于基础模型是预训练的,它们可以帮助降低培训和基础设施成本,并为您的用例提供定制化能力。现在,访问 Amazon SageMaker JumpStart 开始使用。
资源