|
--- |
|
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 |
|
|
|
## インストール手順 |
|
|
|
```bash |
|
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. シンプルな使用方法 |
|
```python |
|
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. 詳細な設定による使用方法 |
|
```python |
|
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ファイルの生成方法 |
|
|
|
### コード実装 |
|
|
|
```python |
|
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ファイルの各行は以下の形式になります: |
|
|
|
```json |
|
{"task_id": "タスクID", "input": "入力テキスト", "output": "モデルの出力"} |
|
``` |
|
|
|
### 使用手順 |
|
|
|
1. 必要なライブラリのインストール |
|
```bash |
|
pip install transformers torch accelerate bitsandbytes |
|
``` |
|
|
|
2. 入力JSONLファイルの準備 |
|
- 各行が有効なJSON形式である必要があります |
|
- 各JSONには少なくとも "task_id" と "input" フィールドが必要です |
|
|
|
3. スクリプトの実行 |
|
- 適切なパスを設定してスクリプトを実行します |
|
- 出力されたJSONLファイルを確認します |
|
|
|
## パラメータの説明 |
|
|
|
### モデル生成時のパラメータ |
|
- `max_new_tokens`: 生成する最大トークン数(デフォルト: 100) |
|
- `do_sample`: サンプリングを行うかどうか(デフォルト: False) |
|
- `repetition_penalty`: 繰り返しを抑制するためのペナルティ(デフォルト: 1.2) |
|
|
|
### 入力フォーマット |
|
入力は以下の形式で行います: |
|
``` |
|
### 指示 |
|
[入力テキスト] |
|
### 回答 |
|
``` |
|
|
|
## トラブルシューティング |
|
|
|
1. メモリエラーが発生する場合: |
|
```python |
|
# より少ないメモリ使用量の設定 |
|
bnb_config = BitsAndBytesConfig( |
|
load_in_4bit=True, |
|
bnb_4bit_quant_type="nf4", |
|
bnb_4bit_compute_dtype=torch.float16 # bfloat16からfloat16に変更 |
|
) |
|
``` |
|
|
|
2. GPUが利用できない場合: |
|
```python |
|
# CPUでの実行設定 |
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_id, |
|
device_map="cpu", |
|
low_cpu_mem_usage=True |
|
) |
|
``` |
|
|
|
|