Update README.md
Browse files
README.md
CHANGED
@@ -11,9 +11,6 @@ library_name: transformers
|
|
11 |
---
|
12 |
# llm-jp-3-13b-finetune 使用方法ガイド
|
13 |
|
14 |
-
## モデル概要
|
15 |
-
このモデルは、llm-jp/llm-jp-3-13bをベースにLoRA (Parameter-Efficient Fine-Tuning)で学習された公開モデルです。
|
16 |
-
|
17 |
## 必要な環境
|
18 |
- Python 3.10以上
|
19 |
- CUDA対応GPU(推奨)
|
@@ -27,7 +24,6 @@ library_name: transformers
|
|
27 |
## インストール手順
|
28 |
|
29 |
```bash
|
30 |
-
# 必要なライブラリのインストール
|
31 |
pip install -U pip
|
32 |
pip install -U transformers
|
33 |
pip install -U bitsandbytes
|
@@ -83,7 +79,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
83 |
quantization_config=bnb_config,
|
84 |
device_map="auto"
|
85 |
)
|
86 |
-
tokenizer = AutoTokenizer.from_pretrained(model_id
|
87 |
|
88 |
# 推論用の関数
|
89 |
def generate_response(input_text):
|
@@ -114,6 +110,114 @@ response = generate_response(input_text)
|
|
114 |
print(response)
|
115 |
```
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
## パラメータの説明
|
118 |
|
119 |
### モデル生成時のパラメータ
|
@@ -151,22 +255,3 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
151 |
)
|
152 |
```
|
153 |
|
154 |
-
## 注意事項
|
155 |
-
- 4bit量子化を使用しているため、メモリ使用量は効率的ですが、推論速度とのトレードオフがあります
|
156 |
-
- GPU環境での実行を推奨します
|
157 |
-
- 長い入力テキストの場合は、`max_new_tokens`の値を適宜調整してください
|
158 |
-
|
159 |
-
## ライセンス
|
160 |
-
本モデルはベースモデル(llm-jp/llm-jp-3-13b)のライセンスを継承しています。また、学習データとして使用したichikara-instructionデータセットのライセンス(CC-BY-NC-SA)も適用されます。
|
161 |
-
|
162 |
-
## 引用
|
163 |
-
学習データについて:
|
164 |
-
```
|
165 |
-
関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎.
|
166 |
-
ichikara-instruction: LLMのための日本語インストラクション���ータの構築.
|
167 |
-
言語処理学会第30回年次大会(2024)
|
168 |
-
```
|
169 |
-
|
170 |
-
## 更新履歴
|
171 |
-
- 2024/03/XX: モデルをpublic設定に変更
|
172 |
-
- 2024/03/XX: READMEを更新し、より簡単な使用方法を追加
|
|
|
11 |
---
|
12 |
# llm-jp-3-13b-finetune 使用方法ガイド
|
13 |
|
|
|
|
|
|
|
14 |
## 必要な環境
|
15 |
- Python 3.10以上
|
16 |
- CUDA対応GPU(推奨)
|
|
|
24 |
## インストール手順
|
25 |
|
26 |
```bash
|
|
|
27 |
pip install -U pip
|
28 |
pip install -U transformers
|
29 |
pip install -U bitsandbytes
|
|
|
79 |
quantization_config=bnb_config,
|
80 |
device_map="auto"
|
81 |
)
|
82 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
83 |
|
84 |
# 推論用の関数
|
85 |
def generate_response(input_text):
|
|
|
110 |
print(response)
|
111 |
```
|
112 |
|
113 |
+
## タスク出力用JSONLファイルの生成方法
|
114 |
+
|
115 |
+
### コード実装
|
116 |
+
|
117 |
+
```python
|
118 |
+
import json
|
119 |
+
import torch
|
120 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
|
121 |
+
|
122 |
+
def generate_jsonl_outputs(model, tokenizer, input_jsonl_path, output_jsonl_path):
|
123 |
+
# 入力データの読み込み
|
124 |
+
datasets = []
|
125 |
+
with open(input_jsonl_path, "r") as f:
|
126 |
+
item = ""
|
127 |
+
for line in f:
|
128 |
+
line = line.strip()
|
129 |
+
item += line
|
130 |
+
if item.endswith("}"):
|
131 |
+
datasets.append(json.loads(item))
|
132 |
+
item = ""
|
133 |
+
|
134 |
+
# 出力の生成
|
135 |
+
results = []
|
136 |
+
for data in datasets:
|
137 |
+
input_text = data["input"]
|
138 |
+
|
139 |
+
prompt = f"""### 指示
|
140 |
+
{input_text}
|
141 |
+
### 回答
|
142 |
+
"""
|
143 |
+
|
144 |
+
tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
|
145 |
+
attention_mask = torch.ones_like(tokenized_input)
|
146 |
+
|
147 |
+
with torch.no_grad():
|
148 |
+
outputs = model.generate(
|
149 |
+
tokenized_input,
|
150 |
+
attention_mask=attention_mask,
|
151 |
+
max_new_tokens=100,
|
152 |
+
do_sample=False,
|
153 |
+
repetition_penalty=1.2,
|
154 |
+
pad_token_id=tokenizer.eos_token_id
|
155 |
+
)[0]
|
156 |
+
|
157 |
+
output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
|
158 |
+
results.append({
|
159 |
+
"task_id": data["task_id"],
|
160 |
+
"input": input_text,
|
161 |
+
"output": output
|
162 |
+
})
|
163 |
+
|
164 |
+
# 結果をJSONL形式で保存
|
165 |
+
with open(output_jsonl_path, 'w', encoding='utf-8') as f:
|
166 |
+
for result in results:
|
167 |
+
json.dump(result, f, ensure_ascii=False)
|
168 |
+
f.write('\n')
|
169 |
+
|
170 |
+
# 使用例
|
171 |
+
def main():
|
172 |
+
# 入出力パスの設定
|
173 |
+
input_path = "path/to/input.jsonl"
|
174 |
+
output_path = "path/to/output.jsonl"
|
175 |
+
|
176 |
+
# モデルとトークナイザーの準備
|
177 |
+
model_id = "harataku/llm-jp-3-13b-finetune"
|
178 |
+
bnb_config = BitsAndBytesConfig(
|
179 |
+
load_in_4bit=True,
|
180 |
+
bnb_4bit_quant_type="nf4",
|
181 |
+
bnb_4bit_compute_dtype=torch.bfloat16,
|
182 |
+
)
|
183 |
+
|
184 |
+
model = AutoModelForCausalLM.from_pretrained(
|
185 |
+
model_id,
|
186 |
+
quantization_config=bnb_config,
|
187 |
+
device_map="auto"
|
188 |
+
)
|
189 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
190 |
+
|
191 |
+
# JSONL出力の生成
|
192 |
+
generate_jsonl_outputs(model, tokenizer, input_path, output_path)
|
193 |
+
|
194 |
+
if __name__ == "__main__":
|
195 |
+
main()
|
196 |
+
```
|
197 |
+
|
198 |
+
### 出力形式
|
199 |
+
|
200 |
+
生成されるJSONLファイルの各行は以下の形式になります:
|
201 |
+
|
202 |
+
```json
|
203 |
+
{"task_id": "タスクID", "input": "入力テキスト", "output": "モデルの出力"}
|
204 |
+
```
|
205 |
+
|
206 |
+
### 使用手順
|
207 |
+
|
208 |
+
1. 必要なライブラリのインストール
|
209 |
+
```bash
|
210 |
+
pip install transformers torch accelerate bitsandbytes
|
211 |
+
```
|
212 |
+
|
213 |
+
2. 入力JSONLファイルの準備
|
214 |
+
- 各行が有効なJSON形式である必要があります
|
215 |
+
- 各JSONには少なくとも "task_id" と "input" フィールドが必要です
|
216 |
+
|
217 |
+
3. スクリプトの実行
|
218 |
+
- 適切なパスを設定してスクリプトを実行します
|
219 |
+
- 出力されたJSONLファイルを確認します
|
220 |
+
|
221 |
## パラメータの説明
|
222 |
|
223 |
### モデル生成時のパラメータ
|
|
|
255 |
)
|
256 |
```
|
257 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|