模型简介
模型特点
模型能力
使用案例
语言:
- 英语
- 法语
- 德语
- 西班牙语
- 意大利语
- 葡萄牙语
- 俄语
- 中文
- 日语
许可证: apache-2.0
基础模型: mistralai/Mistral-Nemo-Base-2407
额外授权说明: 若想了解我们如何处理您的个人数据,请阅读我们的隐私政策。
Mistral-Nemo-Instruct-2407模型卡
Mistral-Nemo-Instruct-2407大型语言模型(LLM)是基于Mistral-Nemo-Base-2407进行指令微调的版本。由Mistral AI与NVIDIA联合训练,其性能显著超越同规模或更小的现有模型。
更多详情请参阅我们的发布博客文章。
核心特性
- Apache 2许可证发布
- 提供预训练版和指令微调版
- 支持128k上下文窗口训练
- 训练数据包含大量多语言和代码内容
- 可直接替代Mistral 7B
模型架构
Mistral Nemo采用Transformer架构,具体配置如下:
- 层数: 40
- 维度: 5,120
- 头维度: 128
- 隐藏层维度: 14,336
- 激活函数: SwiGLU
- 注意力头数: 32
- 键值头数: 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推理框架
安装
推荐使用mistral-inference框架。如需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)
对话
安装后可通过CLI命令交互:
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="获取当前天气",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州名,例如:San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位,根据用户所在地推断",
},
},
"required": ["location", "format"],
},
)
)
],
messages=[
UserMessage(content="巴黎今天的天气怎么样?"),
],
)
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
文本生成示例:
from transformers import pipeline
messages = [
{"role": "system", "content": "你是一个用海盗口吻回答问题的聊天机器人!"},
{"role": "user", "content": "你是谁?"},
]
chatbot = pipeline("text-generation", model="mistralai/Mistral-Nemo-Instruct-2407",max_new_tokens=128)
chatbot(messages)
Transformers函数调用
需使用transformers 4.42.0或更高版本,完整指南参见函数调用文档。
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):
"""
获取当前天气
参数:
location: 城市和州名,例如:San Francisco, CA
format: 温度单位(可选值: ["celsius", "fahrenheit"])
"""
pass
conversation = [{"role": "user", "content": "巴黎今天的天气如何?"}]
tools = [get_current_weather]
# 格式化并编码工具调用提示
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))
注意:完整工具调用流程需包含工具ID(需为9位字母数字组合),详见文档。
[!提示] 与早期Mistral模型不同,本模型推荐使用0.3的温度参数。
局限性
该指令模型展示了基础模型通过微调可获得优异性能,但未内置内容过滤机制。我们期待与社区共同探索部署方案,使其能在需要内容审核的环境中可靠运行。
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


