モデル概要
モデル特徴
モデル能力
使用事例
🚀 mamba - gpt - 3bモデル
本プロジェクトでは、open - lamaモデルを微調整し、複数の評価サブタスクにおいて元のモデルを上回り、現在最も性能の高い3Bモデルとなり、その性能はllama - 7bに匹敵します。
🚀 クイックスタート
GPU搭載のマシンでtransformers
ライブラリを使用してこのモデルを呼び出すには、まずtransformers
、accelerate
、torch
ライブラリがインストールされていることを確認してください。
pip install transformers==4.29.2
pip install accelerate==0.19.0
pip install torch==2.0.0
import torch
from transformers import pipeline
generate_text = pipeline(
model="CobraMamba/mamba-gpt-3b",
torch_dtype="auto",
trust_remote_code=True,
use_fast=False,
device_map={"": "cuda:0"},
)
res = generate_text(
"Why is drinking water so healthy?",
min_new_tokens=2,
max_new_tokens=1024,
do_sample=False,
num_beams=1,
temperature=float(0.3),
repetition_penalty=float(1.2),
renormalize_logits=True
)
print(res[0]["generated_text"])
前処理ステップの後にサンプルプロンプトを印刷すると、それがトークナイザーにどのように入力されるかを確認できます。
print(generate_text.preprocess("Why is drinking water so healthy?")["prompt_text"])
<|prompt|>Why is drinking water so healthy?</s><|answer|>
または、mamba_gpt_pipeline.py
をダウンロードしてノートブックと同じ場所に配置し、ロードしたモデルとトークナイザーを使って独自にパイプラインを構築することもできます。モデルとトークナイザーがtransformers
パッケージで完全にサポートされている場合、trust_remote_code = False
を設定できます。
import torch
from mamba_gpt_pipeline import MambaGPTTextGenerationPipeline
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
"CobraMamba/mamba-gpt-3b",
use_fast=False,
padding_side="left",
trust_remote_code=False,
)
model = AutoModelForCausalLM.from_pretrained(
"CobraMamba/mamba-gpt-3b",
torch_dtype="auto",
device_map={"": "cuda:0"},
trust_remote_code=False,
)
generate_text = MambaGPTTextGenerationPipeline(model=model, tokenizer=tokenizer)
res = generate_text(
"Why is drinking water so healthy?",
min_new_tokens=2,
max_new_tokens=1024,
do_sample=False,
num_beams=1,
temperature=float(0.3),
repetition_penalty=float(1.2),
renormalize_logits=True
)
print(res[0]["generated_text"])
また、ロードしたモデルとトークナイザーを使って独自にパイプラインを構築し、前処理ステップを考慮することもできます。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "CobraMamba/mamba-gpt-3b" # ローカルフォルダまたはHugging Faceのモデル名
# 重要: プロンプトはモデルが学習した形式と同じ形式である必要があります。
# サンプルプロンプトは実験ログに記載されています。
prompt = "<|prompt|>How are you?</s><|answer|>"
tokenizer = AutoTokenizer.from_pretrained(
model_name,
use_fast=False,
trust_remote_code=False,
)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map={"": "cuda:0"},
trust_remote_code=False,
)
model.cuda().eval()
inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to("cuda")
# 生成設定は必要に応じて変更できます
tokens = model.generate(
**inputs,
min_new_tokens=2,
max_new_tokens=1024,
do_sample=False,
num_beams=1,
temperature=float(0.3),
repetition_penalty=float(1.2),
renormalize_logits=True
)[0]
tokens = tokens[inputs["input_ids"].shape[1]:]
answer = tokenizer.decode(tokens, skip_special_tokens=True)
print(answer)
✨ 主な機能
- open - lamaモデルを微調整し、複数の評価サブタスクにおいて元のモデルを上回ります。
- 現在最も性能の高い3Bモデルで、その性能はllama - 7bに匹敵します。
📦 インストール
このモデルを使用するには、以下の依存ライブラリをインストールする必要があります。
pip install transformers==4.29.2
pip install accelerate==0.19.0
pip install torch==2.0.0
📚 ドキュメント
モデル指標
指標 | 値 |
---|---|
MMLU (5 - shot) | 25.3 |
ARC (25 - shot) | 40.5 |
HellaSwag (10 - shot) | 64.9 |
TruthfulQA (0 - shot) | 37.1 |
平均値 | 42.0 |
上記のベンチマークテストを実行するために、最先端のLanguage Model Evaluation Harnessを使用しています。
モデルアーキテクチャ
LlamaForCausalLM(
(model): LlamaModel(
(embed_tokens): Embedding(32000, 4096, padding_idx=0)
(layers): ModuleList(
(0-31): 32 x LlamaDecoderLayer(
(self_attn): LlamaAttention(
(q_proj): Linear(in_features=4096, out_features=4096, bias=False)
(k_proj): Linear(in_features=4096, out_features=4096, bias=False)
(v_proj): Linear(in_features=4096, out_features=4096, bias=False)
(o_proj): Linear(in_features=4096, out_features=4096, bias=False)
(rotary_emb): LlamaRotaryEmbedding()
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=4096, out_features=11008, bias=False)
(down_proj): Linear(in_features=11008, out_features=4096, bias=False)
(up_proj): Linear(in_features=4096, out_features=11008, bias=False)
(act_fn): SiLUActivation()
)
(input_layernorm): LlamaRMSNorm()
(post_attention_layernorm): LlamaRMSNorm()
)
)
(norm): LlamaRMSNorm()
)
(lm_head): Linear(in_features=4096, out_features=32000, bias=False)
)
評価結果
lm - evaluation - harnessを使用して、広範なタスクでOpenLLaMAを評価しました。LLaMAの結果は、同じ評価指標で元のLLaMAモデルを実行することで生成されました。我々のLLaMAモデルの結果は、元のLLaMA論文と若干異なっていることに気づきました。これは、評価プロトコルの違いによるものと考えています。同様の違いはlm - evaluation - harnessのこの問題で報告されています。また、EleutherAIによってPileデータセットで学習された6BパラメータモデルであるGPT - Jの結果も示しています。
元のLLaMAモデルは1兆個のトークンで学習され、GPT - Jは5000億個のトークンで学習されました。結果を以下の表に示します。OpenLLaMAは、ほとんどのタスクで元のLLaMAやGPT - Jと同等の性能を示し、一部のタスクではより優れた性能を発揮します。
タスク/指標 | 微調整後のGPT 3B | OpenLLaMA 3B |
---|---|---|
anli_r1/acc | 0.35 | 0.33 |
anli_r2/acc | 0.33 | 0.32 |
anli_r3/acc | 0.35 | 0.35 |
arc_challenge/acc | 0.35 | 0.34 |
arc_challenge/acc_norm | 0.37 | 0.37 |
arc_easy/acc | 0.71 | 0.69 |
arc_easy/acc_norm | 0.65 | 0.65 |
boolq/acc | 0.72 | 0.66 |
hellaswag/acc | 0.49 | 0.43 |
hellaswag/acc_norm | 0.66 | 0.67 |
openbookqa/acc | 0.26 | 0.27 |
openbookqa/acc_norm | 0.40 | 0.40 |
piqa/acc | 0.76 | 0.75 |
piqa/acc_norm | 0.76 | 0.76 |
record/em | 0.88 | 0.88 |
record/f1 | 0.88 | 0.89 |
rte/acc | 0.55 | 0.58 |
truthfulqa_mc/mc1 | 0.27 | 0.22 |
truthfulqa_mc/mc2 | 0.37 | 0.35 |
wic/acc | 0.49 | 0.48 |
winogrande/acc | 0.63 | 0.62 |
平均値 | 0.53 | 0.52 |
ベンチマークからタスクCBとWSCを除外しました。これは、我々のモデルがこれらのタスクで異常に優れた性能を発揮したためです。学習データセットにベンチマークデータが混入している可能性があると推測しています。
免責事項
このリポジトリで提供される大規模言語モデルを使用する前に、この免責事項をよくお読みください。このモデルを使用することは、以下の条項と条件に同意することを意味します。
- 偏見と不快な内容:大規模言語モデルは様々なインターネットテキストデータで学習されており、これらのデータには偏見、人種差別、不快な内容、またはその他の不適切な内容が含まれている可能性があります。このモデルを使用することは、生成される内容が時に偏見を示したり、不快な内容や不適切な内容を生成したりする可能性があることを認識し、受け入れることを意味します。このリポジトリの開発者は、このような内容や見解を認め、支持、または推奨するものではありません。
- 限界:大規模言語モデルは人工知能に基づくツールであり、人間ではありません。不正確、無意味、または関係のない応答を生成する可能性があります。ユーザーは、生成された内容を批判的に評価し、使用するかどうかを独自に判断する責任があります。
- 自己責任:この大規模言語モデルを使用するユーザーは、このツールの使用によって生じるすべての結果に対して完全な責任を負う必要があります。このリポジトリの開発者や貢献者は、提供されるモデルの使用または誤用によって生じる損害、損失、または傷害に対して責任を負いません。
- 倫理的配慮:ユーザーは、大規模言語モデルを責任を持って、倫理的に使用することが推奨されます。このモデルを使用することは、それを憎しみの言葉、差別、嫌がらせ、またはいかなる形の違法または有害な活動を宣伝する目的で使用しないことに同意することを意味します。
- 問題の報告:大規模言語モデルが生成した偏見、不快な内容、またはその他の不適切な内容に遭遇した場合は、提供されたチャネルを通じてリポジトリの管理者に報告してください。あなたのフィードバックは、モデルの改善と潜在的な問題の軽減に役立ちます。
- 免責事項の変更:このリポジトリの開発者は、事前の通知なしにこの免責事項を変更または更新する権利を留保します。ユーザーは、免責事項を定期的に確認し、変更を把握する責任があります。
このリポジトリで提供される大規模言語モデルを使用することは、この免責事項に定められた条項と条件を受け入れ、遵守することに同意することを意味します。免責事項のいずれかの部分に同意しない場合は、このモデルとそれが生成する内容を使用しないでください。
📄 ライセンス
このプロジェクトはApache - 2.0ライセンスの下で提供されています。
🔗 関連リンク



