Views
No views yet
1
2from transformers import (
3 AutoModelForCausalLM,
4 AutoTokenizer,
5 BitsAndBytesConfig,
6)
7import torch
8import json
9from tqdm import tqdm
10
11# Hugging FaceのトークンとモデルID
12HF_TOKEN = "your-token" # Hugging Faceトークンを記入
13model_id = "Ka3456/practice5_lora" # 新しいモデルID
14
15# LoRAモデルのロード
16bnb_config = BitsAndBytesConfig(
17 load_in_4bit=True,
18 bnb_4bit_quant_type="nf4",
19 bnb_4bit_compute_dtype=torch.bfloat16,
20 bnb_4bit_use_double_quant=False,
21)
22
23model = AutoModelForCausalLM.from_pretrained(
24 model_id,
25 trust_remote_code=True,
26 quantization_config=bnb_config,
27 use_auth_token=HF_TOKEN,
28)
29
30tokenizer = AutoTokenizer.from_pretrained(
31 model_id,
32 trust_remote_code=True,
33 use_auth_token=HF_TOKEN,
34)
35
36# データセットの読み込み
37datasets = []
38with open("elyza-tasks-100-TV_0.jsonl", "r") as f:
39 item = ""
40 for line in f:
41 line = line.strip()
42 item += line
43 if item.endswith("}"):
44 datasets.append(json.loads(item))
45 item = ""
46
47# モデル推論
48results = []
49for dt in tqdm(datasets):
50 input_text = dt["input"]
51 prompt = f"### 指示\n{input_text}\n### 回答\n"
52
53 inputs = tokenizer([prompt], return_tensors="pt").to("cuda")
54 outputs = model.generate(
55 **inputs,
56 max_new_tokens=512,
57 use_cache=True,
58 do_sample=False,
59 repetition_penalty=1.2,
60 )
61
62 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split("\n### 回答")[-1]
63 results.append({"task_id": dt["task_id"], "input": input_text, "output": prediction})
64
65# 推論結果を保存
66output_file = f"{model_id}_output.jsonl"
67with open(output_file, "w", encoding="utf-8") as f:
68 for result in results:
69 json.dump(result, f, ensure_ascii=False)
70 f.write("\n")
71
72print(f"推論結果を {output_file} に保存しました。")
73
74