许可证:Apache-2.0
标签:
- 微调模型
任务类型:文本生成
新版本:mistralai/Mistral-7B-Instruct-v0.3
推理支持:是
交互示例:
- 消息:
额外授权说明:如需了解我们如何处理您的个人数据,请阅读我们的隐私政策。
Mistral-7B-Instruct-v0.2模型卡
使用mistral_common
进行编码与解码
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
mistral_models_path = "MISTRAL_MODELS_PATH"
tokenizer = MistralTokenizer.v1()
completion_request = ChatCompletionRequest(messages=[UserMessage(content="用一句话解释机器学习")])
tokens = tokenizer.encode_chat_completion(completion_request).tokens
使用mistral_inference
进行推理
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
model = Transformer.from_folder(mistral_models_path)
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)
使用Hugging Face transformers
推理
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
model.to("cuda")
generated_ids = model.generate(tokens, max_new_tokens=1000, do_sample=True)
result = tokenizer.decode(generated_ids[0].tolist())
print(result)
[!提示]
欢迎提交PR修正transformers
分词器,使其与mistral_common
参考实现完全一致!
Mistral-7B-Instruct-v0.2大语言模型是基于Mistral-7B-v0.2进行指令微调的版本。
相比Mistral-7B-v0.1,v0.2版本主要改进:
- 上下文窗口扩展至32k(v0.1为8k)
- Rope-theta参数设为1e6
- 移除了滑动窗口注意力机制
完整技术细节请参阅我们的论文和发布博客。
指令格式
为发挥指令微调效果,提示词需用[INST]
和[/INST]
标记包裹。首条指令应以句子起始符开头,后续指令则不需要。模型生成内容将以句子结束符终止。
示例:
text = "<s>[INST] 你最喜欢的调味品是什么? [/INST]"
"我个人特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!</s>"
"[INST] 你有蛋黄酱食谱吗? [/INST]"
可通过apply_chat_template()
方法应用此对话模板:
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
messages = [
{"role": "user", "content": "你最喜欢的调味品是什么?"},
{"role": "助手", "content": "我个人特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!"},
{"role": "user", "content": "你有蛋黄酱食谱吗?"}
]
encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")
model_inputs = encodeds.to(device)
model.to(device)
generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])
故障排查
若遇到以下错误:
Traceback (most recent call last):
...
KeyError: 'mistral'
请通过源码安装transformers解决:
pip install git+https://github.com/huggingface/transformers
该问题在transformers-v4.33.4及以上版本已修复。
局限性
Mistral 7B Instruct模型仅展示了基础模型通过简单微调即可获得出色性能。当前版本未内置内容审核机制,我们期待与社区共同探索如何建立有效的输出约束机制,以满足需受控输出的部署环境需求。
Mistral AI团队
成员包括:Albert Jiang, Alexandre Sablayrolles, Arthur Mensch等(完整名单见原文)