takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

Windows 11 Pro で Gemma 2 2B JPN を使ってみた備忘録

目的

Gemma 2 JPN を使ったことを記録する

注意事項

初めて実行したときから時間が経って記事にしたため、抜け漏れがあるかもしれません。ご了承ください。

環境

# command
# nvidia driver
nvidia-smi
# cuda version
nvcc -V

# 
$ nvidia-smi
Mon Oct 14 21:26:53 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.94                 Driver Version: 560.94         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3060      WDDM  |   00000000:01:00.0  On |                  N/A |
|  0%   57C    P5             46W /  170W |    1283MiB /  12288MiB |      2%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
$
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Sep_12_02:55:00_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.6, V12.6.77
Build cuda_12.6.r12.6/compiler.34841621_0
$

参考

huggingface.co

事前準備

huggingface でアカウントを作り、 settings ページで、アクセストークンを作る

https://huggingface.co/settings/tokens

参考画像

前提条件

準備

cd ~
mkdir -p projects/gemma-2-2b-jpn
cd projects/gemma-2-2b-jpn
python -m venv venv
source venv/Scripts/activate
# pip をとりあえずアップグレードしている
# pip がなければインストールすること
python -m pip install --upgrade pip
# 足りないパッケージがあれば適宜インストールすること
pip install accelerate inquirerpy torchaudio torchvision 
pip install -U transformers

コードを作る

cat << 'EOL' >> sample.py
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-jpn-it")
model = AutoModelForCausalLM.from_pretrained(
    "google/gemma-2-2b-jpn-it",
    device_map="auto",
    torch_dtype=torch.bfloat16,
)

messages = [
    {"role": "user", "content": "マシーンラーニングについての詩を書いてください。"},
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True, return_dict=True).to(model.device)

outputs = model.generate(**inputs, max_new_tokens=256)
generated_text = tokenizer.batch_decode(outputs[:, inputs['input_ids'].shape[1]:], skip_special_tokens=True)[0]
print(generated_text.strip())

EOL

content の中身が入力プロンプトとなる

実行

python sample.py

log

$ python sample.py
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████| 2/2 [00:04<00:00,  2.19s/it]
The 'max_batch_size' argument of HybridCache is deprecated and will be removed in v4.46. Use the more precisely named 'batch_size' argument instead.
Starting from v4.46, the `logits` model output will have the same type as the model (except at train time, where it will always be FP32)
## マシーンラーニングの詩

**1.**
データの海、深淵の広がり、
複雑なパターン、隠された知識。
機械学習、その力強さ、
未来を予測、新たな道を開く。

**2.**
教師あり学習、教師なし学習、
複雑なアルゴリズム、複雑な思考。
ニューラルネットワーク、複雑な構造、
膨大なデータ、学習の旅。

**3.**
分類、予測、生成、
機械学習の力、無限の可能性。
画像認識、自然言語処理、
未来の技術、新たな世界へ。

**4.**
誤差、学習、改善、
機械学習の進化、その過程。
複雑な問題、解決への道、
未来の技術、新たな時代へ。
$

GPU 使用量

GPU リソース

大体 6GBGPU 使っている

今後

OpenWebUI とか使って自由に使えるようにしてみたい