はじめに
Google DeepMindから待望のGemma 3モデルがリリースされました!Gemmaは、Googleの最先端技術であるGeminiモデルと同じ研究から生まれた軽量なオープンモデルファミリーです。今回のGemma 3では、マルチモーダル機能が追加され、テキストと画像の両方を入力として処理し、テキスト出力を生成できるようになりました。
Gemma 3の主な特徴
- マルチモーダル: テキストと画像の両方を入力として処理
- 大きなコンテキストウィンドウ: 128Kトークンのコンテキスト(1Bサイズは32K)
- 多言語サポート: 140以上の言語をサポート
- 複数のサイズ: 1B、4B、12B、27Bの各サイズで利用可能
- Pre-trainedとInstruction-tunedの両バージョン: 用途に応じて選択可能
- 軽量: ラップトップやデスクトップなど、限られたリソースでも利用可能
今回は、最も軽量な1B Instruction-tuned (IT) モデルを使用して、Kaggleノートブックでの動かし方を紹介します。
セットアップ
まず必要なライブラリをインストールしましょう。Gemma 3は特別なバージョンのTransformersを必要とします。
!pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3
import kagglehub
import torch
from transformers import AutoTokenizer
from transformers.models.gemma3 import Gemma3ForCausalLM
モデルの初期化
Kagglehubを使ってモデルをダウンロードし、トークナイザーとモデルを初期化します。GPUがある場合は自動的に使用されます。
# モデルをダウンロード
GEMMA_PATH = kagglehub.model_download("google/gemma-3/transformers/gemma-3-1b-it")
# トークナイザーを初期化
processor = AutoTokenizer.from_pretrained(GEMMA_PATH)
# GPU利用可能かどうかを確認
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"使用デバイス: {device}")
# モデルを初期化
model = Gemma3ForCausalLM.from_pretrained(GEMMA_PATH).to(device)
print(model)
モデルにプロンプトを与える
Gemma 3に質問してみましょう。入力形式に注意が必要です。特定のフォーマットでプロンプトを構成する必要があります。
prompt = """<start_of_turn>user
Gemmaモデルについて教えてください<end_of_turn>
<start_of_turn>model"""
# 入力をトークナイズしてデバイスに送る
input_ids = processor(text=prompt, return_tensors="pt").to(device)
# テキスト生成
outputs = model.generate(**input_ids, max_new_tokens=512)
# 出力をデコード
text = processor.batch_decode(
outputs,
skip_special_tokens=False,
clean_up_tokenization_spaces=False
)
print(text[0])
マークダウンで出力を表示
出力をより読みやすくするためにマークダウンで表示してみましょう。
from IPython.display import Markdown
# 特殊トークンを除去してマークダウンとして表示
clean_text = processor.batch_decode(
outputs,
skip_special_tokens=True,
clean_up_tokenization_spaces=True
)
display(Markdown(clean_text[0]))
マルチモーダル機能を試す
Gemma 3の新機能であるマルチモーダル機能を試してみましょう。画像を入力として与え、その内容を説明させることができます。
# 画像ファイルをアップロードする場合のサンプルコード
from PIL import Image
import requests
from io import BytesIO
# サンプル画像をダウンロード
url = "https://kaggle.com/static/images/site-logo.png"
response = requests.get(url)
image = Image.open(BytesIO(response.content))
# 画像とテキストの両方を含むプロンプトを作成
prompt_with_image = processor(
text="<start_of_turn>user\nこの画像について説明してください<end_of_turn>\n<start_of_turn>model",
images=image,
return_tensors="pt"
).to(device)
# テキスト生成
outputs_with_image = model.generate(**prompt_with_image, max_new_tokens=256)
# 出力をデコード
text_with_image = processor.batch_decode(
outputs_with_image,
skip_special_tokens=True,
clean_up_tokenization_spaces=True
)
display(Markdown(text_with_image[0]))
まとめ
今回はGemma 3の最も軽量なモデル(1B IT)を使用して、Kaggleノートブックでの基本的な使い方を紹介しました。Gemma 3には他にも様々なサイズやバージョンがあり、用途に応じて選ぶことができます:
- サイズ: 1B, 4B, 12B, 27B
- タイプ: Pre-trained (PT), Instruction-tuned (IT)
Gemma 3は多言語サポートとマルチモーダル機能を備えており、さまざまなタスクに活用できます。限られたリソースでも動作する軽量さが特徴で、ラップトップやデスクトップでの利用も可能です。
Kaggle Model Gardenから目的に合ったGemma 3モデルをダウンロードして、ぜひ多言語機能やマルチモーダル機能を試してみてください!
コメント