模型简介
模型特点
模型能力
使用案例
🚀 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



