gemma-2-2b-jpn-it を試す
tl;dr
Gemma 2 2B の日本語版が発表されたよ
Google Colab と macOS で試したよ
macOS では transformers と MLX で試したよ
2B にしてはかなり日本語が流暢で、ローカル LLM の進展をすごく感じるよ
Gemma 2 2B JPN とは
Gemma-2-JPN は日本語に特化した Gemma 2 の事後学習モデル。英語と同様の性能。使用例として挙げられているものは、詩の作成や翻訳、コード生成など。モデルの訓練には TPU を用いており、JAX、ML Pathways を使用したよう。モデルの性能評価は GPT-3.5 と LLM as a Judge で比較。一般的なベンチマークというより、日本語で聞いたら日本語で答えるという RLHF をしているらしい(Gemma Developer イベントで話していた記憶より)。
試したくてうずうずしてきたでしょう?Google Colab と macOS にて動作確認しましたので、よろしければ試してみてください。
Google Colab で試す
基本的にサンプルコードをそのまま実行すると動きます。Hugging Face Token の設定だけお忘れ無く。Gist に公開しているので、追実験されたい方は Open in Colab からどうぞ。
サンプルにある「マシーンラーニングについての詩を書いてください。」の出力を下記に記載します。
## マシーンラーニングの詩
**1.**
データの海、深淵の広がり、
複雑なパターン、隠された知識。
機械学習、その力強さ、
未来を予測、その道を開く。
**2.**
ニューラルネットワーク、複雑な枝、
学習の旅、その過程は静か。
データから学び、進化する姿、
予測の精度、その力強さ。
**3.**
教師あり学習、正解を導く、
教師なし学習、未知の世界へ。
機械学習、その進化は止まらない、
未来の扉を開く、新たな時代へ。
**4.**
画像認識、音声認識、
複雑なタスク、その答えを見つける。
機械学習、その力強さ、
未来の技術、その可能性を語る。
2B でこのレベルの日本語を出力できるのは本当にすごい。
macOS で試す
サンプルコードには丁寧に device を mps に変えるだけで動くとコメントアウトが残されているので、とりあえずそのまま動かしてみる。
ディレクトリを用意し、uv で環境構築、PyTorch と Hugging Face の Transformers をインストールし、実行。
mkdir playground-gemma-2-2b-jpn-it
cd playground-gemma-2-2b-jpn-it
uv init --python 3.11
touch samplecode.py
vim samplecode.py
uv add torch
uv add transformers
uv run samplecode.py
samplecode.py は下記のように指定してください。2B ですので、ユニファイドメモリが 8B もあれば動くはず。
# samplecode.py
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="google/gemma-2-2b-jpn-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="mps",
)
messages = [
{"role": "user", "content": "マシーンラーニングについての詩を書いてください。"},
]
outputs = pipe(messages, return_full_text=False, max_new_tokens=256)
assistant_response = outputs[0]["generated_text"].strip()
print(assistant_response)
手元の出力を下記に記載します。
データの海に浮かぶ星、
機械の魂、その進化の証。
学習の旅、複雑な道、
未知の世界を探索する。
ニューラルネットワーク、複雑な網、
情報から知識を紡ぎ出す。
パターンを見つけ、予測する力、
未来を解き明かす、機械の眼。
教師あり学習、教師なし学習、
様々な手法、複雑なプロセス。
データの海を深く探る、
機械の知恵、無限の力。
進化の過程、常に変化する、
新しい知識、新しい世界へ。
機械学習、未来を拓く鍵、
未知の領域へ、新たな一歩を踏み出す。
とりあえずサンプルコードはここまで。
Hugging Face Spaces にて Demo を公開しています。もしよろしければお試しください。
MLX でも試す
MLX は macOS 用のフレームワークです。gemma-2-2b-jpn-it を mlx で使えるよう変換し、mlx-community にアップロードしました。
こちらをもとに動かしてみます。uv / pip どちらのコマンドも記載しておきます。
# uv を使う場合
uv run --with mlx-lm mlx_lm.generate --model mlx-community/gemma-2-2b-jpn-it --prompt "こんにちは。" --max-tokens 128 --temp 0.0
# pip を使う場合
pip instal mlx-lm
python -m mlx_lm.generate --model mlx-community/gemma-2-2b-jpn-it --prompt "こんにちは。" --max-tokens 128 --temp 0.0
実行してみましょう。
uv run --with mlx-lm mlx_lm.generate --model mlx-community/gemma-2-2b-jpn-it --prompt "こんにちは。" --max-tokens 128 --temp 0.0
~/Downloads/playground-mlx on master ?11 with yutahayashi@MyMacStudio at 15:34:29
> uv run --with mlx-lm mlx_lm.generate --model mlx-community/gemma-2-2b-jpn-it --prompt "こんにちは。" --max-tokens 128 --temp 0.0
config.json: 100%|█████████████████████████████████████████████████████████████████████| 866/866 [00:00<00:00, 3.22MB/s]
model.safetensors.index.json: 100%|████████████████████████████████████████████████| 21.1k/21.1k [00:00<00:00, 35.5MB/s]
tokenizer_config.json: 100%|███████████████████████████████████████████████████████| 46.9k/46.9k [00:00<00:00, 6.87MB/s]
special_tokens_map.json: 100%|█████████████████████████████████████████████████████████| 555/555 [00:00<00:00, 1.75MB/s]
tokenizer.model: 100%|█████████████████████████████████████████████████████████████| 4.24M/4.24M [00:00<00:00, 4.45MB/s]
tokenizer.json: 100%|██████████████████████████████████████████████████████████████| 17.5M/17.5M [00:01<00:00, 12.2MB/s]
model.safetensors: 100%|███████████████████████████████████████████████████████████| 5.23G/5.23G [04:02<00:00, 21.5MB/s]
Fetching 7 files: 100%|███████████████████████████████████████████████████████████████████| 7/7 [04:03<00:00, 34.78s/it]
==========json: 100%|██████████████████████████████████████████████████████████████| 17.5M/17.5M [00:01<00:00, 12.8MB/s]
Prompt: <bos><start_of_turn>user
こんにちは。<end_of_turn>
<start_of_turn>model
こんにちは!😊
何かお手伝いできることはありますか?
<end_of_turn>
==========
Prompt: 12 tokens, 41.454 tokens-per-sec
Generation: 17 tokens, 43.487 tokens-per-sec
Peak memory: 7.359 GB
メモリ 8GB に収まっていますね!吊るしの macOS でも動きそうです。よろしければプロンプトなどを変えて試してみてください。
追記
Hugging Face 公式からデモが出ていました!こちらも是非!
すべて勉強代に充てさせていただきます!アウトプットします!