GPU不要!DockerでGemma 2 JPNを動かす
はじめに
昨日、Googleから新しい日本語対応のテキスト生成モデル「Gemma 2 JPN」がリリースされました。このモデルは、Gemma 2 2Bを日本語テキストに合わせてファインチューニングしたもので、特に日本語での自然なテキスト生成が強化されています。小さなモデルなので、GPUがない環境でもGemma 2 JPNを簡単に試せるのではないかと思い、Dockerを使ってチャットボットを構築してみました。
本記事では、このチャットボットのセットアップ手順と、実際に試した様子を紹介します。
こちらからクローンして動かせます。
Gemma 2 JPNとは
Gemma 2 JPNは、「Gemma 2」をベースに日本語テキストに合わせてファインチューニングされたバージョンです。小型モデルであるため、CPUでも比較的スムーズに動作します。
必要スペック
以下の通り、メモリは10GB程度必要です。
Dockerを使ったセットアップ
Gemma 2 JPNは大規模なモデルであり、通常はGPUがあればより高速に動作しますが、今回はあえてCPUのみの環境で動かしてみます。これにより、手元のPCやクラウド環境など、GPUがない場所でも手軽に試せるようになっています。
以下では、Dockerを使った環境構築手順を紹介します。
必要なファイル
プロジェクトでは以下のファイルを使います:
-
Dockerfile
:Dockerコンテナの設定 -
app.py
:Flaskを使ったバックエンドロジック -
compose.yml
:Docker Compose設定 -
requirements.txt
:必要なPythonパッケージ
Dockerfileの解説
Dockerfileでは、Python 3.12をベースにしてGemma 2 JPNを動かすための環境を構築しています。以下がその内容です。
FROM python:3.12
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
このDockerfileを使用することで、Gemma 2 JPNを利用するためのPython環境を簡単にセットアップできます。
Docker Composeでの起動
Docker Composeを使ってプロジェクトをビルドし、起動するには、以下のコマンドを実行します。
docker-compose up --build
これでチャットボットが起動し、http://localhost:8080
でアクセスできるようになります。
シンプルなチャットインターフェース
Gemma 2 JPNの動作確認を簡単に行えるように、シンプルなウェブインターフェースも用意しました。これは、入力されたテキストに対してモデルが応答を生成するという、非常にシンプルなインターフェースです。
このインターフェースはあくまでモデルを試すための副産物的なものであり、機能としてはメッセージを送信し、Gemma 2 JPNの応答を受け取るというものです。セッションは保持されず、毎回メッセージがリセットされる仕様となっています。
実際に試してみた結果
Dockerで環境を構築し、チャットインターフェースを使って日本語での対話を試しました。以下はその一部です:
-
質問:「今日の天気はどう?」
-
応答:「申し訳ありませんが、私はリアルタイムの情報にアクセスできません。現在の天気予報については、信頼できる天気予報サイトやアプリをご確認ください。 😊」
-
質問:「鶴と亀が合わせて10匹います。足が合計36本あります。鶴は何匹いるでしょうか?」
-
応答:「答えは 5匹 です。」
-
質問:「東京駅から乗ることができる路線は?」
-
応答:
東京駅から乗ることができる路線はたくさんあります!
主要な路線:
JR東日本:
東海道線: 東京駅 - 名古屋駅
東海道新幹線: 東京駅 - 大阪駅
山手線: 東京駅 - 横浜駅
京浜東北線: 東京駅 - 千葉駅
京浜東北線: 東京駅 - 仙台駅
上野東京ライン: 東京駅 - 上野駅
都営地下鉄:
都営大江戸線: 東京駅 - 新宿駅
都営浅草線: 東京駅 - 浅草駅
都営三田線: 東京駅 - 三田駅
私鉄:
京王線: 東京駅 - 新宿駅
小田急線: 東京駅 - 小田原駅
東急線: 東京駅 - 横浜駅
どの路線を選ぶかは、目的地や時間帯によって異なります。
- 質問:「東京駅から山手線に乗る、を英語にすると?」
- 応答:「"東京駅から山手線に乗る" は英語で Take the Yamanote Line from Tokyo Station と表現できます。」
このように、正当性は怪しいですが、日本語の入力に対して自然な応答をマークダウン形式で返してくれます。ローカル環境で自然な日本語で対話できる言語モデルが動いたことに感動しました。
Discussion