Upload fine-tuned model
Browse files
README.md
CHANGED
@@ -71,7 +71,95 @@ Users (both direct and downstream) should be made aware of the risks, biases and
|
|
71 |
|
72 |
Use the code below to get started with the model.
|
73 |
|
74 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
|
76 |
## Training Details
|
77 |
|
|
|
71 |
|
72 |
Use the code below to get started with the model.
|
73 |
|
74 |
+
Google Colabで実行してください。
|
75 |
+
```
|
76 |
+
!pip install bitsandbytes
|
77 |
+
|
78 |
+
```
|
79 |
+
|
80 |
+
```
|
81 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
82 |
+
import torch
|
83 |
+
import json
|
84 |
+
from tqdm import tqdm
|
85 |
+
|
86 |
+
# 必要な設定
|
87 |
+
model_name = "n4/llm-jp-3-13b-finetune-10"
|
88 |
+
max_seq_length = 1024
|
89 |
+
load_in_4bit = True # 4-bit量子化を有効化
|
90 |
+
|
91 |
+
# モデルとトークナイザーのロード
|
92 |
+
print("モデルをロード中...")
|
93 |
+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
94 |
+
dtype = torch.float16 if load_in_4bit else None
|
95 |
+
|
96 |
+
model = AutoModelForCausalLM.from_pretrained(
|
97 |
+
model_name,
|
98 |
+
device_map="auto",
|
99 |
+
torch_dtype=dtype,
|
100 |
+
load_in_4bit=load_in_4bit,
|
101 |
+
)
|
102 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
103 |
+
print("モデルのロードが完了しました。")
|
104 |
+
```
|
105 |
+
|
106 |
+
```
|
107 |
+
# 推論用ファイルの用意
|
108 |
+
elyza-tasks-100-TV_0.jsonl を /content/elyza-tasks-100-TV_0.jsonl となるようにアップロードしておいてください。
|
109 |
+
```
|
110 |
+
|
111 |
+
```
|
112 |
+
|
113 |
+
# データセットの読み込み
|
114 |
+
datasets = []
|
115 |
+
with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
|
116 |
+
item = ""
|
117 |
+
for i, line in enumerate(f):
|
118 |
+
line = line.strip()
|
119 |
+
item += line
|
120 |
+
if item.endswith("}"):
|
121 |
+
data = json.loads(item)
|
122 |
+
# task_id がない場合は行番号を追加
|
123 |
+
if "task_id" not in data:
|
124 |
+
data["task_id"] = i # 0から始まる行番号
|
125 |
+
datasets.append(data)
|
126 |
+
item = ""
|
127 |
+
|
128 |
+
# 推論
|
129 |
+
results = []
|
130 |
+
print("推論を開始します...")
|
131 |
+
for dt in tqdm(datasets):
|
132 |
+
input_text = dt["input"]
|
133 |
+
|
134 |
+
# プロンプト作成
|
135 |
+
prompt = f"<s>指示を読んで、質問内容を把握してください。把握した内容を回答してください。選択肢の並べ変えや、意味の理解など、多様な質問が想定されるので質問を注意深くみてください。</s><s>### 指示\n{input_text}\n\n\n### 回答\n"
|
136 |
+
|
137 |
+
# トークナイズ(token_type_idsを削除)
|
138 |
+
inputs = tokenizer(prompt, return_tensors="pt").to(device)
|
139 |
+
inputs.pop("token_type_ids", None) # 不要なキーを削除
|
140 |
+
|
141 |
+
# 推論
|
142 |
+
outputs = model.generate(
|
143 |
+
**inputs,
|
144 |
+
max_new_tokens=512,
|
145 |
+
use_cache=True,
|
146 |
+
do_sample=False,
|
147 |
+
repetition_penalty=1.2,
|
148 |
+
)
|
149 |
+
# 結果のデコード
|
150 |
+
prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
|
151 |
+
|
152 |
+
# 結果を保存
|
153 |
+
results.append({"task_id": dt["task_id"], "input": input_text, "output": prediction})
|
154 |
+
|
155 |
+
# 推論結果の保存
|
156 |
+
output_file = f"{model_name.replace('/', '_')}_output.jsonl"
|
157 |
+
with open(output_file, "w") as f:
|
158 |
+
for result in results:
|
159 |
+
f.write(json.dumps(result, ensure_ascii=False) + "\n")
|
160 |
+
|
161 |
+
print(f"推論が完了しました。結果は {output_file} に保存されました。")
|
162 |
+
```
|
163 |
|
164 |
## Training Details
|
165 |
|