見出し画像

Google Colab で DiscoLM Mixtral 8x7b alpha を試す

「Google Colab」で「DiscoLM Mixtral 8x7b alpha」を試したので、まとめました。

【注意】 Google Colab Pro/Pro+ の A100で動作確認しています。


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の効率と精度を高めるために使用される手法です。このアプローチは、複雑なタスクをより小さく管理しやすいサブタスクに分割し、それぞれを特化したミニモデルまたは専門家が処理することで機能します。

簡単な内訳は次のとおりです。

(1) Expert Layer
特定の分野で高度なスキルを身につけるように学習された小規模なニューラルネットワークです。各専門家は同じ入力を、その独自の専門分野に合わせた方法で処理します。

(2) Gating Network
これは、MoEアーキテクチャの意思決定者です。どの専門家が特定の入力データに最も適しているかを評価します。ネットワークは入力と各専門家の間の互換性スコアを計算し、これらのスコアを使用してタスクへの各専門家の関与を決定します。

これらのコンポーネントを組み合わせることで、適切な専門家が適切なタスクを処理できるようになります。「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

【翻訳】
私の意見では、「まどか☆マギカ」の美樹さやかは、シリーズの中で最もかわいいキャラクターの一人です。 それにしても美しさと可愛さ

関連



この記事が気に入ったらサポートをしてみませんか?