harataku's picture
Update README.md
c74d043 verified
metadata
license: cc-by-nc-sa-4.0
datasets:
  - kinokokoro/ichikara-instruction-003
language:
  - ja
base_model:
  - llm-jp/llm-jp-3-13b
pipeline_tag: text-generation
library_name: transformers

llm-jp-3-13b-finetune 使用方法ガイド

必要な環境

  • Python 3.10以上
  • CUDA対応GPU(推奨)
  • 必要なライブラリ:
    • transformers
    • bitsandbytes
    • accelerate
    • torch
    • peft

インストール手順

pip install -U pip
pip install -U transformers
pip install -U bitsandbytes
pip install -U accelerate
pip install -U peft
pip install -U torch

基本的な使用方法

1. シンプルな使用方法

from transformers import pipeline

# パイプラインの作成
generator = pipeline(
    "text-generation",
    model="harataku/llm-jp-3-13b-finetune",
    device=0  # GPU使用
)

# テキスト生成
prompt = """### 指示
好きな食べ物について教えてください
### 回答
"""
response = generator(prompt, max_length=200, num_return_sequences=1)
print(response[0]['generated_text'])

2. 詳細な設定による使用方法

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig
)
import torch

# モデルの設定
model_id = "harataku/llm-jp-3-13b-finetune"

# 量子化の設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

# モデルとトークナイザーの読み込み
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)

# 推論用の関数
def generate_response(input_text):
    prompt = f"""### 指示
{input_text}
### 回答
"""

    tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
    attention_mask = torch.ones_like(tokenized_input)

    with torch.no_grad():
        outputs = model.generate(
            tokenized_input,
            attention_mask=attention_mask,
            max_new_tokens=100,
            do_sample=False,
            repetition_penalty=1.2,
            pad_token_id=tokenizer.eos_token_id
        )[0]
    
    response = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
    return response

# 使用例
input_text = "好きな食べ物について教えてください"
response = generate_response(input_text)
print(response)

タスク出力用JSONLファイルの生成方法

コード実装

import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

def generate_jsonl_outputs(model, tokenizer, input_jsonl_path, output_jsonl_path):
    # 入力データの読み込み
    datasets = []
    with open(input_jsonl_path, "r") as f:
        item = ""
        for line in f:
            line = line.strip()
            item += line
            if item.endswith("}"):
                datasets.append(json.loads(item))
                item = ""
    
    # 出力の生成
    results = []
    for data in datasets:
        input_text = data["input"]
        
        prompt = f"""### 指示
{input_text}
### 回答
"""
        
        tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
        attention_mask = torch.ones_like(tokenized_input)
        
        with torch.no_grad():
            outputs = model.generate(
                tokenized_input,
                attention_mask=attention_mask,
                max_new_tokens=100,
                do_sample=False,
                repetition_penalty=1.2,
                pad_token_id=tokenizer.eos_token_id
            )[0]
            
        output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
        results.append({
            "task_id": data["task_id"],
            "input": input_text,
            "output": output
        })
    
    # 結果をJSONL形式で保存
    with open(output_jsonl_path, 'w', encoding='utf-8') as f:
        for result in results:
            json.dump(result, f, ensure_ascii=False)
            f.write('\n')

# 使用例
def main():
    # 入出力パスの設定
    input_path = "path/to/input.jsonl"
    output_path = "path/to/output.jsonl"

    # モデルとトークナイザーの準備
    model_id = "harataku/llm-jp-3-13b-finetune"
    bnb_config = BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16,
    )

    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        quantization_config=bnb_config,
        device_map="auto"
    )
    tokenizer = AutoTokenizer.from_pretrained(model_id)

    # JSONL出力の生成
    generate_jsonl_outputs(model, tokenizer, input_path, output_path)

if __name__ == "__main__":
    main()

出力形式

生成されるJSONLファイルの各行は以下の形式になります:

{"task_id": "タスクID", "input": "入力テキスト", "output": "モデルの出力"}

使用手順

  1. 必要なライブラリのインストール
pip install transformers torch accelerate bitsandbytes
  1. 入力JSONLファイルの準備
  • 各行が有効なJSON形式である必要があります
  • 各JSONには少なくとも "task_id" と "input" フィールドが必要です
  1. スクリプトの実行
  • 適切なパスを設定してスクリプトを実行します
  • 出力されたJSONLファイルを確認します

パラメータの説明

モデル生成時のパラメータ

  • max_new_tokens: 生成する最大トークン数(デフォルト: 100)
  • do_sample: サンプリングを行うかどうか(デフォルト: False)
  • repetition_penalty: 繰り返しを抑制するためのペナルティ(デフォルト: 1.2)

入力フォーマット

入力は以下の形式で行います:

### 指示
[入力テキスト]
### 回答

トラブルシューティング

  1. メモリエラーが発生する場合:
# より少ないメモリ使用量の設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16  # bfloat16からfloat16に変更
)
  1. GPUが利用できない場合:
# CPUでの実行設定
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="cpu",
    low_cpu_mem_usage=True
)