🚀 Gemmaモデルカード
GemmaはGoogleが開発した軽量で最先端のオープンモデルです。このモデルカードはGemmaモデルの2Bベースバージョンに対応しています。また、7Bベースモデル、7Bインストラクトモデル、および2Bインストラクトモデルのモデルカードも参照できます。
🚀 クイックスタート
このモデルをすぐに使い始めるには、まずpip install -U transformers
を実行してください。その後、あなたのユースケースに関連するセクションからコードスニペットをコピーしてください。
✨ 主な機能
- 多様なテキスト生成タスク対応:質問応答、要約、推論などの様々なテキスト生成タスクに適しています。
- リソース制限環境でのデプロイ可能:比較的小さなサイズなので、ラップトップ、デスクトップ、または独自のクラウドインフラストラクチャなどのリソースが限られた環境でもデプロイできます。
📦 インストール
まず、transformers
ライブラリをインストールする必要があります。以下のコマンドを実行してください。
pip install -U transformers
💻 使用例
基本的な使用法
モデルの微調整
google/gemma-7b
リポジトリのexamples/
ディレクトリには、微調整用のスクリプトとノートブックがあります。このモデルに適用するには、モデルIDをgoogle/gemma-2b
に変更するだけです。
そのリポジトリでは、以下のものを提供しています。
- UltraChatデータセットでQLoRAを使用して教師付き微調整(SFT)を実行するスクリプト
- TPUデバイスでFSDPを使用してSFTを実行するスクリプト
- 英語の引用文データセットでSFTを実行するために、無料のGoogle Colabインスタンスで実行できるノートブック
CPUでのモデル実行
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b")
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
単一/複数GPUでのモデル実行
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
異なる精度でGPUを使用したモデル実行
torch.float16
を使用
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto", torch_dtype=torch.float16)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
torch.bfloat16
を使用
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto", torch_dtype=torch.bfloat16)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
bitsandbytes
を使用した量子化バージョン
8ビット精度(int8)を使用
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", quantization_config=quantization_config)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
4ビット精度を使用
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", quantization_config=quantization_config)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
その他の最適化
Flash Attention 2
まず、環境にflash-attn
をインストールする必要があります。pip install flash-attn
を実行してください。
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
+ attn_implementation="flash_attention_2"
).to(0)
📚 ドキュメント
入力と出力
- 入力:質問、プロンプト、または要約するドキュメントなどのテキスト文字列。
- 出力:入力に応じて生成された英語のテキスト。質問への回答やドキュメントの要約など。
モデルデータ
学習データセット
これらのモデルは、6兆トークンに及ぶ多様なソースのテキストデータセットで学習されました。主な構成要素は以下の通りです。
- ウェブドキュメント:多様なウェブテキストのコレクションにより、モデルは幅広い言語スタイル、トピック、語彙に触れることができます。主に英語のコンテンツです。
- コード:モデルにコードを学習させることで、プログラミング言語の構文やパターンを学習し、コード生成やコード関連の質問の理解能力が向上します。
- 数学:数学的なテキストで学習することで、モデルは論理的な推論、記号表現を学習し、数学的なクエリに対応できるようになります。
データ前処理
学習データに適用された主なデータクリーニングとフィルタリング方法は以下の通りです。
- CSAMフィルタリング:データ準備プロセスの複数の段階で、厳格なCSAM(児童性虐待素材)フィルタリングが適用され、有害で違法なコンテンツの排除が保証されます。
- 機密データフィルタリング:Gemmaの事前学習モデルを安全かつ信頼性の高いものにするために、自動化された手法を使用して、学習セットから特定の個人情報やその他の機密データをフィルタリングしました。
- その他の方法:当社のポリシーに沿ったコンテンツ品質と安全性に基づくフィルタリング。
🔧 技術詳細
ハードウェア
Gemmaは、最新世代のTensor Processing Unit (TPU)ハードウェア(TPUv5e)を使用して学習されました。
大規模言語モデルの学習には、大量の計算能力が必要です。TPUは、機械学習で一般的な行列演算用に特別に設計されており、この分野でいくつかの利点を提供します。
- パフォーマンス:TPUは、LLMの学習に関与する大規模な計算を処理するように特別に設計されています。CPUと比較して、学習を大幅に高速化することができます。
- メモリ:TPUには多くの場合、大容量の高帯域幅メモリが搭載されており、学習中に大きなモデルとバッチサイズを処理できます。これにより、モデルの品質を向上させることができます。
- スケーラビリティ:TPU Pod(TPUの大規模クラスター)は、大規模な基礎モデルの増大する複雑さを処理するためのスケーラブルなソリューションを提供します。複数のTPUデバイスに学習を分散させることで、より高速かつ効率的な処理が可能です。
- コスト効率:多くのシナリオで、TPUはCPUベースのインフラストラクチャと比較して、大規模なモデルの学習によりコスト効率の高いソリューションを提供できます。特に、高速な学習による時間とリソースの節約を考慮すると。
ソフトウェア
学習は、JAXとML Pathwaysを使用して行われました。
JAXにより、研究者はTPUを含む最新世代のハードウェアを活用して、大規模なモデルをより高速かつ効率的に学習できます。
ML Pathwaysは、Googleが複数のタスクにまたがって汎化できる人工知能システムを構築するための最新の取り組みです。これは、基礎モデル、特にこのような大規模言語モデルに特に適しています。
JAXとML Pathwaysは、Geminiモデルファミリに関する論文で説明されているように使用されています。「JaxとPathwaysの「シングルコントローラ」プログラミングモデルにより、単一のPythonプロセスが学習実行全体をオーケストレートでき、開発ワークフローが大幅に簡素化されます。」
📄 ライセンス
使用条件については、こちらを参照してください。