Model Card for Konpekisky/llm2024_02_llm-jp-3-13b-finetune_ELYZA_task-100
Summary
このモデルは、llm-jp/llm-jp-3-13b
をベースモデルとして、ELYZA-tasks-100データセットを用いて指示特化の微調整(Instruction Tuning)を行った日本語向け大規模言語モデルです。LoRA (Low-Rank Adapters)を使用してパラメータ効率の良い微調整を実施し、4bit量子化でモデルを軽量化しています。本モデルは多様な日本語タスク(QA、要約、対話など)において、与えられた指示に応答しやすくなっています。
Model Details
- Model ID: Konpekisky/llm2024_02_llm-jp-3-13b-finetune_ELYZA_task-100
- Base Model: llm-jp/llm-jp-3-13b
- Fine-tuning Method: LoRAによるSFT (Supervised Fine-Tuning)
- Quantization: 4bit (BitsAndBytes, nf4)
- Dataset: ELYZA-tasks-100 (CC BY 4.0)
Intended Use
本モデルは、日本語での指示応答(Instruction Following)を目的としています。質問回答、要約、文章生成など、さまざまな自然言語処理タスクに対応可能です。
Out-of-Scope Use:
- 違法行為や有害なコンテンツ生成
- 医療・法律・金融など専門性が高く、正確さが求められる分野で本モデルの出力を鵜呑みにし、判断を下すこと
License
- ベースモデル(Llama系):Llamaライセンス(研究目的利用限定)
- データセット(ELYZA-tasks-100):CC BY 4.0
本モデルを利用する際には、元のライセンス条件に従ってください。
Training Procedure
環境:
Google Colab (Python 3.10, GPU)、transformers
、bitsandbytes
、accelerate
、peft
、trl
等を使用。
手順:
llm-jp/llm-jp-3-13b
モデルを4bit量子化でロード- LoRA (Low-Rank Adapters) によるPEFT設定を行い、モデルをPEFT化
- ELYZA-tasks-100データセットをプロンプト形式(
### 指示 ... ### 回答 ...
)に整形 - SFTTrainerを使用して1エポック分の微調整を実行
- 学習後のモデルとトークナイザをローカルおよびHugging Face Hubへアップロード
主な学習ハイパーパラメータ:
- エポック数: 1
- 学習率: 5e-5
- Max seq length: 512
- Batch size: per_device_train_batch_size=1, gradient_accumulation_steps=2
- LoRA設定: r=16, lora_alpha=32, lora_dropout=0.05
Evaluation
微調整後、テスト用のjsonlファイルを用いて推論を実施し、model.generate()
で得た出力をJSON Lines形式で出力します。これによりモデルの応答品質を簡易的に確認できます。
How to Get Started with the Model
以下のコードは、Google Colab上で本モデルを用いてタスクを実行する一例です。TEST_DATA_DIR
とTEST_DATA
は、使用したいテスト用jsonlファイルのパスに合わせて変更してください。tokenizer
とmodel
は、事前にAutoTokenizer
・AutoModelForCausalLM
を用いてfrom_pretrained()
で読み込んでいることが前提です。
!pip install -U pip
!pip install -U transformers bitsandbytes accelerate datasets peft trl
!pip install ipywidgets --upgrade
import os
import torch
import json
from tqdm import tqdm
import bitsandbytes as bnb
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig
)
from peft import PeftModel
# Google Colaboratoryで作業する場合はこちらも実行してください。
from google.colab import drive
drive.mount('/content/drive')
new_model_id = "Konpekisky/llm2024_02_llm-jp-3-13b-finetune_ELYZA_task-100"
# Fine-Tuning時と同様の4bit量子化設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# モデルとトークナイザの読み込み
# Fine-Tuning時と同様にquantization_configとdevice_mapを指定
tokenizer = AutoTokenizer.from_pretrained(new_model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
new_model_id,
device_map="auto",
quantization_config=bnb_config,
trust_remote_code=True
)
# テストデータのパス(事前にGoogle Colabにアップロード済みのjsonlファイル)
TEST_DATA_DIR = "your_dir_path"
TEST_DATA = "your_jsonl_file_name"
test_data_path = os.path.join(TEST_DATA_DIR, TEST_DATA)
# テストデータ読み込み
datasets = []
with open(test_data_path, "r", encoding="utf-8") 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_text = data["input"]
prompt = f"""### 指示
{input_text}
### 回答
"""
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=100,
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({"task_id": data["task_id"], "input": input_text, "output": output})
# 結果をJSONL形式で保存
with open("model_outputs.jsonl", "w", encoding="utf-8") as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write("\n")
print("推論結果がmodel_outputs.jsonlに保存されました。")
上記のスニペットをGoogle Colabなどで実行すれば、モデルの基本的な推論が可能です。
Limitations and Bias
トレーニングデータ由来のバイアスを含む可能性があります。 重要な意思決定には専門家の判断が必要です。