Overview

このモデルは、LLM-JP-3-13Bをベースに、LoRA (Low-Rank Adaptation)を利用してファインチューニングしたモデルです。

モデル詳細

  • ベースモデル: llm-jp/llm-jp-3-13b
  • ファインチューニング手法: LoRA (Low-Rank Adaptation)
  • 量子化: 4ビット量子化 (QLoRA)

インストール

必要なパッケージのインストール: # Google Colab使用時 ※ローカル環境で実行する場合は、!を付けずにコマンドを実行してください

!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft
!pip install -U trl
!pip install ipywidgets --upgrade

使用方法

セットアップから推論まで

1.必要なライブラリのインポート:

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
)
from peft import PeftModel
import torch
from datasets import load_dataset
import json
from tqdm import tqdm


# Hugging Faceのトークン設定

from google.colab import userdata  # Google Colab使用時
HF_TOKEN = userdata.get('HF_TOKEN')

2.モデルとトークナイザーの読み込み:

# QLoRA設定
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

# ベースモデルの読み込み
base_model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "frhug12og/llm-jp-3-13b-finetune"

model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    quantization_config=bnb_config,
    device_map="auto",
    token=HF_TOKEN
)

tokenizer = AutoTokenizer.from_pretrained(
    base_model_id,
    trust_remote_code=True,
    token=HF_TOKEN
)

# LoRAアダプタの適用
model = PeftModel.from_pretrained(
    model,
    adapter_id,
    token=HF_TOKEN
)

3.推論用の関数定義:

def generate_response(input_text):
    prompt = f"""### 指示
{input_text}
### 回答
"""
    inputs = tokenizer(
        prompt, 
        return_tensors="pt",
        return_token_type_ids=False
    ).to(model.device)
    
    with torch.no_grad():
        outputs = model.generate(
            input_ids=inputs['input_ids'],
            max_new_tokens=512,
            do_sample=False,
            repetition_penalty=1.2
        )
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

ELYZA-tasks-100-TV_0での実行方法

import json
from tqdm import tqdm

# データの読み込み
datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
    for line in f:
        if line.strip():
            datasets.append(json.loads(line.strip()))

# 推論実行
results = []
for data in tqdm(datasets):
    input_text = data["input"]
    output = generate_response(input_text)
    
    results.append({
        "task_id": data["task_id"],
        "input": input_text,
        "output": output
    })

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

Notes

  • Google Colabで実行する場合は、T4 GPU環境を選択してください
  • メモリ不足が発生した場合は、max_new_tokensの値を調整してください

Citation

このモデルの学習には以下のデータセットを使用しています:

@inproceedings{sekine-etal-2024-ichikara,
    title = "ichikara-instruction: {LLM}のための日本語インストラクションデータの構築",
    author = "関根 聡 and 安藤 まや and 後藤 美知子 and 鈴木 久美 and 河原 大輔 and 井之上 直也 and 乾 健太郎",
    booktitle = "言語処理学会第30回年次大会",
    year = "2024",
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Examples
Unable to determine this model's library. Check the docs .