模型概述
模型特點
模型能力
使用案例
🚀 Mistral-Nemo-Instruct-2407大語言模型
Mistral-Nemo-Instruct-2407大語言模型(LLM)是Mistral-Nemo-Base-2407的指令微調版本。它由Mistral AI和NVIDIA聯合訓練,在性能上顯著超越了同尺寸或更小尺寸的現有模型。
若想了解該模型的更多詳情,請參考我們的發佈博客文章。
🚀 快速開始
Mistral-Nemo-Instruct-2407大語言模型可通過三種不同的框架使用,分別是mistral_inference
、transformers
和NeMo
。具體使用方法可參考對應框架的說明鏈接。
✨ 主要特性
- 開源許可:基於Apache 2許可證發佈。
- 版本多樣:提供預訓練和指令微調版本。
- 長上下文處理:使用128k上下文窗口進行訓練。
- 多語言與代碼支持:在大量的多語言和代碼數據上進行訓練。
- 可替代性:可直接替代Mistral 7B模型。
📚 詳細文檔
模型架構
Mistral Nemo是一個Transformer模型,採用了以下架構配置:
屬性 | 詳情 |
---|---|
層數 | 40 |
維度 | 5,120 |
頭維度 | 128 |
隱藏層維度 | 14,336 |
激活函數 | SwiGLU |
頭的數量 | 32 |
kv頭的數量 | 8 (GQA) |
詞表大小 | 2**17 ≈ 128k |
旋轉嵌入 (theta = 1M) | - |
評估指標
主要基準測試
基準測試 | 得分 |
---|---|
HellaSwag (0-shot) | 83.5% |
Winogrande (0-shot) | 76.8% |
OpenBookQA (0-shot) | 60.6% |
CommonSenseQA (0-shot) | 70.4% |
TruthfulQA (0-shot) | 50.3% |
MMLU (5-shot) | 68.0% |
TriviaQA (5-shot) | 73.8% |
NaturalQuestions (5-shot) | 31.2% |
多語言基準測試(MMLU)
語言 | 得分 |
---|---|
法語 | 62.3% |
德語 | 62.7% |
西班牙語 | 64.6% |
意大利語 | 61.3% |
葡萄牙語 | 63.3% |
俄語 | 59.2% |
中文 | 59.0% |
日語 | 59.0% |
💻 使用示例
Mistral Inference
安裝
建議使用mistral-inference來使用mistralai/Mistral-Nemo-Instruct-2407
模型。若需使用HF transformers的代碼片段,請繼續向下瀏覽。
pip install mistral_inference
下載
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Nemo-Instruct')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Mistral-Nemo-Instruct-2407", allow_patterns=["params.json", "consolidated.safetensors", "tekken.json"], local_dir=mistral_models_path)
對話交互
安裝mistral_inference
後,你的環境中將有mistral-chat
命令可用。你可以使用以下命令與模型進行對話:
mistral-chat $HOME/mistral_models/Nemo-Instruct --instruct --max_tokens 256 --temperature 0.35
例如,可以嘗試輸入以下問題:
請大致估算一下,請一位窗戶清潔工清潔巴黎所有窗戶需要花費多少美元?
指令跟隨
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tekken.json")
model = Transformer.from_folder(mistral_models_path)
prompt = "請大致估算一下,請一位窗戶清潔工清潔巴黎所有窗戶需要花費多少美元?"
completion_request = ChatCompletionRequest(messages=[UserMessage(content=prompt)])
tokens = tokenizer.encode_chat_completion(completion_request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.35, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)
函數調用
from mistral_common.protocol.instruct.tool_calls import Function, Tool
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tekken.json")
model = Transformer.from_folder(mistral_models_path)
completion_request = ChatCompletionRequest(
tools=[
Tool(
function=Function(
name="get_current_weather",
description="Get the current weather",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The temperature unit to use. Infer this from the users location.",
},
},
"required": ["location", "format"],
},
)
)
],
messages=[
UserMessage(content="What's the weather like today in Paris?"),
],
)
tokens = tokenizer.encode_chat_completion(completion_request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=256, temperature=0.35, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)
Transformers
⚠️ 重要提示
在發佈新版本之前,你需要從源代碼安裝transformers:
pip install git+https://github.com/huggingface/transformers.git
如果你想使用Hugging Face的transformers
庫來生成文本,可以參考以下示例:
from transformers import pipeline
messages = [
{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
{"role": "user", "content": "Who are you?"},
]
chatbot = pipeline("text-generation", model="mistralai/Mistral-Nemo-Instruct-2407",max_new_tokens=128)
chatbot(messages)
使用transformers
進行函數調用
若要使用此示例,你需要transformers
庫的版本為4.42.0或更高。更多信息請參考transformers
文檔中的函數調用指南。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "mistralai/Mistral-Nemo-Instruct-2407"
tokenizer = AutoTokenizer.from_pretrained(model_id)
def get_current_weather(location: str, format: str):
"""
Get the current weather
Args:
location: The city and state, e.g. San Francisco, CA
format: The temperature unit to use. Infer this from the users location. (choices: ["celsius", "fahrenheit"])
"""
pass
conversation = [{"role": "user", "content": "What's the weather like in Paris?"}]
tools = [get_current_weather]
# format and tokenize the tool use prompt
inputs = tokenizer.apply_chat_template(
conversation,
tools=tools,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt",
)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="auto")
inputs.to(model.device)
outputs = model.generate(**inputs, max_new_tokens=1000)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
由於篇幅限制,此示例未展示完整的工具調用循環,即調用工具並將工具調用和工具結果添加到聊天曆史中,以便模型在後續生成中使用。完整的工具調用示例請參考函數調用指南,請注意Mistral 確實 使用工具調用ID,因此這些ID必須包含在你的工具調用和工具結果中,且應為9個字母數字字符。
💡 使用建議
與之前的Mistral模型不同,Mistral Nemo需要較小的溫度參數。我們建議使用0.3的溫度值。
🔧 技術細節
Mistral Nemo是一個Transformer模型,在架構上進行了一系列的選擇,包括層數、維度、頭的數量等參數的設置,這些參數共同決定了模型的性能和能力。同時,模型在多語言和代碼數據上進行訓練,並採用了128k的上下文窗口,使其在多種基準測試中表現出色。
📄 許可證
本模型基於Apache 2.0許可證發佈。如果你想了解更多關於我們如何處理您的個人數據的信息,請閱讀我們的隱私政策。
侷限性
Mistral Nemo Instruct模型是一個快速演示,表明基礎模型可以很容易地進行微調以實現出色的性能。但它沒有任何審核機制。我們期待與社區合作,探索使模型更好地遵循規則的方法,以便在需要審核輸出的環境中進行部署。
Mistral AI團隊
Albert Jiang、Alexandre Sablayrolles、Alexis Tacnet、Alok Kothari、Antoine Roux、Arthur Mensch、Audrey Herblin - Stoop、Augustin Garreau、Austin Birky、Bam4d、Baptiste Bout、Baudouin de Monicault、Blanche Savary、Carole Rambaud、Caroline Feldman、Devendra Singh Chaplot、Diego de las Casas、Eleonore Arcelin、Emma Bou Hanna、Etienne Metzger、Gaspard Blanchet、Gianna Lengyel、Guillaume Bour、Guillaume Lample、Harizo Rajaona、Henri Roussez、Hichem Sattouf、Ian Mack、Jean - Malo Delignon、Jessica Chudnovsky、Justus Murke、Kartik Khandelwal、Lawrence Stewart、Louis Martin、Louis Ternon、Lucile Saulnier、Lélio Renard Lavaud、Margaret Jennings、Marie Pellat、Marie Torelli、Marie - Anne Lachaux、Marjorie Janiewicz、Mickaël Seznec、Nicolas Schuhl、Niklas Muhs、Olivier de Garrigues、Patrick von Platen、Paul Jacob、Pauline Buche、Pavan Kumar Reddy、Perry Savas、Pierre Stock、Romain Sauvestre、Sagar Vaze、Sandeep Subramanian、Saurabh Garg、Sophia Yang、Szymon Antoniak、Teven Le Scao、Thibault Schueller、Thibaut Lavril、Thomas Wang、Théophile Gervet、Timothée Lacroix、Valera Nemychnikova、Wendy Shang、William El Sayed、William Marshall



