🚀 h2o-danube3-500m-chat
H2O.aiによる5億パラメータのチャット微調整モデルで、さまざまな自然言語処理タスクに対応します。
🚀 クイックスタート
h2o-danube3-500m-chatは、H2O.aiによって開発された5億パラメータのチャット微調整モデルです。このモデルには2つのバージョンがあります。
このモデルはH2O LLM Studioを使用して学習されました。また、H2O AI Personal GPTを使って、スマートフォンで完全にオフラインで実行することもできます。
✨ 主な機能
- チャット微調整モデルで、自然な会話が可能です。
- 5億パラメータを持ち、高精度な応答を生成します。
- スマートフォンで完全にオフラインで実行できます。
📦 インストール
GPUを搭載したマシンでtransformers
ライブラリを使用してモデルを使うには、まずtransformers
ライブラリをインストールする必要があります。
pip install transformers>=4.42.3
💻 使用例
基本的な使用法
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="h2oai/h2o-danube3-500m-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"])
高度な使用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "h2oai/h2o-danube3-500m-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)
🔧 技術詳細
このモデルは、Llama 2アーキテクチャを調整して、合計約5億パラメータにしています。詳細については、技術レポートを参照してください。ボキャブラリサイズ32,000のMistralトークナイザーを使用し、最大8,192のコンテキスト長でモデルを学習させています。
モデルアーキテクチャの詳細は以下の通りです。
LlamaForCausalLM(
(model): LlamaModel(
(embed_tokens): Embedding(32000, 1536, padding_idx=0)
(layers): ModuleList(
(0-15): 16 x LlamaDecoderLayer(
(self_attn): LlamaSdpaAttention(
(q_proj): Linear(in_features=1536, out_features=1536, bias=False)
(k_proj): Linear(in_features=1536, out_features=768, bias=False)
(v_proj): Linear(in_features=1536, out_features=768, bias=False)
(o_proj): Linear(in_features=1536, out_features=1536, bias=False)
(rotary_emb): LlamaRotaryEmbedding()
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=1536, out_features=4096, bias=False)
(up_proj): Linear(in_features=1536, out_features=4096, bias=False)
(down_proj): Linear(in_features=4096, out_features=1536, bias=False)
(act_fn): SiLU()
)
(input_layernorm): LlamaRMSNorm()
(post_attention_layernorm): LlamaRMSNorm()
)
)
(norm): LlamaRMSNorm()
)
(lm_head): Linear(in_features=1536, out_features=32000, bias=False)
)
📚 詳細ドキュメント
量子化とシャーディング
load_in_8bit=True
またはload_in_4bit=True
を指定することで、量子化を使用してモデルをロードすることができます。また、device_map=auto
を設定することで、複数のGPUでシャーディングすることも可能です。
ベンチマーク
Open LLM Leaderboard v1
ベンチマーク |
acc_n |
平均 |
40.71 |
ARC-challenge |
39.25 |
Hellaswag |
61.02 |
MMLU |
26.33 |
TruthfulQA |
39.96 |
Winogrande |
61.72 |
GSM8K |
16.00 |
MT-Bench
First Turn: 4.16
Second Turn: 2.40
Average: 3.28
📄 ライセンス
このリポジトリのモデルは、Apache-2.0ライセンスの下で提供されています。
⚠️ 免責事項
このリポジトリで提供されている大規模言語モデルを使用する前に、この免責事項を注意深くお読みください。モデルを使用することで、以下の利用規約に同意したことになります。
- バイアスと不快な内容: 大規模言語モデルは多様なインターネットテキストデータで学習されており、バイアスがある、人種差別的な、不快な、または不適切な内容が含まれている可能性があります。このモデルを使用することで、生成された内容に時々バイアスが見られるか、不快または不適切な内容が生成されることを承知し、受け入れるものとします。このリポジトリの開発者は、そのような内容や見解を支持または促進するものではありません。
- 制限事項: 大規模言語モデルはAIベースのツールであり、人間ではありません。誤った、無意味な、または関係のない応答を生成することがあります。生成された内容を批判的に評価し、裁量で使用するのはユーザーの責任です。
- 自己責任での使用: この大規模言語モデルのユーザーは、ツールの使用によって生じるすべての結果について完全な責任を負う必要があります。このリポジトリの開発者および貢献者は、提供されたモデルの使用または誤使用によって生じる損害、損失、または危害について責任を負いません。
- 倫理的な配慮: ユーザーは、大規模言語モデルを責任を持って倫理的に使用することが推奨されます。このモデルを使用することで、嫌がらせ、差別、嫌悪表現、または違法もしくは有害な活動を促進する目的で使用しないことに同意します。
- 問題の報告: 大規模言語モデルによって生成されたバイアスがある、不快な、または不適切な内容に遭遇した場合は、提供されたチャネルを通じてリポジトリの管理者に報告してください。あなたのフィードバックは、モデルを改善し、潜在的な問題を軽減するのに役立ちます。
- この免責事項の変更: このリポジトリの開発者は、事前通知なしにこの免責事項を変更または更新する権利を留保します。ユーザーは、免責事項を定期的に確認し、変更内容を把握する責任があります。
このリポジトリで提供されている大規模言語モデルを使用することで、この免責事項に記載されている利用規約を受け入れ、遵守することに同意したことになります。この免責事項のいずれかの部分に同意しない場合は、モデルおよびそれによって生成された内容を使用しないでください。