LLM/Gemmaへのプログラム・アクセスの調査記録

Share
目次
カテゴリのアイコン カテゴリ一覧 AI

LLM/Gemmaへのプログラム・アクセスの調査記録

LLM/Gemmaへのプログラム・アクセスの調査記録

更新日

Gemma モデルの導入手順

導入する Gemma のモデルとして Hugging Face から取得可能な「google/gemma-2b-it」を採用。

また、プログラムアクセスにフレームワーク「 Hugging Face Transformers」を採用。

  • Gemma に関して公式 SDK という形で提供されている方法は見つからない
  • Google が Hugging Face に公式にモデルを提供しており、Hugging Face Transformers を経由する方法がデファクトになっている

補足1:Gemma モデルについて

  • 高性能GPU/サーバー向けの gemma-7b-it などもダウンロード可能
  • 末尾の -it は instruction-tuned の略で対話形式にチューニングされているモデルを指す
  • gemma-2b-it は GPU 要件がないため CPU 環境に向いている

補足2:Gemma モデルの利用について

  • ダウンロードやプログラムアクセス時に認証が発生するため Hugging Face のアカウント作成が必要
  • Hugging Face から Gemma モデルをダウンロードする前に Hugging Face のサイトにログインして該当モデルのライセンス申請を行っておくこと
  • プログラムアクセスのために Hugging Face のサイトでアクセストークンを登録しておくこと

補足3:実行フレームワークについて

  • Transformers + PyTorch は Hugging Face 公式であり、パラメータ調整等の柔軟性が高い
  • ollama は導入がシンプルで REST API も提供されているが、パラメータ調整などできることが限られている
  • gemma.cpp は汎用性よりも軽量さが重視されており、テストや研究のユースケースが対象

インストール手順

1. Hugging Face の準備

  • アカウント作成
    https://huggingface.co/join にて必要事項を入力し、アカウントを作成
  • 利用するモデルのページ(gemma-2b-it の場合)でライセンスを承諾
    「Acknowledge license」ボタンをクリックして必要事項を入力のうえ、ライセンスに同意
  • アクセストークンの取得
    1. メニューの「Access Tokens」を選択
    2. 「Create new token」ボタンをクリック
    3. 「Read」を選んでトークン名を入力し、「Create Token」をクリック
    4. 表示されるトークンをコピー (※画面を閉じると再表示できないので注意)

2. システム準備

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-venv python3-pip

3. 仮想環境準備

# 作業ディレクトリ作成
mkdir ~/hiprojects/gemma
cd ~/hiprojects/gemma
# 仮想環境作成
python3 -m venv venv
source venv/bin/activate
# パッケージのインストール
pip3 install huggingface_hub transformers torch fastapi uvicorn

事前に取得しておいたアクセストークンを環境変数に設定(必要なら.bashrc 等に記述)。

export HF_TOKEN=[アクセストークンの内容]

4. 推論モデルのダウンロード

# model_download.py

from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL_NAME = "google/gemma-2b-it"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
# ダウンロードの実行
python3 model_download.py

ディレクトリサイズを確認して 5GB 程度であれば成功。

du -sh ~/.cache/huggingface/hub/models--google--gemma-2b-it/

一度ダウンロードすれば上記ディレクトリにキャッシュされるため、以降は同じコードを実行しても再ダウンロードは発生しない。

5. 推論プログラムの作成

FastAPI に post エンドポイントを設定し、受け取った文字列を Transformers のライブラリで処理するサンプルコード。

# main.py

from fastapi import FastAPI, Request
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForCausalLM

app = FastAPI()

MODEL_NAME = "google/gemma-2b-it"

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)

class ChatInput(BaseModel):
  message: str

# エンドポイント登録
@app.post("/api/v1/chat")
def chat(input: ChatInput):
  messages = [
    { "role": "user", "content": input.message },
  ]
  # 入力トークンID列を生成
  prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
  inputs = tokenizer.encode(prompt, add_special_tokens=True, return_tensors="pt")

  # 推論実行
  # 必要に応じて temperature などの調整パラメータを指定
  outputs = model.generate(
    input_ids=inputs.to(model.device),
    max_new_tokens=128
  )

  # 推論結果のデコード
  reply = tokenizer.decode(outputs[0], skip_special_tokens=True)
  return { "response": reply }

6. 推論プログラムの起動/動作確認

uvicorn main:app --host 0.0.0.0 --port 8083

–host 0.0.0.0 の指定により WSL2 上のすべてのインターフェースを公開。ローカルでの確認であれば curl 等で http://localhost:8083/api/v1/chat にアクセスし応答を確認。

# Windows 11 の curl.exe の例
curl.exe -X POST http://localhost:8083/api/v1/chat -H "Content-Type: application/json" -d "{\"message\":\"こんにちは。調子はいかがですか\"}"

正常に動作すれば AI からの応答が得られます。

{"response":"user\nこんにちは。調子はいかがですか\nmodel\nこんにちは!私は元気なですか? \n\n私は、こんにちはと答えます。"}
アバターのアイコン

この記事を書いた人

アバターのアイコン

inoue55