Model Card for tachibanamsh/llm-jp-3-13b-finetune

Overview

このリポジトリでは、tachibanamsh/llm-jp-3-13b-finetuneを使用して推論を実行する手順を提供します。
入力データとしてelyza-tasks-100-TV_0.jsonlを用い、推論結果を{model_name}-outputs.jsonlとして出力するプロセスを示します。


Model Details

  • Developed by: llm-jp, tachibanamsh
  • Model type: LLM (Causal Language Model)
  • Finetuned from: llm-jp/llm-jp-3-13b
  • License: [More Information Needed]
  • Language: Japanese
  • Quantization: QLoRA (4-bit, NF4)

Usage Instructions

以下に、推論を実行するための手順を説明します。

前提条件

  • Python環境が用意されていること(例: Google Colab)
  • Hugging Faceのアクセストークン(HF_TOKEN)が取得済みであること

セットアップ

  1. 以下のコマンドで必要なライブラリをインストールしてください。

    # python 3.10.12
    !pip install -U pip
    !pip install -U transformers
    !pip install -U bitsandbytes
    !pip install -U accelerate
    !pip install -U datasets
    !pip install -U peft
    !pip install -U trl
    !pip install -U wandb
    !pip install ipywidgets --upgrade
    
  2. Hugging Faceのトークン設定

    from google.colab import userdata
    HF_TOKEN = userdata.get('HF_TOKEN')
    

モデル・トークナイザ読み込み

import os, torch, gc
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    logging,
)
from peft import (
    LoraConfig,
    PeftModel,
    get_peft_model,
)
from datasets import load_dataset
import json
from tqdm import tqdm
import re
import bitsandbytes as bnb
from trl import SFTTrainer

model_id = "tachibanamsh/llm-jp-3-13b-finetune"

# QLoRA用の設定
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",
    token=HF_TOKEN
)

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

# Peftモデルを適用
model = PeftModel.from_pretrained(model, adapter_id, token=HF_TOKEN)

入力データの準備

./elyza-tasks-100-TV_0.jsonlというファイルからデータセットをロードします。

datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "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 tqdm(datasets):
    input_data = data["input"]

    prompt = f"""### 指示
{input_data}
### 回答
"""

    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=200,
            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({
        "input": input_data,
        "output": output
    })

出力の保存

最後に、adapter_idをベースにしたファイル名でJSONL形式の出力ファイルを保存します。

jsonl_id = re.sub(".*/", "", adapter_id)
with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')

以上の手順で、{adapter_id}-outputs.jsonlというファイルに推論結果が書き出されます。

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 pipeline_tag.