Mistral 发布 Mixtral 8x7B,Hugging Face 提供全生态支持
Welcome Mixtral - a SOTA Mixture of Experts on Hugging Face
Mistral 发布 Mixtral 8x7B,采用 Mixture of Experts 架构,在多数基准上超越 Llama 2 70B 并达到或超过 GPT-3.5,Mixtral Instruct 在 MT-Bench 得分 8.30,是首个接近 GPT-3.5 的开放模型。
文章解释了 MoE 架构下 Mixtral 实际约 45B 参数而非 56B,并给出推理、量化与单卡微调的完整落地路径。
Mixtral 8x7b 是 Mistral 今天发布的一个令人兴奋的大型语言模型,它为开放访问模型设定了新的最先进水平,并在许多基准测试中超越了 GPT-3.5。我们很高兴通过在 Hugging Face 生态系统中全面集成 Mixtral 来支持这一发布 🔥!
在今天发布的功能和集成中,我们有:
- Hub 上的模型,包含其模型卡片和许可证(Apache 2.0)
- 🤗 Transformers 集成
- 与 Inference Endpoints 集成
- 与 Text Generation Inference 集成,以实现快速高效的生产级推理
- 一个使用 🤗 TRL 在单个 GPU 上微调 Mixtral 的示例。
目录
什么是 Mixtral 8x7b?
Mixtral 的架构与 Mistral 7B 类似,但有一个变化:得益于一种称为专家混合(MoE)的技术,它实际上是 8 个“专家”模型合而为一。对于 transformer 模型,其工作方式是将一些前馈层替换为稀疏 MoE 层。MoE 层包含一个路由网络,用于选择哪些专家最有效地处理哪些 token。在 Mixtral 的情况下,每个时间步会选择两个专家,这使得模型能够以 12B 参数密集模型的速度进行解码,尽管其有效参数数量是后者的 4 倍!
有关 MoE 的更多详细信息,请参阅我们随附的博客文章:hf.co/blog/moe
Mixtral 发布 TL;DR;
- 发布基础版和 Instruct 版本
- 支持 32k token 的上下文长度。
- 在大多数基准测试中优于 Llama 2 70B,并与 GPT3.5 持平或超越
- 支持英语、法语、德语、西班牙语和意大利语。
- 擅长编码,在 HumanEval 上达到 40.2%
- 采用 Apache 2.0 许可证,商业使用宽松
那么 Mixtral 模型有多好?以下是基础模型及其与其他开放模型在 LLM 排行榜上的性能对比概览(分数越高越好):
| 模型 | 许可证 | 商业使用? | 预训练规模 [tokens] | 排行榜分数 ⬇️ |
|---|---|---|---|---|
| mistralai/Mixtral-8x7B-v0.1 | Apache 2.0 | ✅ | 未知 | 68.42 |
| meta-llama/Llama-2-70b-hf | Llama 2 许可证 | ✅ | 2,000B | 67.87 |
| tiiuae/falcon-40b | Apache 2.0 | ✅ | 1,000B | 61.5 |
| mistralai/Mistral-7B-v0.1 | Apache 2.0 | ✅ | 未知 | 60.97 |
| meta-llama/Llama-2-7b-hf | Llama 2 许可证 | ✅ | 2,000B | 54.32 |
对于 instruct 和 chat 模型,在 MT-Bench 或 AlpacaEval 等基准测试上评估更好。下面,我们展示了 Mixtral Instruct 与顶级闭源和开放访问模型的对比表现(分数越高越好):
| 模型 | 可用性 | 上下文窗口(tokens) | MT-Bench 分数 ⬇️ |
|---|---|---|---|
| GPT-4 Turbo | 专有 | 128k | 9.32 |
| GPT-3.5-turbo-0613 | 专有 | 16k | 8.32 |
| mistralai/Mixtral-8x7B-Instruct-v0.1 | Apache 2.0 | 32k | 8.30 |
| Claude 2.1 | 专有 | 200k | 8.18 |
| openchat/openchat_3.5 | Apache 2.0 | 8k | 7.81 |
| HuggingFaceH4/zephyr-7b-beta | MIT | 8k | 7.34 |
| meta-llama/Llama-2-70b-chat-hf | Llama 2 许可证 | 4k | 6.86 |
令人印象深刻的是,Mixtral Instruct 在 MT-Bench 上超越了所有其他开放获取模型,并且是首个达到与 GPT-3.5 相当性能的模型!
关于名称
Mixtral MoE 被称为 Mixtral-8x7B,但它并没有 560 亿参数。发布后不久,我们发现有些人被误导,认为该模型的行为类似于 8 个各含 70 亿参数模型的集成,但 MoE 模型并非如此运作。模型中只有部分层(前馈块)被复制;其余参数与 70 亿参数模型相同。总参数数量不是 560 亿,而是约 450 亿。一个更好的名称本可以是 Mixtral-45-8e,以更好地传达其架构。关于 MoE 工作原理的更多细节,请参阅我们的“专家混合模型详解”文章。
提示格式
基础模型没有提示格式。与其他基础模型一样,它可用于以合理的续写延续输入序列,或用于零样本/少样本推理。它也是针对您自己的用例进行微调的绝佳基础。Instruct 模型具有非常简单的对话结构。
<s> [INST] User Instruction 1 [/INST] Model answer 1</s> [INST] User instruction 2[/INST]
为了有效使用,必须精确复现此格式。稍后我们将展示使用 transformers 中可用的聊天模板来复现 instruct 提示是多么容易。
我们不知道的事
与之前的 Mistral 7B 发布一样,关于这一新系列模型存在若干未解问题。特别是,我们没有关于预训练所用数据集大小、其组成或预处理方式的信息。
同样,对于 Mixtral instruct 模型,也没有分享关于微调数据集或与 SFT 和 DPO 相关的超参数的细节。
演示
您可以在 Hugging Face Chat 上与 Mixtral Instruct 模型聊天!在此查看:https://huggingface.co/chat/?model=mistralai/Mixtral-8x7B-Instruct-v0.1。
推理
我们提供两种主要方式来运行 Mixtral 模型的推理:
- 通过 🤗 Transformers 的
pipeline()函数。 - 使用 Text Generation Inference,它支持连续批处理、张量并行等高级功能,以实现极速结果。
对于每种方法,都可以以半精度(float16)或量化权重运行模型。由于 Mixtral 模型的大小大致相当于 450 亿参数的稠密模型,我们可以如下估算所需的最小显存:
| 精度 | 所需显存 |
|---|---|
| float16 | >90 GB |
| 8-bit | >45 GB |
| 4-bit | >23 GB |
使用 🤗 Transformers
使用 transformers 4.36 版本,您可以使用 Mixtral 并利用 Hugging Face 生态系统中的所有工具,例如:
- 训练和推理脚本及示例
- 安全文件格式(
safetensors) - 与 bitsandbytes(4-bit 量化)、PEFT(参数高效微调)和 Flash Attention 2 等工具的集成
- 用于运行模型生成的实用工具和辅助函数
- 导出模型以进行部署的机制
确保使用最新版本的 transformers:
pip install --upgrade transformers
在以下代码片段中,我们展示如何使用 🤗 Transformers 和 4-bit 量化运行推理。由于模型规模较大,您需要至少 30 GB 内存的显卡才能运行。这包括 A100(80 或 40GB 版本)或 A6000(48 GB)等显卡。
from transformers import pipeline
import torch
model = "mistralai/Mixtral-8x7B-Instruct-v0.1"
pipe = pipeline(
"text-generation",
model=model,
model_kwargs={"torch_dtype": torch.float16, "load_in_4bit": True},
)
messages = [{"role": "user", "content": "Explain what a Mixture of Experts is in less than 100 words."}]
outputs = pipe(messages, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)
print(outputs[0]["generated_text"][-1]["content"])
<s>[INST] 用不到100字解释什么是专家混合模型。[/INST] A 专家混合模型是一种集成学习方法,它结合多个模型或“专家”来做出更准确的预测。每个专家专注于数据的不同子集,而门控网络决定针对给定输入使用哪个合适的专家。这种方法使模型能够适应数据中复杂的非线性关系,并提高整体性能。
使用文本生成推理
文本生成推理 是由Hugging Face开发的生产就绪推理容器,旨在轻松部署大型语言模型。它具有连续批处理、令牌流式传输、多GPU快速推理的张量并行性以及生产就绪的日志记录和跟踪等功能。
您可以在Hugging Face的 推理端点上部署Mixtral,它使用文本生成推理作为后端。要部署Mixtral模型,请转到 模型页面 并点击 部署 -> 推理端点小部件。
注意:您可能需要通过电子邮件向 api-enterprise@huggingface.co 请求配额升级才能访问A100s
您可以在我们的博客中了解更多关于如何 使用Hugging Face推理端点部署LLMs的信息。该 博客包含有关支持的超参数以及如何使用Python和Javascript流式传输响应的信息。
您还可以使用Docker在2x A100s(80GB)上本地运行文本生成推理,如下所示:
docker run --gpus all --shm-size 1g -p 3000:80 -v /data:/data ghcr.io/huggingface/text-generation-inference:1.3.0 \
--model-id mistralai/Mixtral-8x7B-Instruct-v0.1 \
--num-shard 2 \
--max-batch-total-tokens 1024000 \
--max-total-tokens 32000
使用🤗 TRL进行微调
训练LLMs在技术和计算上都具有挑战性。在本节中,我们将介绍Hugging Face生态系统中可用的工具,以便在单个A100 GPU上高效训练Mixtral。
下面是一个在OpenAssistant的聊天数据集上微调Mixtral的示例命令。为了节省内存,我们利用4位量化和QLoRA来针对注意力块中的所有线性层。请注意,与密集变换器不同,不应针对MLP层,因为它们是稀疏的,并且与PEFT的交互效果不佳。
首先,安装🤗 TRL的夜间版本并克隆仓库以访问训练脚本:
pip install -U transformers
pip install git+https://github.com/huggingface/trl
git clone https://github.com/huggingface/trl
cd trl
然后您可以运行脚本:
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1 \
trl/scripts/sft.py \
--model_name mistralai/Mixtral-8x7B-v0.1 \
--dataset_name trl-lib/ultrachat_200k_chatml \
--batch_size 2 \
--gradient_accumulation_steps 1 \
--learning_rate 2e-4 \
--save_steps 200_000 \
--use_peft \
--peft_lora_r 16 --peft_lora_alpha 32 \
--target_modules q_proj k_proj v_proj o_proj \
--load_in_4bit
在单个A100上训练大约需要48小时,但可以通过将--num_processes调整为您可用的GPU数量来轻松并行化。
量化Mixtral
如上所示,该模型的挑战在于使其能在消费级硬件上运行以供任何人使用,因为该模型仅以半精度加载就需要约90GB(torch.float16)。
借助🤗 transformers库,我们支持开箱即用的推理,采用最先进的量化方法,如QLoRA和GPTQ。您可以在相应的文档部分中阅读更多关于我们支持的量化方法的信息。
使用4位量化加载Mixtral
如推理部分所示,您可以通过安装bitsandbytes库(pip install -U bitsandbytes)并将标志load_in_4bit=True传递给from_pretrained方法来加载4位量化的Mixtral。为了获得更好的性能,我们建议用户使用bnb_4bit_compute_dtype=torch.float16加载模型。请注意,您需要至少30GB VRAM的GPU设备才能正确运行下面的代码片段。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config)
prompt = "[INST] Explain what a Mixture of Experts is in less than 100 words. [/INST]"
inputs = tokenizer(prompt, return_tensors="pt").to(0)
output = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))
这种 4-bit 量化技术是在 QLoRA 论文中提出的,你可以在文档的相应章节或这篇博文中了解更多相关信息。
使用 GPTQ 加载 Mixtral
GPTQ 算法是一种训练后量化技术,其中权重矩阵的每一行都被独立量化,以找到使误差最小化的权重版本。这些权重被量化为 int4,但在推理过程中会即时恢复为 fp16。与 4-bit QLoRA 不同,GPTQ 需要使用数据集对模型进行校准才能进行量化。可直接使用的 GPTQ 模型由 TheBloke 分享在 🤗 Hub 上,因此任何人都可以使用它们,而无需先进行校准。
对于 Mixtral,我们必须调整校准方法,确保不量化专家门控层以获得更好的性能。量化模型的最终困惑度(越低越好)为 4.40,而半精度模型为 4.25。量化模型可以在这里找到,要使用 🤗 transformers 运行它,你首先需要更新 auto-gptq 和 optimum 库:
pip install -U optimum auto-gptq
你还需要从源码安装 transformers:
pip install -U git+https://github.com/huggingface/transformers.git
安装完成后,只需使用 from_pretrained 方法加载 GPTQ 模型:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "TheBloke/Mixtral-8x7B-v0.1-GPTQ"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
prompt = "[INST] Explain what a Mixture of Experts is in less than 100 words. [/INST]"
inputs = tokenizer(prompt, return_tensors="pt").to(0)
output = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))
请注意,对于 QLoRA 和 GPTQ,你至少需要 30 GB 的 GPU 显存才能容纳该模型。如果使用 device_map="auto",如上面的示例所示,你可以在 24 GB 显存下运行,因为部分层会被卸载到 CPU。
免责声明与正在进行的工作
- 量化:MoE 的量化是一个活跃的研究领域。我们与 TheBloke 进行的一些初步实验如上所示,但随着人们对这种架构的了解越来越深入,我们期待更多进展!未来几天和几周内该领域的发展将令人兴奋。此外,最近的工作如 QMoE,实现了 MoE 的亚 1-bit 量化,也可以应用到这里。
- 高显存占用:MoE 的推理速度非常快,但仍需要大量显存(因此需要昂贵的 GPU)。这使得它在本地环境中使用具有挑战性。MoE 非常适合拥有多设备和大量显存的配置。Mixtral 在半精度下需要 90GB 的显存 🤯
其他资源
结论
我们对 Mixtral 的发布感到非常兴奋!在接下来的几天里,请准备好了解更多关于微调和部署 Mixtral 的方法。
来源:Hugging Face:Blog(RSS) · huggingface.co