语言:
许可证: Apache-2.0
基础模型: mistralai/Mixtral-8x7B-v0.1
推理参数:
温度: 0.5
示例交互:
额外说明: 若想了解我们如何处理您的个人数据,请阅读我们的隐私政策。
Mixtral-8x7B模型卡
使用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/Mixtral-8x7B-Instruct-v0.1")
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参考实现完全一致!
Mixtral-8x7B大语言模型(LLM)是预训练的稀疏专家混合生成模型。在多数测试基准上,Mixtral-8x7B表现优于Llama 2 70B。
完整模型细节请参阅我们的发布博客。
注意事项
本仓库包含兼容vLLM服务和Hugging Face transformers库的权重文件。基于原始Mixtral种子发布,但文件格式和参数名称不同。请注意该模型目前无法通过HF直接实例化。
指令格式
必须严格遵循此格式,否则模型将生成次优结果。
指令模型提示模板定义如下:
<s> [INST] 指令内容 [/INST] 模型回答</s> [INST] 后续指令 [/INST]
其中<s>
和</s>
分别表示字符串开始(BOS)和结束(EOS)的特殊标记,[INST]和[/INST]为普通字符串。
微调时的指令分词伪代码参考:
def tokenize(text):
return tok.encode(text, add_special_tokens=False)
[BOS_ID] +
tokenize("[INST]") + tokenize(用户消息1) + tokenize("[/INST]") +
tokenize(机器人回复1) + [EOS_ID] +
...
tokenize("[INST]") + tokenize(用户消息N) + tokenize("[/INST]") +
tokenize(机器人回复N) + [EOS_ID]
注意tokenize
方法不应自动添加BOS或EOS标记,但应添加前缀空格。
在Transformers库中,可使用聊天模板确保格式正确。
运行模型
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
messages = [
{"role": "user", "content": "你最喜欢的调味品是什么?"},
{"role": "assistant", "content": "我特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!"},
{"role": "user", "content": "你有蛋黄酱食谱吗?"}
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
outputs = model.generate(inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
默认情况下transformers会以全精度加载模型。您可以通过HF生态系统提供的优化方案进一步降低内存需求:
半精度模式
注意float16
精度仅适用于GPU设备
点击展开
+ import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
+ model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
messages = [
{"role": "user", "content": "你最喜欢的调味品是什么?"},
{"role": "assistant", "content": "我特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!"},
{"role": "user", "content": "你有蛋黄酱食谱吗?"}
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
使用bitsandbytes
低精度(8位和4位)
点击展开
+ import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
+ model = AutoModelForCausalLM.from_pretrained(model_id, load_in_4bit=True, device_map="auto")
messages = [
{"role": "user", "content": "你最喜欢的调味品是什么?"},
{"role": "assistant", "content": "我特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!"},
{"role": "user", "content": "你有蛋黄酱食谱吗?"}
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
使用Flash Attention 2加载模型
点击展开
+ import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
+ model = AutoModelForCausalLM.from_pretrained(model_id, use_flash_attention_2=True, device_map="auto")
messages = [
{"role": "user", "content": "你最喜欢的调味品是什么?"},
{"role": "assistant", "content": "我特别喜欢新鲜柠檬汁,它能为我烹饪的菜肴增添恰到好处的清爽风味!"},
{"role": "user", "content": "你有蛋黄酱食谱吗?"}
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
局限性
Mixtral-8x7B Instruct模型仅展示了基础模型通过微调可获得出色性能。当前版本未包含内容审核机制,我们期待与社区合作开发约束机制,使模型能安全部署于需要受控输出的环境。
Mistral AI团队
阿尔伯特·蒋、亚历山大·萨布莱罗勒斯、亚瑟·门施、布兰奇·萨瓦里、克里斯·班福德、德文德拉·辛格·查普洛特、迭戈·德拉斯卡萨斯、艾玛·布·汉娜、弗洛里安·布雷桑、吉安娜·伦杰尔、纪尧姆·布尔、纪尧姆·兰普勒、莱利奥·勒纳尔·拉沃、路易斯·泰尔农、露西尔·索尔尼尔、玛丽-安妮·拉肖、皮埃尔·斯托克、特文·勒·斯卡奥、泰奥菲尔·热尔韦、蒂博·拉维尔、托马斯·王、蒂莫西·拉克鲁瓦、威廉·埃尔·赛义德。