metadata
license: cc-by-nc-sa-4.0
datasets:
- kinokokoro/ichikara-instruction-003
language:
- ja
base_model:
- llm-jp/llm-jp-3-13b
pipeline_tag: text-generation
library_name: transformers
llm-jp-3-13b-finetune 使用方法ガイド
必要な環境
- Python 3.10以上
- CUDA対応GPU(推奨)
- 必要なライブラリ:
- transformers
- bitsandbytes
- accelerate
- torch
- peft
インストール手順
pip install -U pip
pip install -U transformers
pip install -U bitsandbytes
pip install -U accelerate
pip install -U peft
pip install -U torch
基本的な使用方法
1. シンプルな使用方法
from transformers import pipeline
# パイプラインの作成
generator = pipeline(
"text-generation",
model="harataku/llm-jp-3-13b-finetune",
device=0 # GPU使用
)
# テキスト生成
prompt = """### 指示
好きな食べ物について教えてください
### 回答
"""
response = generator(prompt, max_length=200, num_return_sequences=1)
print(response[0]['generated_text'])
2. 詳細な設定による使用方法
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig
)
import torch
# モデルの設定
model_id = "harataku/llm-jp-3-13b-finetune"
# 量子化の設定
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"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 推論用の関数
def generate_response(input_text):
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]
response = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
return response
# 使用例
input_text = "好きな食べ物について教えてください"
response = generate_response(input_text)
print(response)
タスク出力用JSONLファイルの生成方法
コード実装
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
def generate_jsonl_outputs(model, tokenizer, input_jsonl_path, output_jsonl_path):
# 入力データの読み込み
datasets = []
with open(input_jsonl_path, "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 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(output_jsonl_path, 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write('\n')
# 使用例
def main():
# 入出力パスの設定
input_path = "path/to/input.jsonl"
output_path = "path/to/output.jsonl"
# モデルとトークナイザーの準備
model_id = "harataku/llm-jp-3-13b-finetune"
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"
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# JSONL出力の生成
generate_jsonl_outputs(model, tokenizer, input_path, output_path)
if __name__ == "__main__":
main()
出力形式
生成されるJSONLファイルの各行は以下の形式になります:
{"task_id": "タスクID", "input": "入力テキスト", "output": "モデルの出力"}
使用手順
- 必要なライブラリのインストール
pip install transformers torch accelerate bitsandbytes
- 入力JSONLファイルの準備
- 各行が有効なJSON形式である必要があります
- 各JSONには少なくとも "task_id" と "input" フィールドが必要です
- スクリプトの実行
- 適切なパスを設定してスクリプトを実行します
- 出力されたJSONLファイルを確認します
パラメータの説明
モデル生成時のパラメータ
max_new_tokens
: 生成する最大トークン数(デフォルト: 100)do_sample
: サンプリングを行うかどうか(デフォルト: False)repetition_penalty
: 繰り返しを抑制するためのペナルティ(デフォルト: 1.2)
入力フォーマット
入力は以下の形式で行います:
### 指示
[入力テキスト]
### 回答
トラブルシューティング
- メモリエラーが発生する場合:
# より少ないメモリ使用量の設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16 # bfloat16からfloat16に変更
)
- GPUが利用できない場合:
# CPUでの実行設定
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cpu",
low_cpu_mem_usage=True
)