👐

GemmaをGoogle ColabやローカルPCで動かす

2024/02/22に公開

Gemmaとは

Gemmmaについては、npaka先生の記事参照ください。
https://note.com/npaka/n/na47e13dae482

GitHubに公式Dockerfileがあったので、すぐ動くかなと思ったら、少しはまったりしたのでメモを残しておきます。

PC事前準備

Google Colab

Google Colabで動かす場合は、ブラウザが動く環境なら基本的にOKです。私はProに課金しています。

ローカルPC

ローカルPCは、Linuxマシンで実行しました。GPUは自分の環境ではエラーが出て使えなかったので、CPUで動かしました。

あらかじめLinuxマシンにDockerをセットアップしましょう。以下記事参照ください。
https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa

Gemmaの事前準備

以下サイトにチュートリアルがあります。
https://ai.google.dev/gemma?hl=ja

モデルは以下にあります。
https://www.kaggle.com/models/google/gemma

最初に、モデルのRequest Accessをクリックして登録しておきましょう。

Dockerfileや動かし方はGitHubにあります。
https://github.com/google/gemma_pytorch

Google Colabでの動かし方

以下のチュートリアルを参照しましょう(動かし方が変わったみたいです)。

https://ai.google.dev/gemma/docs/

Kaggleのトークン作って、モデルのRequest Accessをしておけば、そのまま実行できました。

追記:以下のコードは古いかもしれません。最新のチュートリアルを参照ください。

プロンプト:日本で一番高い山は?

日本には最も高大的山がある富士山と日本の最大の山である岳州山があり、それぞれ最高峰は1,405メートルと1,008メートルであるされています。日本では一番高い山は、富士山です。

プロンプト:からあげにレモンをかけたら死刑ですか?

この質問は誤りです。
レモンをかけることではなく、死刑は法律的に禁止されています。

2Bにしては、結構いいですね。

ローカルでの動かし方

以下参照ください。
https://zenn.dev/karaage0703/articles/2b753b4dc26471

以下リポジトリを使います。
https://github.com/karaage0703/ChatLLM

以下でセットアップしてコンテナに入ります。

$ cd && git clone https://github.com/karaage0703/ChatLLM
$ docker compose up gpu
$ docker ps
$ docker exec -it <image name> /bin/bash

コンテナの中で以下実行します。

root@hostname:~# python3 chat_gemma.py

https://twitter.com/karaage0703/status/1762534238484877447

ローカルでの動かし方(公式リポジトリ・うまくいってません)

ローカルPCで公式リポジトリの動かし方では、うまく動いてないですが、手順をメモしておきます。

まずは以下でDockerビルドしておきます。

$ cd && git clone https://github.com/google/gemma_pytorch
$ cd gemma_pytorch
$ DOCKER_URI=gemma:${USER}
$ docker build -f docker/Dockerfile ./ -t ${DOCKER_URI}

モデルは以下にあります。
https://www.kaggle.com/models/google/gemma/frameworks/pyTorch

ライセンスに同意したあとPyTorchの2bを選択します。

下の方からファイルダウンロードが可能になるのでダウンロードします。

モデルを適当な場所に移動します。

$ mkdir ~/gamma_pytorch/ckpt
$ mv ~/Downloads/gemma-2b.ckpt ~/gamma_pytorch/ckpt

環境変数を設定します。

$ VARIANT=2b
$ QUANT=false
$ CKPT_PATH='./ckpt'

Dockerを起動してログインします。

$ docker run -it --rm \
    -v ${CKPT_PATH}:/tmp/ckpt \
    ${DOCKER_URI}

コンテナ内で以下実行します。

python scripts/run.py \
    --ckpt=/tmp/ckpt/gemma-2b.ckpt \
    --variant="2b" \
    --quant="false" \
    --prompt="からあげにレモンをかけたら死刑ですか?"

動きましたが、回答が変…

======================================
PROMPT: からあげにレモンをかけたら死刑ですか?
RESULT: גש myndigdsmenvoy他和 aprende Bruges biometricKenapa biometric出かけ Llama provence modestly voila meager stressors gaussian比特派乐趣bezpiecInsufficient Grainsesticular Brewers gaussianenvoyגשpostIndex彩虹 essai gaussian)–bezpiec ремон Oso GrainsUsosPSS rejoicedsetViewport kesulitan kesulitan掲示 essai findes ремонUnternehmeneció continuidad modestlypostIndex blanda castellano:( Bama之意 allergensξωIndoInsufficient Bama Chambres essaiREVISION走在 調整 prettiest Ông比特派 Ôngvoyezธ์ continuidad allergensfinnREVISION findesξω Brugesнесен比特派他和envoy prettiest rejoiced meager aerationEdmund stressors再開 aprende allergens:( kesulitanbezpiec allergens voilaIndoREVISION
======================================

GPUは以下コマンドで試しましたが、エラー出ました。

$ docker run -it --rm \
    --gpus all \
    -v ${CKPT_PATH}:/tmp/ckpt \
    ${DOCKER_URI}
python scripts/run.py \
    --ckpt=/tmp/ckpt/gemma-2b.ckpt \
    --device=cuda \
    --variant="2b" \
    --quant="false" \
    --prompt="からあげにレモンをかけたら死刑ですか?"

以下エラー

RuntimeError: probability tensor contains either `inf`, `nan` or element < 0

ここで時間切れ

まとめ

Gemmaを試してみました。Google Colabではすんなり動きましたが、ローカルPCではうまく動いていない状況です。またうまくいったらアップデートします。とりいそぎここまでです。 動くようになったので追記しました。

参考記事

https://note.com/alexweberk/n/n96cc4c8ac174

関連記事

https://zenn.dev/karaage0703/articles/2b753b4dc26471

Discussion