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 Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.