Gemma-9B Instruction Tuned Model Inference Guide

このガイドでは、Hugging Faceからhiraki/gemma9b-it-sftモデルをダウンロードし、推論を実行する手順を説明します。

パッケージのインストール

はじめに、必要なパッケージをインストールします:

# 依存関係のアップグレード
pip install --upgrade datasets bitsandbytes trl peft
pip install --upgrade torch

# その他の必要なパッケージ
pip install transformers tqdm

環境設定

  • CUDA対応のGPU(最低16GB以上のVRAMを推奨)
  • Python 3.8以上
  • 十分なストレージ空間(モデルのダウンロード用)

インストールの確認

インストール後、以下のコードで環境を確認できます:

import torch
print(f"PyTorch version: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA device count: {torch.cuda.device_count()}")

手順

1. Hugging Faceの設定

import os

# HuggingFaceのトークンを設定
os.environ["HF_TOKEN"] = "your_token_here"  # あなたのトークンに置き換えてください

2. 推論スクリプトの作成

以下の内容でinference.pyを作成してください:

import os
import json
import torch
from tqdm import tqdm
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

def run_inference(model_path, input_file, output_file):
    # モデルとトークナイザーの読み込み
    print("モデルを読み込んでいます...")
    model = AutoPeftModelForCausalLM.from_pretrained(
        model_path,
        device_map={"": "cuda"},
        torch_dtype=torch.float16,
    )

    tokenizer = AutoTokenizer.from_pretrained(model_path)

    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token
    tokenizer.padding_side = "right"

    # 入力データの読み込み
    print("入力データを読み込んでいます...")
    data = []
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            data.append(json.loads(line))

    # 推論実行
    results = []
    print("推論を実行中...")
    for dt in tqdm(data, desc="Processing"):
        task_id = dt["task_id"]
        input_text = dt["input"]

        # プロンプトの生成
        prompt = f"### 指示\n{input_text}\n### 回答\n"

        # 入力のトークン化
        inputs = tokenizer([prompt], return_tensors="pt").to("cuda")

        # 出力の生成
        outputs = model.generate(
            inputs.input_ids,
            attention_mask=inputs.attention_mask,
            max_new_tokens=512,
            temperature=0.7,
            top_p=0.9,
            repetition_penalty=1.2,
            do_sample=False
        )

        # 出力のデコード
        prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('### 回答\n')[-1].strip()

        # 結果を保存
        results.append({
            "task_id": task_id,
            "input": input_text,
            "output": prediction
        })

    # 結果の保存
    print(f"結果を保存中: {output_file}")
    with open(output_file, 'w', encoding='utf-8') as f:
        for result in results:
            json.dump(result, f, ensure_ascii=False)
            f.write('\n')

    print("処理が完了しました")
    return results

if __name__ == "__main__":
    model_path = "hiraki/gemma9b-it-sft"
    input_file = "elyza-tasks-100-TV_0.jsonl"  # 入力ファイル名
    output_file = "output.jsonl"  # 出力ファイル名
    
    results = run_inference(model_path, input_file, output_file)
    
    # 最初の結果を表示して確認
    print("\n最初の結果の例:")
    print(json.dumps(results[0], ensure_ascii=False, indent=2))

3. 入力データの準備

入力JSONLファイルは以下の形式である必要があります:

{
  "task_id": "タスクの一意な識別子",
  "input": "入力テキスト"
}

4. 実行

python inference.py

出力形式

出力されるJSONLファイルは以下の形式です:

{
  "task_id": "タスクID",
  "input": "入力テキスト",
  "output": "生成されたテキスト"
}

生成パラメータのカスタマイズ

スクリプト内の以下のパラメータを調整することで、生成結果をカスタマイズできます:

  • max_new_tokens: 生成する最大トークン数 (デフォルト: 512)
  • temperature: 生成の多様性 (デフォルト: 0.7)
  • top_p: サンプリングの閾値 (デフォルト: 0.9)
  • repetition_penalty: 繰り返しの抑制 (デフォルト: 1.2)
  • do_sample: ランダムサンプリングの有効/無効 (デフォルト: False)

トラブルシューティング

よくあるエラー

  1. CUDA Out of Memory

    RuntimeError: CUDA out of memory
    
    • 解決策:
      • GPUのメモリを解放する
      • max_new_tokensの値を小さくする
      • より小さいバッチサイズを使用する
  2. パッケージのバージョンの不一致

    ImportError: Cannot import name 'X' from 'Y'
    
    • 解決策:
      • すべてのパッケージを最新バージョンにアップグレードする
      • pip install --upgradeコマンドを再実行する
  3. モデルのダウンロードエラー

    OSError: Incorrect Hugging Face token
    
    • 解決策:
      • HF_TOKENが正しく設定されているか確認
      • インターネット接続を確認
  4. 入力ファイルのフォーマットエラー

    JSONDecodeError: Expecting value
    
    • 解決策:
      • 入力JSONLファイルの形式を確認
      • ファイルのエンコーディングがUTF-8であることを確認

注意事項

  • 推論には十分なGPUメモリが必要です
  • 大量のデータを処理する場合は、進捗バーで進行状況を確認できます
  • 出力ファイルは自動的に上書きされるため、必要に応じてバックアップを作成してください

サポート

問題が発生した場合は、以下を確認してください:

  1. Hugging Faceのモデルカード: hiraki/gemma9b-it-sft
  2. PEFT GitHub: microsoft/PEFT
  3. Transformers GitHub: huggingface/transformers
Downloads last month
0
Inference API
Unable to determine this model’s pipeline type. Check the docs .

Model tree for hiraki/gemma9b-it-sft

Base model

google/gemma-2-9b
Adapter
(59)
this model