モデルの著作情報
- Developed by: trgt-tgrt
- License: apache-2.0
- Finetuned from model: llm-jp/llm-jp-3-13b
This LLaMA model was trained 2x faster with Unsloth and Hugging Face's TRL library.
モデル(loRAアダプタ)の概要
このリポジトリは、unslothライブラリを使用して、ELYZA-tasks-100-TVデータセットに対する推論を行うためのLoRAアダプタを提供します。推論の結果は、データセットに含まれる各タスクに対する予測結果を、JSON形式で保存します。具体的には、各タスクには一意の識別子(task_id)が付けられており、対応するモデルの出力(output)が生成されます。これらの予測結果は、JSONL形式でファイルに保存され、後から簡単に利用することができます。
必要な環境
- Google Colab(T4 GPUで実行可能)
- Hugging Faceアカウントとアクセストークン
Hugging Faceトークンを取得するにはこちら - elyza-tasks-100-TV_0.jsonl(推論用データ)
注意事項
- 推論用データ(elyza-tasks-100-TV_0.jsonl)を事前にColabにアップロードしておく必要があります。
- 推論用データは東京大学松尾研究室主催の大規模言語モデル2024の教材フォルダページから取得できるデータです。
- Hugging Faceトークンはセキュリティに注意して管理してください。
推論手順(Unsloth + Google Colab)
1. 必要なライブラリのインストール
Google Colab上で以下のコードを実行して、必要なライブラリをインストールします。
%%capture
!pip install unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install -U torch peft
2. 必要なライブラリのインポート
次に、推論を行うために必要なライブラリをインポートします。これにより、モデルのロードやデータの処理、推論の実行が可能になります。
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re
3. モデルとアダプタの読み込み
ここでは、ベースモデル(llm-jp/llm-jp-3-13b)とLoRAアダプタ(trgt-tgrt/llm-jp-3-13b-instruction_lora)を読み込みます。これにより、LoRAアダプタを使った推論が可能になります。
# ベースモデルとLoRAアダプタのID
model_id = "llm-jp/llm-jp-3-13b"
adapter_id = "trgt-tgrt/llm-jp-3-13b-instruction_lora"
# Hugging Faceトークンを入力
HF_TOKEN = "hoge" # 取得したトークンをここに入力
# モデルの読み込み
dtype = None # 自動設定
load_in_4bit = True # 13Bモデルのため4bit量子化を有効化
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=model_id,
dtype=dtype,
load_in_4bit=load_in_4bit,
trust_remote_code=True,
)
# LoRAアダプタを適用
model = PeftModel.from_pretrained(model, adapter_id, token=HF_TOKEN)
4. タスクデータの読み込み
次に、推論に使用するデータセット(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 = ""
5. 推論の実行
ここでは、読み込んだデータをモデルに入力し、推論を実行します。出力は、モデルによって生成された予測結果として取得されます。
FastLanguageModel.for_inference(model) # 推論モードに切り替え
results = []
for dt in tqdm(datasets):
input_text = dt["input"]
prompt = f"### 指示\n{input_text}\n### 回答\n"
inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs, max_new_tokens=512, use_cache=True, do_sample=False, repetition_penalty=1.2
)
prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
results.append({"task_id": dt["task_id"], "output": prediction})
6. 結果をJSONL形式で保存
推論結果は、課題提出用フォーマットであるJSONLファイルとして保存されます。各タスクのIDとその結果が記録されます。
# ファイル名を決定して保存
json_file_id = re.sub(".*/", "", adapter_id)
with open(f"/content/{json_file_id}_output.jsonl", "w", encoding="utf-8") as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write("\n")
文献
- Unsloth Documentation: Unsloth.ai
- ELYZA-tasks-100 Datasets: elyza/ELYZA-tasks-100
Model tree for trgt-tgrt/llm-jp-3-13b-instruction_lora
Base model
llm-jp/llm-jp-3-13b