Mistral 发布 Mixtral 8x7B 开源 MoE 模型,Hugging Face 全面接入
Welcome Mixtral - a SOTA Mixture of Experts on HF Mirror
Mistral 发布 Mixtral 8x7B,采用 MoE 架构,含 base 与 Instruct 版本,支持 32k token 上下文,HumanEval 得分 40.2%,在多数基准上追平或超过 GPT-3.5,并以 Apache 2.0 许可开放。
Mistral 开源 MoE 模型登顶开放权重榜,文中量化数据可帮助读者判断本地部署门槛。
Mixtral 8x7b 是 Mistral 今天发布的一个令人兴奋的大型语言模型,它为开放获取模型设定了新的最先进水平,并在许多基准测试中超越了 GPT-3.5。我们很高兴通过在 HF Mirror 生态系统中全面集成 Mixtral 来支持这次发布 🔥!
今天发布的功能和集成包括:
- Hub 上的模型,包含其模型卡片和许可证(Apache 2.0)
- 🤗 Transformers 集成
- 与 Inference Endpoints 集成
- 与 Text Generation Inference 集成,实现快速高效的生产级推理
- 一个使用 🤗 TRL 在单个 GPU 上微调 Mixtral 的示例。
目录
什么是 Mixtral 8x7b?
Mixtral 的架构与 Mistral 7B 类似,但有一个不同之处:得益于一种称为 Mixture of Experts(MoE)的技术,它实际上是一个包含 8 个“专家”模型的模型。对于 transformer 模型,其工作方式是将一些前馈层替换为稀疏 MoE 层。MoE 层包含一个路由网络,用于选择哪些专家最有效地处理哪些 token。在 Mixtral 的情况下,每个时间步会选择两个专家,这使得模型能够以 12B 参数稠密模型的速度进行解码,尽管其有效参数数量是后者的 4 倍!
有关 MoE 的更多细节,请参阅我们随附的博客文章:hf.co/blog/moe
Mixtral 发布 TL;DR;
- 发布 base 和 Instruct 版本
- 支持 32k token 的上下文长度。
- 在大多数基准测试中优于 Llama 2 70B,并达到或超过 GPT3.5
- 支持英语、法语、德语、西班牙语和意大利语。
- 擅长编码,在 HumanEval 上达到 40.2%
- 采用 Apache 2.0 许可证,允许商业使用
那么 Mixtral 模型到底有多好?以下是 base 模型及其在 LLM Leaderboard 上与其他开放模型相比的性能概览(分数越高越好):
| 模型 | 许可证 | 可商业使用? | 预训练规模 [tokens] | 排行榜分数 ⬇️ |
|---|---|---|---|---|
| mistralai/Mixtral-8x7B-v0.1 | Apache 2.0 | ✅ | 未知 | 68.42 |
| meta-llama/Llama-2-70b-hf | Llama 2 license | ✅ | 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 license | ✅ | 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 license | 4k | 6.86 |
令人印象深刻的是,Mixtral Instruct 在 MT-Bench 上的表现超越了所有其他开源模型,并且是首个达到与 GPT-3.5 相当性能的模型!
关于名称
Mixtral MoE 被称为 Mixtral-8x7B,但它并没有 56B 参数。发布后不久,我们发现有些人被误导,以为该模型的行为类似于 8 个各有 7B 参数的模型的集合,但 MoE 模型并非如此运作。只有模型的部分层(前馈块)被复制;其余参数与 7B 模型相同。总参数不是 56B,而是约 45B。一个更好的名字 可能是 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 相关的超参数的细节。
演示
你可以在 HF Mirror Chat 上与 Mixtral Instruct 模型聊天!在此查看:https://hf-mirror.com/chat/?model=mistralai/Mixtral-8x7B-Instruct-v0.1。
推理
我们提供两种主要方式使用 Mixtral 模型进行推理:
- 通过 🤗 Transformers 的
pipeline()函数。 - 使用 Text Generation Inference,它支持连续批处理、张量并行等高级功能,以实现极快的速度。
对于每种方法,都可以使用半精度(float16)或量化权重运行模型。由于 Mixtral 模型的大小大致相当于 45B 参数的密集模型,我们可以按如下方式估算所需的最小 VRAM:
| 精度 | 所需 VRAM |
|---|---|
| float16 | >90 GB |
| 8-bit | >45 GB |
| 4-bit | >23 GB |
使用 🤗 Transformers
使用 transformers 4.36 版本,你可以使用 Mixtral 并利用 HF Mirror 生态系统中的所有工具,例如:
- 训练和推理脚本及示例
- 安全文件格式(
safetensors) - 与 bitsandbytes(4 位量化)、PEFT(参数高效微调)和 Flash Attention 2 等工具的集成
- 用于运行模型生成的实用程序和辅助工具
- 用于导出模型以进行部署的机制
确保使用最新版本的 transformers:
pip install --upgrade transformers
在以下代码片段中,我们展示了如何使用 🤗 Transformers 和 4 位量化进行推理。由于模型体积庞大,你需要至少 30 GB RAM 的显卡才能运行。这包括 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] 混合专家模型是一种集成学习方法,它结合了多个模型或“专家”,以做出更准确的预测。每个专家专注于数据的不同子集,而一个门控网络决定对给定输入使用哪个合适的专家。这种方法使模型能够适应数据中复杂的非线性关系,并提升整体性能。
使用文本生成推理
文本生成推理 是由 HF Mirror 开发的生产就绪推理容器,旨在简化大型语言模型的部署。它具备连续批处理、令牌流式传输、多 GPU 上快速推理的张量并行以及生产就绪的日志和追踪等功能。
你可以在 HF Mirror 的 推理端点上部署 Mixtral,其后端使用文本生成推理。要部署 Mixtral 模型,请前往 模型页面 并点击 部署 -> 推理端点 组件。
注意:访问 A100 可能需要通过电子邮件向 [email protected] 申请配额升级
你可以在我们的博客中了解有关 使用 HF Mirror 推理端点部署 LLM 的更多信息。该 博客包含了支持的超参数信息以及如何使用 Python 和 Javascript 流式传输响应的说明。
你也可以按照以下方式,在 2 块 A100 (80GB) 上使用 Docker 在本地运行文本生成推理:
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 进行微调
训练 LLM 在技术和计算上都具有挑战性。在本节中,我们将介绍 HF Mirror 生态系统中可用的工具,以便在单块 A100 GPU 上高效训练 Mixtral。
下面是一个在 OpenAssistant 的 聊天数据集上微调 Mixtral 的示例命令。为了节省内存,我们使用 4 位量化和 QLoRA 来针对注意力块中的所有线性层。注意,与密集 transformer 不同,不应针对 MLP 层,因为它们是稀疏的,且与 PEFT 的交互效果不佳。
首先,安装 🤗 TRL 的 nightly 版本并克隆仓库以访问 训练脚本:
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)并向 from_pretrained 方法传递标志 load_in_4bit=True,以 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 VRAM 才能容纳该模型。如果使用 device_map="auto",如上面的示例所示,你可以在 24 GB 的情况下使其运行,这样一些层会被卸载到 CPU。
免责声明与正在进行的工作
- 量化:MoE 的量化是一个活跃的研究领域。我们与 TheBloke 所做的一些初步实验如上所示,但随着这种架构被更深入地了解,我们预计会有更多进展!在接下来的几天和几周内,看到这一领域的发展将令人兴奋。此外,最近的工作如 QMoE,实现了 MoE 的亚 1-bit 量化,也可以应用到这里。
- 高 VRAM 占用:MoE 推理速度非常快,但仍需要大量 VRAM(因此需要昂贵的 GPU)。这使得在本地环境中使用它变得具有挑战性。MoE 非常适合拥有多设备和大量 VRAM 的环境。Mixtral 在半精度下需要 90GB 的 VRAM 🤯
附加资源
结论
我们对 Mixtral 的发布感到非常兴奋!在接下来的几天里,准备好了解更多关于微调和部署 Mixtral 的方法。
来源:Hugging Face Blog · hf-mirror.com