Google Colab で DiscoLM Mixtral 8x7b alpha を試す
「Google Colab」で「DiscoLM Mixtral 8x7b alpha」を試したので、まとめました。
1. Mixtral 8x7b
「Mixtral 8x7b」は、「Mistral AI」がリリースした史上初のオープンソース MoEモデルです。87 GB torrentでリリースされましたが、プレスリリースはありません。
メタデータから、各トークンの推論には、2人の専門家のみが使用されていることがわかります。
{
"dim": 4096,
"n_layers": 32,
"head_dim": 128,
"hidden_dim": 14336,
"n_heads": 32,
"n_kv_heads": 8,
"norm_eps": 1e-05,
"vocab_size": 32000,
"moe": {
"num_experts_per_tok": 2,
"num_experts": 8
}
}
2. DiscoLM Mixtral 8x7b alpha
「DiscoLM Mixtral 8x7b alpha」は、「Mixtral 8x7b」をファインチューニングして作成した実験的なチャットモデルです。元のモデルをHuggingFace形式に変換し、「Synthia」「MethaMathQA」「Capybara」でファインチューニングしています。
3. MoE
「MoE」 (Mixture of Experts) とは、LLMの効率と精度を高めるために使用される手法です。このアプローチは、複雑なタスクをより小さく管理しやすいサブタスクに分割し、それぞれを特化したミニモデルまたは専門家が処理することで機能します。
簡単な内訳は次のとおりです。
これらのコンポーネントを組み合わせることで、適切な専門家が適切なタスクを処理できるようになります。「Gating Network」は各入力を最も適切な専門家に効果的にルーティングし、専門家は特定の得意分野に集中します。
この共同学習により、より多用途で有能な全体的なモデルが作成されます。
4. Colabでの実行
Colabでの実行手順は、次のとおりです。
(1) パッケージのインストール。
# パッケージのインストール
!pip install git+https://github.com/huggingface/transformers
!pip install accelerate bitsandbytes flash_attn
(2) トークンナイザーとモデルの準備。
70分ほどかかりました。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
"DiscoResearch/DiscoLM-mixtral-8x7b-v2"
)
model = AutoModelForCausalLM.from_pretrained(
"DiscoResearch/DiscoLM-mixtral-8x7b-v2",
torch_dtype=torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16,
low_cpu_mem_usage=True,
device_map="auto",
trust_remote_code=True
)
(3) 推論の実行。
max_new_tokens=32 で7分ほどかかりました。
(MoE詳しくないので設定不足かも)
# プロンプトの準備
chat = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who is the cutest in Madoka Magica?"},
]
# 推論の実行
with torch.no_grad():
token_ids = tokenizer.apply_chat_template(chat, add_generation_prompt=True, return_tensors="pt")
output_ids = model.generate(
token_ids.to(model.device),
pad_token_id=tokenizer.eos_token_id,
max_new_tokens=32,
temperature=0.5,
repetition_penalty=1.15,
top_p=0.95,
do_sample=True,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
In my opinion, Sayaka Miki from "Madoka Magica" is one of the cutest characters in the series. However, beauty and cuteness
関連
この記事が気に入ったらサポートをしてみませんか?