欢迎 Mixtral - 当前 Hugging Face 上最先进的 MoE 模型
最近,Mistral 發(fā)布了一個激動人心的大語言模型: Mixtral 8x7b,該模型把開放模型的性能帶到了一個新高度,并在許多基準(zhǔn)測試上表現(xiàn)優(yōu)于 GPT-3.5。我們很高興能夠在 Hugging Face 生態(tài)系統(tǒng)中全面集成 Mixtral 以對其提供全方位的支持 ??!
Hugging Face 對 Mixtral 的全方位支持包括:
- Hub 上的模型,包括模型卡以及相應(yīng)的許可證 (Apache 2.0)
- ?? transformers 的集成
- 推理終端的集成
- TGI?的集成,以支持快速高效的生產(chǎn)級推理
- 使用 ???TRL 在單卡上對 Mixtral 進(jìn)行微調(diào)的示例
目錄
Mixtral 8x7b 是什么?
Mixtral 的架構(gòu)與 Mistral 7B 類似,但有一點不同: 它實際上內(nèi)含了 8 個“專家”模型,這要歸功于一種稱為“混合專家”(Mixture of Experts,MoE) 的技術(shù)。當(dāng) MoE 與 transformer 模型相結(jié)合時,我們會用稀疏 MoE 層替換掉某些前饋層。MoE 層包含一個路由網(wǎng)絡(luò),用于選擇將輸入詞元分派給哪些專家處理。Mixtral 模型為每個詞元選擇兩名專家,因此,盡管其有效參數(shù)量是 12B 稠密模型的 4 倍,但其解碼速度卻能做到與 12B 的稠密模型相當(dāng)!
欲了解更多有關(guān) MoE 的知識,請參閱我們之前的博文: hf.co/blog/zh/moe。
本次發(fā)布的 Mixtral 模型的主要特點:
- 模型包括基礎(chǔ)版和指令版
- 支持高達(dá) 32k 詞元的上下文
- 性能優(yōu)于 Llama 2 70B,在大多數(shù)基準(zhǔn)測試上表現(xiàn)不遜于 GPT3.5
- 支持英語、法語、德語、西班牙語及意大利語
- 擅長編碼,HumanEval 得分為 40.2%
- 可商用,Apache 2.0 許可證
那么,Mixtral 模型效果到底有多好呢?下面列出了 Mixtral 基礎(chǔ)模型與其他先進(jìn)的開放模型在 LLM 排行榜 上表現(xiàn) (分?jǐn)?shù)越高越好):
| 模型 | 許可證 | 是否可商用 | 預(yù)訓(xùn)練詞元數(shù) | 排行榜得分 ?? |
|---|---|---|---|---|
| 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 |
我們還用 MT-Bench 及 AlpacaEval 等基準(zhǔn)對指令版和其它聊天模型進(jìn)行了對比。下表列出了 Mixtral Instruct 與*閉源或開放模型相比的表現(xiàn) (分?jǐn)?shù)越高越好):
| 模型 | 可得性 | 上下文窗口(詞元數(shù)) | 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 的性能優(yōu)于 MT-Bench 上的所有其他開放模型,且是第一個與 GPT-3.5 性能相當(dāng)?shù)拈_放模型!
關(guān)于命名
Mixtral MoE 模型雖然名字是 Mixtral-8x7B,但它其實并沒有 56B 參數(shù)。發(fā)布后不久,我們就發(fā)現(xiàn)不少人被名字誤導(dǎo)了,認(rèn)為該模型的行為類似于 8 個模型的集合,其中每個模型有 7B 個參數(shù),但這種想法其實與 MoE 模型的工作原理不符。實情是,該模型中只有某些層 (前饋層) 是各專家獨有的,其余參數(shù)與稠密 7B 模型情況相同,是各專家共享的。所以,參數(shù)總量并不是 56B,而是 45B 左右。所以可能叫它 Mixtral-45-8e 更貼切,更能符合其架構(gòu)。更多有關(guān) MoE 如何運行的詳細(xì)信息,請參閱我們之前發(fā)表的 《MoE 詳解》 一文。
提示格式
基礎(chǔ)模型 沒有提示格式,與其他基礎(chǔ)模型一樣,它可用于序列補全或零樣本/少樣本推理。你可以對基礎(chǔ)模型進(jìn)行微調(diào),將其適配至自己的應(yīng)用場景。指令模型 有一個非常簡單的對話格式。
<s> [INST] User Instruction 1 [/INST] Model answer 1</s> [INST] User instruction 2[/INST]
你必須準(zhǔn)確遵循此格式才能有效使用指令模型。稍后我們將展示,使用 transformers 的聊天模板能很輕易地支持這類自定義指令提示格式。
我們不知道的事
與之前的 Mistral 7B 版本一樣,對這一新的模型家族,我們也有幾個待澄清的問題。比如,我們不知道用于預(yù)訓(xùn)練的數(shù)據(jù)集大小,也不知道它的組成信息以及預(yù)處理方式信息。
同樣,對于 Mixtral 指令模型,我們對微調(diào)數(shù)據(jù)集或 SFT 和 DPO 使用的超參也知之甚少。
演示
你可以在 Hugging Face Chat 上與 Mixtral Instruct 模型聊天!點擊 此處 開始體驗吧。
推理
我們主要提供兩種對 Mixtral 模型進(jìn)行推理的方法:
- 通過 ?? transformers 的
pipeline()接口。 - 通過 TGI,其支持連續(xù)組批、張量并行等高級功能,推理速度極快。
以上兩種方法均支持半精度 (float16) 及量化權(quán)重。由于 Mixtral 模型的參數(shù)量大致相當(dāng)于 45B 參數(shù)的稠密模型,因此我們可以對所需的最低顯存量作一個估計,如下:
| 精度 | 顯存需求 |
|---|---|
| float16 | >90 GB |
| 8-bit | >45 GB |
| 4-bit | >23 GB |
使用 ???transformers
從 transformers 4.36 版 開始,用戶就可以用 Hugging Face 生態(tài)系統(tǒng)中的所有工具處理 Mixtral 模型,如:
- 訓(xùn)練和推理腳本及示例
- 安全文件格式 (
safetensors) - 與 bitsandbytes (4 比特量化) 、PEFT (參數(shù)高效微調(diào)) 和 Flash Attention 2 等工具的集成
- 使用文本生成任務(wù)所提供的工具及輔助方法
- 導(dǎo)出模型以進(jìn)行部署
用戶唯一需要做的是確保 transformers 的版本是最新的:
pip install -U "transformers==4.36.0" --upgrade
下面的代碼片段展示了如何使用 ?? transformers 及 4 比特量化來運行推理。由于模型尺寸較大,你需要一張顯存至少為 30GB 的卡才能運行,符合要求的卡有 A100 (80 或 40GB 版本) 、A6000 (48GB) 等。
from transformers import AutoTokenizer
import transformers
import torch
model = "mistralai/Mixtral-8x7B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.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."}]
prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipeline(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)
print(outputs[0]["generated_text"])
<s>[INST] Explain what a Mixture of Experts is in less than 100 words. [/INST] A
Mixture of Experts is an ensemble learning method that combines multiple models,
or "experts," to make more accurate predictions. Each expert specializes in a
different subset of the data, and a gating network determines the appropriate
expert to use for a given input. This approach allows the model to adapt to
complex, non-linear relationships in the data and improve overall performance.
使用 TGI
TGI ?是 Hugging Face 開發(fā)的生產(chǎn)級推理容器,可用于輕松部署大語言模型。其功能主要有: 連續(xù)組批、流式詞元輸出、多 GPU 張量并行以及生產(chǎn)級的日志記錄和跟蹤等。
你可在 Hugging Face 的 推理終端 上部署 Mixtral,其使用 TGI 作為后端。要部署 Mixtral 模型,可至 模型頁面,然后單擊 Deploy -> Inference Endpoints 按鈕即可。
注意: 如你的賬號 A100 配額不足,可發(fā)送郵件至 api-enterprise@huggingface.co 申請升級。
你還可以閱讀我們的博文 用 Hugging Face 推理終端部署 LLM 以深入了解如何部署 LLM,該文包含了推理終端支持的超參以及如何使用 Python 和 Javascript 接口來流式生成文本等信息。
你還可以使用 Docker 在 2 張 A100 (80GB) 上本地運行 TGI,如下所示:
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 微調(diào)
訓(xùn)練 LLM 在技術(shù)和算力上都有較大挑戰(zhàn)。本節(jié)我們將了解在 Hugging Face 生態(tài)系統(tǒng)中如何在單張 A100 GPU 上高效訓(xùn)練 Mixtral。
下面是在 OpenAssistant 的 聊天數(shù)據(jù)集 上微調(diào) Mixtral 的示例命令。為了節(jié)省內(nèi)存,我們對注意力塊中的所有線性層執(zhí)行 4 比特量化和 QLoRA。請注意,與稠密 transformer 模型不同,我們不對專家網(wǎng)絡(luò)中的 MLP 層進(jìn)行量化,因為它們很稀疏并且量化后 PEFT 效果不好。
首先,安裝 ?? TRL 的每日構(gòu)建版并下載代碼庫以獲取 訓(xùn)練腳本:
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 \
examples/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 上訓(xùn)練大約需要 48 小時,但我們可以通過 --num_processes 來調(diào)整 GPU 的數(shù)量以實現(xiàn)并行。
量化 Mixtral
如上所見,該模型最大的挑戰(zhàn)是如何實現(xiàn)普惠,即如何讓它能夠在消費級硬件上運行。因為即使以半精度 ( torch.float16 ) 加載,它也需要 90GB 顯存。
借助 ?? transformers 庫,我們支持用戶開箱即用地使用 QLoRA 和 GPTQ 等最先進(jìn)的量化方法進(jìn)行推理。你可以閱讀 相應(yīng)的文檔 以獲取有關(guān)我們支持的量化方法的更多信息。
使用 4 比特量化加載 Mixtral
用戶還可以通過安裝 bitsandbytes 庫 ( pip install -U bitsandbytes ) 并將參數(shù) load_in_4bit=True 傳給 from_pretrained 方法來加載 4 比特量化的 Mixtral。為了獲得更好的性能,我們建議用戶使用 bnb_4bit_compute_dtype=torch.float16 來加載模型。請注意,你的 GPU 顯存至少得有 30GB 才能正確運行下面的代碼片段。
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 比特量化技術(shù)由 QLoRA 論文 提出,你可以通過 相應(yīng)的 Hugging Face 文檔 或 這篇博文 獲取更多相關(guān)信息。
使用 GPTQ 加載 Mixtral
GPTQ 算法是一種訓(xùn)后量化技術(shù),其中權(quán)重矩陣的每一行都是獨立量化的,以獲取誤差最小的量化權(quán)重。這些權(quán)重被量化為 int4,但在推理過程中會即時恢復(fù)為 fp16。與 4 比特 QLoRA 相比,GPTQ 的量化模型是通過對某個數(shù)據(jù)集進(jìn)行校準(zhǔn)而得的。TheBloke 在 ?? Hub 上分享了很多量化后的 GPTQ 模型,這樣大家無需親自執(zhí)行校準(zhǔn)就可直接使用量化模型。
對于 Mixtral,為了獲得更好的性能,我們必須調(diào)整一下校準(zhǔn)方法,以確保我們 不會 量化那些專家門控層。量化模型的最終困惑度 (越低越好) 為 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))
請注意,你的 GPU 顯存至少得有 30GB 才能運行 Mixtral 模型的 QLoRA 和 GPTQ 版本。如果你如上例一樣使用了 device_map="auto" ,則其在 24GB 顯存時也可以運行,因此會有一些層被自動卸載到 CPU。
免責(zé)聲明及正在做的工作
- 量化: 圍繞 MoE 的量化還有許多研究正如火如荼地展開。上文展示了我們基于 TheBloke 所做的一些初步實驗,但我們預(yù)計隨著對該架構(gòu)研究的深入,會涌現(xiàn)出更多進(jìn)展!這一領(lǐng)域的進(jìn)展將會是日新月異的,我們翹首以盼。此外,最近的工作,如 QMoE,實現(xiàn)了 MoE 的亞 1 比特量化,也是值得嘗試的方案。
- 高顯存占用: MoE 運行推理速度較快,但對顯存的要求也相對較高 (因此需要昂貴的 GPU)。這對本地推理提出了挑戰(zhàn),因為本地推理所擁有的設(shè)備顯存一般較小。MoE 非常適合多設(shè)備大顯存的基礎(chǔ)設(shè)施。對 Mixtral 進(jìn)行半精度推理需要 90GB 顯存 ??。
更多資源
- MoE 詳解
- Mistral 的 Mixtral 博文
- Hub 上的模型
- 開放 LLM 排行榜
- 基于 Mixtral 的 Hugging Chat 聊天演示應(yīng)用
總結(jié)
我們對 Mixtral 的發(fā)布感到歡欣鼓舞!我們正圍繞 Mixtral 準(zhǔn)備更多關(guān)于微調(diào)和部署文章,盡請期待。
英文原文: https://hf.co/blog/mixtral
原文作者: Lewis Tunstall,Philipp Schmid,Omar Sanseviero,Pedro Cuenca,Olivier Dehaene,Leandro von Werra,Younes Belkada
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向為 transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
總結(jié)
以上是生活随笔為你收集整理的欢迎 Mixtral - 当前 Hugging Face 上最先进的 MoE 模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度解析 PyTorch Autogra
- 下一篇: 探索 Linux Namespace:D