Gemma3を取り急ぎ動かしてみた

お疲れ様です。

Gemma3が公開されましたね。
Twitterで話題になっていて、使ってみたい欲が高くなったのでとりあえず試してみました。

使用したモデルは以下です。RTX4060ti(VRAM16GB)を使用してローカルで動かしました。
huggingface.co

事前準備

Gemma3を使うためにはいろいろと準備が必要だったのでこちらもメモ的にまとめておきます。

  • Hugging Faceのアカウント作成
    こちらのサイト参考にアカウント作成までやりました。
    Hugging Faceの使い方!アクセストークン作成からログインまで | EdgeHUB

  • Gemmaの利用登録
    Hugging Faceにログインしたのち、Gemmaの使用ライセンスに同意します。

  • アクセストークンを作成
    上で示したサイトを参考にアクセストークンを作成。作成時にはGemmaのモデルを選択します。
    アクセストークンはこの後モデルをダウンロードする際に使用します。

  • transformersライブラリをインストール
    Hugging Faceのページにあるインストールコマンドを使ってインストールします。普通にpip install したものでは使えないようなので注意。

    $ pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3

実行

ソースコードは以下になります。Hugging Faceのページにあるチュートリアルのコードをベースに日本語で答えさせるようにカスタマイズしています。
例によってGitHubにも同じソースを置いていますので必要に応じて参照ください。
github.com

import os
model_dir = "./pretrained"
if not os.path.isdir(model_dir):
    os.makedirs(model_dir, exist_ok=True)
os.environ["HF_HOME"] = model_dir

from transformers import AutoProcessor, Gemma3ForConditionalGeneration
import torch
from huggingface_hub import login
login()

model_id = "google/gemma-3-4b-it"

model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id, device_map="auto"
).eval()

processor = AutoProcessor.from_pretrained(model_id)

messages = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "あなたは日本語で回答するアシスタントです。"}]
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"},
            {"type": "text", "text": "画像の内容を教えてください。"}
        ]
    }
]

inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True, tokenize=True,
    return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)

input_len = inputs["input_ids"].shape[-1]

with torch.inference_mode():
    generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
    generation = generation[0][input_len:]

decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)

初回実行時にアクセストークンの入力を求められるので、先ほど作成したものを入力しましょう。
一度モデルをダウンロードしてしまえば再度の入力は不要なのでlogin()コメントアウトすると良いと思います。

実行した結果が以下。

この画像には、ピンク色のコスモスが咲き、その花にミツバチが止まっている様子が写っています。背景には緑の葉っぱや、他の花(赤色のもの)も見えます。全体的に、夏の庭の風景を捉えた写真ですね。

入力した画像が↓なのでしっかりと説明できていますね。