n4 commited on
Commit
f83738c
1 Parent(s): f5e2997

Upload fine-tuned model

Browse files
Files changed (1) hide show
  1. README.md +89 -1
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
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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