Gemma 3がリリース！Kaggleノートブックで動かしてみよう

## はじめに

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を必要とします。

```python
!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がある場合は自動的に使用されます。

```python
# モデルをダウンロード
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に質問してみましょう。入力形式に注意が必要です。特定のフォーマットでプロンプトを構成する必要があります。

```python
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])
```

## マークダウンで出力を表示

出力をより読みやすくするためにマークダウンで表示してみましょう。

```python
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の新機能であるマルチモーダル機能を試してみましょう。画像を入力として与え、その内容を説明させることができます。

```python
# 画像ファイルをアップロードする場合のサンプルコード
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モデルをダウンロードして、ぜひ多言語機能やマルチモーダル機能を試してみてください！