|
--- |
|
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 使用方法ガイド |
|
|
|
## モデル概要 |
|
このモデルは、llm-jp/llm-jp-3-13bをベースにLoRA (Parameter-Efficient Fine-Tuning)で学習された公開モデルです。 |
|
|
|
## 必要な環境 |
|
- 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, trust_remote_code=True) |
|
|
|
# 推論用の関数 |
|
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) |
|
``` |
|
|
|
## パラメータの説明 |
|
|
|
### モデル生成時のパラメータ |
|
- `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 |
|
) |
|
``` |
|
|
|
## 注意事項 |
|
- 4bit量子化を使用しているため、メモリ使用量は効率的ですが、推論速度とのトレードオフがあります |
|
- GPU環境での実行を推奨します |
|
- 長い入力テキストの場合は、`max_new_tokens`の値を適宜調整してください |
|
|
|
## ライセンス |
|
本モデルはベースモデル(llm-jp/llm-jp-3-13b)のライセンスを継承しています。また、学習データとして使用したichikara-instructionデータセットのライセンス(CC-BY-NC-SA)も適用されます。 |
|
|
|
## 引用 |
|
学習データについて: |
|
``` |
|
関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. |
|
ichikara-instruction: LLMのための日本語インストラクションデータの構築. |
|
言語処理学会第30回年次大会(2024) |
|
``` |
|
|
|
## 更新履歴 |
|
- 2024/03/XX: モデルをpublic設定に変更 |
|
- 2024/03/XX: READMEを更新し、より簡単な使用方法を追加 |