Model Card for Model ID

Model Details

このモデルは東京大学松尾・岩澤研究室のLLM講座2024の課題のために作られたものです。

  • Base Model type: llm-jp/llm-jp-3-13b
  • Language(s) (NLP): ja
  • License: apache-2.0
  • datasets:
    • Ichikara Instruction(kinokokoro/ichikara-instruction-003)

How To Use

以下の手順に従うことで、Hugging Face上のモデル(llm-jp/llm-jp-3-13b + shungoro/llm-jp-3-13b-finetune-1204)を用いて入力データ(elyza-tasks-100-TV_0.jsonl)を推論し、その結果を{adapter_id}-outputs.jsonlというファイルに出力できます。

前提条件

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

セットアップ

必要なライブラリのインストールを行います。

!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
!pip install -U pef
!pip install ipywidgets --upgrade

Hugging Faceのトークンを取得していることを確認してください。以下はGoogle Colabでuserdataを使う例です(実行環境に合わせて適宜変更してください)。

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

モデルの読み込み

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

model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "shungoro/llm-jp-3-13b-finetune-1204"

# 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
    })

出力処理

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.

Model tree for shungoro/llm-jp-3-13b-finetune-1204

Finetuned
(1122)
this model

Dataset used to train shungoro/llm-jp-3-13b-finetune-1204