今天,我們很高興地宣布,Mistral-NeMo-Base-2407 和 Mistral-NeMo-Instruct-2407——來自 Mistral AI 的十二億參數大型語言模型,擅長文本生成——現在可以通過 Amazon SageMaker JumpStart 提供給客戶使用。您可以使用 SageMaker JumpStart 試用這些模型,這是一個機器學習 (ML) 中心,提供可以一鍵部署的算法和模型,用於運行推理。在這篇文章中,我們將介紹如何發現、部署和使用 Mistral-NeMo-Instruct-2407 和 Mistral-NeMo-Base-2407 模型,應用於各種現實世界的案例。
Mistral-NeMo-Instruct-2407 和 Mistral-NeMo-Base-2407 概述
Mistral NeMo 是一個強大的 12B 參數模型,通過 Mistral AI 和 NVIDIA 的合作開發,並在 Apache 2.0 許可下發布,現在可以在 SageMaker JumpStart 上使用。這個模型在多語言 AI 能力和可及性方面代表了一個重要的進步。
主要特點和能力
Mistral NeMo 擁有 128k 令牌上下文窗口,能夠處理大量長篇內容。該模型在推理、世界知識和編碼準確性方面表現出色。預訓練的基礎模型和指令調整的檢查點都在 Apache 2.0 許可下提供,這使得研究人員和企業都能輕鬆使用。該模型的量化感知訓練促進了最佳的 FP8 推理性能,而不會影響質量。
多語言支持
Mistral NeMo 設計用於全球應用,支持多種語言,包括英語、法語、德語、西班牙語、意大利語、葡萄牙語、中文、日語、韓語、阿拉伯語和印地語。這種多語言能力,加上內建的功能調用和廣泛的上下文窗口,使得先進的 AI 更加可及,能夠適應不同的語言和文化背景。
Tekken:先進的令牌化技術
該模型使用 Tekken,一種基於 tiktoken 的創新令牌器。Tekken 在超過 100 種語言上進行訓練,為自然語言文本和源代碼提供了更高的壓縮效率。
SageMaker JumpStart 概述
SageMaker JumpStart 是一個完全管理的服務,提供最先進的基礎模型,適用於各種用例,如內容寫作、代碼生成、問答、文案撰寫、摘要、分類和信息檢索。它提供了一系列預訓練模型,您可以快速部署,加速 ML 應用的開發和部署。SageMaker JumpStart 的一個關鍵組件是模型中心,提供了大量的預訓練模型,例如 DBRX,適用於各種任務。
您現在可以在 Amazon SageMaker Studio 中輕鬆發現和部署 Mistral NeMo 模型,或通過 SageMaker Python SDK 進行編程,利用 Amazon SageMaker 的功能,如 Amazon SageMaker Pipelines、Amazon SageMaker Debugger 或容器日誌,來獲取模型性能和機器學習操作 (MLOps) 控制。該模型在 AWS 安全環境中部署,並在您的虛擬私有雲 (VPC) 控制下運行,幫助支持數據安全。
前提條件
要在 SageMaker JumpStart 中試用這兩個 NeMo 模型,您需要以下前提條件:
在 SageMaker JumpStart 中發現 Mistral NeMo 模型
您可以通過 SageMaker Studio UI 和 SageMaker Python SDK 訪問 NeMo 模型。在這一部分,我們將介紹如何在 SageMaker Studio 中發現這些模型。
SageMaker Studio 是一個集成開發環境 (IDE),提供一個基於網頁的可視化界面,您可以在這裡訪問專門設計的工具,執行從準備數據到構建、訓練和部署 ML 模型的開發步驟。要了解如何開始使用並設置 SageMaker Studio,請參閱 Amazon SageMaker Studio。
在 SageMaker Studio 中,您可以通過在導航窗格中選擇 JumpStart 來訪問 SageMaker JumpStart。
然後選擇 HuggingFace。
從 SageMaker JumpStart 登陸頁面,您可以在搜索框中搜索 NeMo。搜索結果將列出 Mistral NeMo Instruct 和 Mistral NeMo Base。
您可以選擇模型卡以查看有關模型的詳細信息,例如許可證、用於訓練的數據以及如何使用該模型。您還會找到部署按鈕,以部署模型並創建端點。
在 SageMaker JumpStart 中部署模型
當您選擇部署按鈕時,部署將開始。部署完成後,您將看到創建了一個端點。您可以通過傳遞示例推理請求負載或使用 SDK 選擇測試選項來測試該端點。當您選擇使用 SDK 的選項時,您將看到可以在 SageMaker Studio 的筆記本編輯器中使用的示例代碼。
使用 SageMaker Python SDK 部署模型
要使用 SDK 部署,我們首先選擇 Mistral NeMo Base 模型,指定 model_id 為 huggingface-llm-mistral-nemo-base-2407。您可以使用以下代碼在 SageMaker 上部署選定的模型。同樣,您可以使用 NeMo Instruct 的模型 ID 進行部署。
from sagemaker.jumpstart.model import JumpStartModel
accept_eula = True
model = JumpStartModel(model_id=”huggingface-llm-mistral-nemo-base-2407″)
predictor = model.deploy(accept_eula=accept_eula)
這將使用默認配置在 SageMaker 上部署模型,包括默認實例類型和默認 VPC 配置。您可以通過在 JumpStartModel 中指定非默認值來更改這些配置。EULA 值必須明確定義為 True,以接受最終用戶許可協議 (EULA)。還要確保您擁有使用 ml.g6.12xlarge 作為端點使用的帳戶級服務限制。您可以按照 AWS 服務配額中的說明請求服務配額增加。部署後,您可以通過 SageMaker 預測器對已部署的端點進行推理:
payload = {
“messages”: [
{
“role”: “user”,
“content”: “你好”
}
],
“max_tokens”: 1024,
“temperature”: 0.3,
“top_p”: 0.9,
}
response = predictor.predict(payload)[‘choices’][0][‘message’][‘content’].strip()
print(response)
這裡需要注意的一個重要點是,我們使用的是 djl-lmi v12 推理容器,因此在向 Mistral-NeMo-Base-2407 和 Mistral-NeMo-Instruct-2407 發送負載時,我們遵循大型模型推理聊天完成 API 架構。
Mistral-NeMo-Base-2407
您可以像使用其他標準文本生成模型一樣與 Mistral-NeMo-Base-2407 模型互動,該模型處理輸入序列並輸出預測的下一個單詞。在這一部分,我們提供一些示例提示和示例輸出。請記住,基礎模型並未經過指令微調。
文本完成
涉及預測下一個令牌或填補序列中缺失令牌的任務:
payload = {
“messages”: [
{
“role”: “user”,
“content”: “法國的首都是___。”
}
],
“max_tokens”: 10,
“temperature”: 0.3,
“top_p”: 0.9,
}
response = predictor.predict(payload)[‘choices’][0][‘message’][‘content’].strip()
print(response)
以下是輸出:
巴黎
法國的首都是巴黎。
Mistral NeMo Instruct
Mistral-NeMo-Instruct-2407 模型是一個快速演示,顯示基礎模型可以進行微調以實現出色的性能。您可以按照提供的步驟部署該模型,並使用 huggingface-llm-mistral-nemo-instruct-2407 的 model_id 值。
經過指令微調的 NeMo 模型可以用於以下任務:
代碼生成
Mistral NeMo Instruct 在編碼任務中顯示了基準優勢。Mistral 表示,他們的 Tekken 令牌器對於壓縮源代碼的效率提高了約 30%。例如,請參見以下代碼:
payload = {
“messages”: [
{
“role”: “user”,
“content”: “””創建一個二叉搜索樹類,包含插入、搜索和中序遍歷的方法。”””
}
],
“max_tokens”: 2048,
“temperature”: 0.3,
“top_p”: 0.9,
}
text_response = predictor.predict(payload)[‘choices’][0][‘message’][‘content’].strip()
tokens = predictor.predict(payload)[‘usage’]
print(text_response)
print(tokens)
以下是輸出:
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self, key):
if not self.root:
self.root = Node(key)
else:
self._insert(self.root, key)
def _insert(self, node, key):
if key < node.key:
if node.left:
self._insert(node.left, key)
else:
node.left = Node(key)
elif key > node.key:
if node.right:
self._insert(node.right, key)
else:
node.right = Node(key)
def search(self, key):
return self._search(self.root, key)
def _search(self, node, key):
if not node or node.key == key:
return node
if key < node.key:
return self._search(node.left, key)
else:
return self._search(node.right)
def inorder_traversal(self):
self._inorder_traversal(self.root)
print()
def _inorder_traversal(self, node):
if node:
self._inorder_traversal(node.left)
print(node.key, end=” “)
self._inorder_traversal(node.right)
# 示例用法:
bst = BinarySearchTree()
bst.insert(50)
bst.insert(30)
bst.insert(20)
bst.insert(40)
bst.insert(70)
bst.insert(60)
bst.insert(80)
print(“中序遍歷:”)
bst.inorder_traversal() # 輸出: 20 30 40 50 60 70 80
print(f”搜索 40: {bst.search(40).key if bst.search(40) else ‘未找到’}”)
print(f”搜索 90: {bst.search(90).key if bst.search(90) else ‘未找到’}”)
{‘prompt_tokens’: 22, ‘completion_tokens’: 433, ‘total_tokens’: 455}
該模型在代碼生成任務中表現出色,completion_tokens 提供了有關令牌器如何有效地優化編程語言表示的見解,使用更少的令牌。
高級數學和推理
該模型在數學和推理準確性方面也顯示出優勢。例如,請參見以下代碼:
payload = {
“messages”: [
{ “role”: “system”,
“content”: “您是數學和推理的專家。您的角色是提供與數學概念、問題解決技巧和邏輯推理相關的示例、解釋和見解。”,
“role”: “user”,
“content”: “””計算一顆系外行星的軌道週期:
給定:一顆系外行星以 2.5 AU(天文單位)的距離繞其恆星運行。該恆星的質量為 1.2 個太陽質量。
任務:計算該系外行星的軌道週期(以地球年為單位)。”””
}
],
“max_tokens”: 2048,
“temperature”: 0.3,
“top_p”: 0.9,
}
response = predictor.predict(payload)[‘choices’][0][‘message’][‘content’].strip()
print(response)
以下是輸出:
要計算系外行星的軌道週期,我們可以使用開普勒第三定律,該定律指出,軌道週期 (P) 的平方與軌道的半長軸 (a) 的立方成正比,並與中央天體的質量 (M) 成反比。公式為:
P^2 = (4 * π^2 * a^3) / (G * M)
其中:
– P 是以年為單位的軌道週期,
– a 是以 AU(天文單位)為單位的半長軸,
– G 是引力常數 (6.67430 × 10^-11 m^3 kg^-1 s^-2),
– M 是以太陽質量為單位的恆星質量。
首先,我們需要將恆星的質量從太陽質量轉換為千克。太陽的質量約為 1.98847 × 10^30 kg。因此,恆星的質量為:
M = 1.2 * 1.98847 × 10^30 kg = 2.386164 × 10^30 kg
現在,我們可以將這些值代入開普勒第三定律:
P^2 = (4 * π^2 * (2.5 AU)^3) / (G * M)
由於 1 AU 約為 1.496 × 10^11 米,半長軸以米為單位為:
a = 2.5 AU * 1.496 × 10^11 m/AU = 3.74 × 10^12 m
現在,我們可以計算 P^2:
P^2 = (4 * π^2 * (3.74 × 10^12 m)^3) / (6.67430 × 10^-11 m^3 kg^-1 s^-2 * 2.386164 × 10^30 kg)
P^2 = (4 * π^2 * 5.62 × 10^36 m^3) / (1.589 × 10^20 m^3 kg^-1 s^-2)
P^2 = 4.15 × 10^16 s^2
現在,我們取平方根以找到軌道週期(以秒為單位):
P = √(4.15 × 10^16 s^2) ≈ 2.04 × 10^8 s
最後,我們將軌道週期從秒轉換為地球年(1 地球年 = 31,557,600 秒):
P = (2.04 × 10^8 s) / (31,557,600 s/year) ≈ 6.47 年
因此,該系外行星的軌道週期約為 6.47 地球年。
語言翻譯任務
在這個任務中,讓我們測試 Mistral 的新 Tekken 令牌器。Mistral 表示,該令牌器在壓縮韓語和阿拉伯語方面的效率分別提高了兩倍和三倍。
這裡,我們使用一些文本進行翻譯:
text= “””
“我們的業務如何利用 Mistral NeMo 與我們的新 RAG 應用程序?”
“一旦我們將這個新應用程序推廣到現場,我們的變更管理策略是什麼?”
“””
我們設置提示以指示模型進行韓語和阿拉伯語的翻譯:
prompt=f”””
text={text}
將以下文本翻譯成這些語言:
1. 韓語
2. 阿拉伯語
相應標記每個語言部分”””.format(text=text)
然後我們可以設置負載:
payload = {
“messages”: [
{ “role”: “system”,
“content”: “您是語言翻譯的專家。”,
“role”: “user”,
“content”: prompt
}
],
“max_tokens”: 2048,
“temperature”: 0.3,
“top_p”: 0.9,
}
#response = predictor.predict(payload)
text_response = predictor.predict(payload)[‘choices’][0][‘message’][‘content’].strip()
tokens = predictor.predict(payload)[‘usage’]
print(text_response)
print(tokens)
以下是輸出:
**1. 韓語**
– “우리의 비즈니스가 Mistral NeMo를 어떻게 활용할 수 있을까요?”
– “이 새 애플리케이션을 현장에 롤아웃할 때 우리의 변화 관리 전략은 무엇입니까?”
**2. 阿拉伯語**
– “كيف يمكن لعمليتنا الاستفادة من Mistral NeMo مع تطبيق RAG الجديد؟”
– “ما هو استراتيجيتنا في إدارة التغيير بعد تفعيل هذا التطبيق الجديد في الميدان؟”
{‘prompt_tokens’: 61, ‘completion_tokens’: 243, ‘total_tokens’: 304}
翻譯結果顯示,使用的 completion_tokens 數量顯著減少,即使對於通常令牌密集的任務,如涉及韓語和阿拉伯語的翻譯。這一改進得益於 Tekken 令牌器提供的優化。這種減少對於令牌密集型應用特別有價值,包括摘要、語言生成和多輪對話。通過提高令牌效率,Tekken 令牌器使得在相同的資源限制內可以處理更多任務,成為優化工作流程的重要工具,因為令牌使用直接影響性能和成本。
清理
在您完成運行筆記本後,請確保刪除在過程中創建的所有資源,以避免額外的費用。使用以下代碼:
predictor.delete_model()
predictor.delete_endpoint()
結論
在這篇文章中,我們向您展示了如何在 SageMaker Studio 中開始使用 Mistral NeMo Base 和 Instruct,並部署模型進行推理。由於基礎模型是預訓練的,它們可以幫助降低訓練和基礎設施成本,並使其能夠根據您的用例進行定制。現在就訪問 SageMaker Studio 中的 SageMaker JumpStart 開始使用吧。
欲了解更多 AWS 上的 Mistral 資源,請查看 Mistral-on-AWS GitHub 倉庫。
關於作者
Niithiyn Vijeaswaran 是 AWS 第三方模型科學團隊的生成 AI 專家解決方案架構師。他專注於生成 AI 和 AWS AI 加速器,擁有計算機科學和生物信息學的學士學位。
Preston Tuggle 是一名高級專家解決方案架構師,專注於生成 AI。
Shane Rai 是 AWS 全球專家組織 (WWSO) 的首席生成 AI 專家。他與各行各業的客戶合作,利用 AWS 提供的廣泛雲端 AI/ML 服務解決他們最迫切和創新的商業需求,包括來自頂級基礎模型提供商的模型。