🚀 h2o-danube3-4b-chat モデル紹介
h2o-danube3-4b-chat は、H2O.ai が微調整したチャットモデルで、40 億のパラメータを持っています。このモデルは、テキスト生成タスクを効果的に処理でき、多くの種類のベンチマークテストで良好な結果を示し、スマートフォンでオフラインでも実行可能です。
🚀 クイックスタート
transformers
ライブラリを使用して、GPU 搭載のマシンでこのモデルを使用することができます。まず、transformers
ライブラリがインストールされていることを確認してください。
pip install transformers>=4.42.3
以下は使用例のコードです。
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="h2oai/h2o-danube3-4b-chat",
torch_dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{"role": "user", "content": "Why is drinking water so healthy?"},
]
prompt = pipe.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
res = pipe(
prompt,
return_full_text=False,
max_new_tokens=256,
)
print(res[0]["generated_text"])
このコードは、正しいプロンプト形式を自動的に適用して実行します。
<|prompt|>Why is drinking water so healthy?</s><|answer|>
以下の方法でも実行できます。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "h2oai/h2o-danube3-4b-chat"
tokenizer = AutoTokenizer.from_pretrained(
model_name,
)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{"role": "user", "content": "Why is drinking water so healthy?"},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(
prompt, return_tensors="pt", add_special_tokens=False
).to("cuda")
tokens = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
min_new_tokens=2,
max_new_tokens=256,
)[0]
tokens = tokens[inputs["input_ids"].shape[1]:]
answer = tokenizer.decode(tokens, skip_special_tokens=True)
print(answer)
✨ 主な機能
- 2 種類のバージョン提供:H2O.ai は、このモデルのベースモデルとチャットモデルの 2 種類のバージョンを提供しており、さまざまなシーンのニーズに対応しています。
- 低リソース環境での実行:スマートフォンでオフラインでも動作するため、いつでもどこでも利用できます。
- 長いコンテキストのサポート:Mistral トークナイザーを使用し、語彙数は 32000 で、モデルの訓練時のコンテキスト長は最大 8192 までサポートしています。
📦 インストール
使用する前に、transformers
ライブラリをインストールする必要があります。インストールコマンドは以下の通りです。
pip install transformers>=4.42.3
🔧 技術詳細
モデルアーキテクチャの調整
Llama 2 アーキテクチャを調整し、総パラメータ数は約 40 億です。詳細については、技術レポートを参照してください。
アーキテクチャの詳細
LlamaForCausalLM(
(model): LlamaModel(
(embed_tokens): Embedding(32000, 3840, padding_idx=0)
(layers): ModuleList(
(0-23): 24 x LlamaDecoderLayer(
(self_attn): LlamaSdpaAttention(
(q_proj): Linear(in_features=3840, out_features=3840, bias=False)
(k_proj): Linear(in_features=3840, out_features=960, bias=False)
(v_proj): Linear(in_features=3840, out_features=960, bias=False)
(o_proj): Linear(in_features=3840, out_features=3840, bias=False)
(rotary_emb): LlamaRotaryEmbedding()
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=3840, out_features=10240, bias=False)
(up_proj): Linear(in_features=3840, out_features=10240, bias=False)
(down_proj): Linear(in_features=10240, out_features=3840, bias=False)
(act_fn): SiLU()
)
(input_layernorm): LlamaRMSNorm()
(post_attention_layernorm): LlamaRMSNorm()
)
)
(norm): LlamaRMSNorm()
)
(lm_head): Linear(in_features=3840, out_features=32000, bias=False)
)
量子化とシャーディング
load_in_8bit=True
または load_in_4bit=True
を指定することで、量子化したモデルをロードできます。また、device_map=auto
を設定することで、複数の GPU でシャーディングすることができます。
📚 ドキュメント
モデルバージョン
ベンチマークテスト結果
Open LLM Leaderboard v1
ベンチマークテスト |
正解率 |
平均 |
61.42 |
ARC-challenge |
58.96 |
Hellaswag |
80.36 |
MMLU |
54.74 |
TruthfulQA |
47.79 |
Winogrande |
76.48 |
GSM8K |
50.18 |
MT-Bench
First Turn: 7.28
Second Turn: 5.69
Average: 6.49
📄 ライセンス
このプロジェクトは、Apache-2.0 ライセンスの下で提供されています。
⚠️ 免責事項
このリポジトリで提供されている大規模言語モデルを使用する前に、この免責事項をよくお読みください。このモデルを使用することは、以下の条項と条件に同意することを意味します。
- 偏見と不快な内容:大規模言語モデルは、インターネット上のさまざまなテキストデータで訓練されており、これらのデータには偏見、人種差別、不快な内容、またはその他の不適切な内容が含まれている可能性があります。このモデルを使用することで、生成される内容が時には偏見を示したり、不快な内容や不適切な内容を含んだりすることを承認し、受け入れることになります。このリポジトリの開発者は、このような内容や見解を認め、支持、または推奨するものではありません。
- 限界:大規模言語モデルは人工知能に基づくツールであり、人間ではありません。不正確、無意味、または関係のない応答を生成することがあります。ユーザーは、生成された内容を批判的に評価し、それを使用するかどうかを独自に判断する責任があります。
- 自己責任:この大規模言語モデルを使用するユーザーは、このツールの使用によって生じる可能性のあるすべての結果に対して完全な責任を負う必要があります。このリポジトリの開発者や貢献者は、提供されたモデルの使用または誤用によって生じる損害、損失、または傷害に対して責任を負いません。
- 倫理的な配慮:ユーザーには、大規模言語モデルを責任を持って、かつ倫理的に使用することが推奨されます。このモデルを使用することは、それを憎しみの言葉、差別、嫌がらせ、またはいかなる形の違法または有害な活動を促進する目的で使用しないことに同意することを意味します。
- 問題の報告:大規模言語モデルが生成した偏見、不快な内容、またはその他の不適切な内容に遭遇した場合は、提供されたチャネルを通じてリポジトリの管理者に報告してください。あなたのフィードバックは、モデルの改善と潜在的な問題の軽減に役立ちます。
- 免責事項の変更:このリポジトリの開発者は、事前の通知なしにこの免責事項を変更または更新する権利を留保します。ユーザーは、免責事項を定期的に確認し、変更を把握する責任があります。
このリポジトリで提供されている大規模言語モデルを使用することは、この免責事項に規定されている条項と条件を受け入れ、遵守することに同意することを意味します。免責事項のいずれかの部分に同意できない場合は、このモデルとそれが生成する内容の使用を避けてください。