🚀 Hugging Face TransformersによるMixtral-8x7B-Instructの変換
Mixtral-8x7Bは事前学習された生成型の疎なエキスパート混合モデルで、多くのベンチマークでLlama 2 70Bを上回る性能を発揮します。
🚀 クイックスタート
Mixtral-8x7Bモデルの詳細については、リリースブログ記事をご覧ください。
✨ 主な機能
このモデルは、事前学習された生成型の疎なエキスパート混合モデルで、多くのベンチマークでLlama 2 70Bを上回る性能を発揮します。
📦 インストール
このリポジトリには、vLLMによるモデルのサービングや、Hugging Faceのtransformersライブラリと互換性のある重みが含まれています。元のMixtral torrentリリースに基づいていますが、ファイル形式とパラメータ名は異なります。なお、現時点ではモデルをHFでインスタンス化することはできません。
💻 使用例
基本的な使用法
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)
text = "Hello my name is"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
高度な使用法
半精度での実行
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).to(0)
text = "Hello my name is"
+ inputs = tokenizer(text, return_tensors="pt").to(0)
outputs = model.generate(**inputs, 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)
text = "Hello my name is"
+ inputs = tokenizer(text, return_tensors="pt").to(0)
outputs = model.generate(**inputs, 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)
text = "Hello my name is"
+ inputs = tokenizer(text, return_tensors="pt").to(0)
outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
📚 ドキュメント
命令フォーマット
このフォーマットは厳密に守る必要があります。そうしないと、モデルは最適でない出力を生成します。
Instructモデルのプロンプトを構築するために使用されるテンプレートは、以下のように定義されています。
<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(USER_MESSAGE_1) + tokenize("[/INST]") +
tokenize(BOT_MESSAGE_1) + [EOS_ID] +
…
tokenize("[INST]") + tokenize(USER_MESSAGE_N) + tokenize("[/INST]") +
tokenize(BOT_MESSAGE_N) + [EOS_ID]
上記の疑似コードでは、tokenize
メソッドは自動的にBOSまたはEOSトークンを追加しないで、接頭辞の空白を追加する必要があります。
制限事項
Mixtral-8x7B Instructモデルは、ベースモデルを簡単に微調整して魅力的な性能を達成できることをすばやく実証するものです。
このモデルにはモデレーションメカニズムがありません。モデルがガードレールをきめ細かく尊重し、モデレートされた出力が必要な環境でのデプロイを可能にする方法について、コミュニティと協力したいと考えています。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。
ミストラルAIチーム
Albert Jiang、Alexandre Sablayrolles、Arthur Mensch、Blanche Savary、Chris Bamford、Devendra Singh Chaplot、Diego de las Casas、Emma Bou Hanna、Florian Bressand、Gianna Lengyel、Guillaume Bour、Guillaume Lample、Lélio Renard Lavaud、Louis Ternon、Lucile Saulnier、Marie - Anne Lachaux、Pierre Stock、Teven Le Scao、Théophile Gervet、Thibaut Lavril、Thomas Wang、Timothée Lacroix、William El Sayed。