Views
No views yet
1from transformers import (
2 AutoModelForCausalLM,
3 AutoTokenizer,
4 BitsAndBytesConfig,
5)
6import torch
7from tqdm import tqdm
8import json
9
10# Hugging Faceで取得したTokenをこちらに貼る。
11HF_TOKEN = "your_token"
12
13# 自分の作成したモデルのIDをこちらに貼る。
14model_name = "blueyyy15/llm-jp-3-13b-it"
15
16# QLoRA config
17bnb_config = BitsAndBytesConfig(
18 load_in_4bit=True,
19 bnb_4bit_quant_type="nf4",
20 bnb_4bit_compute_dtype=torch.bfloat16,
21 bnb_4bit_use_double_quant=False,
22)
23
24# Load model
25model = AutoModelForCausalLM.from_pretrained(
26 model_name,
27 quantization_config=bnb_config,
28 device_map="auto",
29 token = HF_TOKEN
30)
31
32# Load tokenizer
33tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, token = HF_TOKEN)
34
35# データセットの読み込み。
36# omnicampusの開発環境では、左にタスクのjsonlをドラッグアンドドロップしてから実行。
37datasets = []
38with open("/content/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# gemma
48results = []
49for data in tqdm(datasets):
50
51 input = data["input"]
52 prompt = f"""### 指示
53 {input}
54 ### 回答:
55 """
56
57 input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
58 outputs = model.generate(**input_ids, max_new_tokens=512, do_sample=False, repetition_penalty=1.2,)
59 output = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)
60
61 results.append({"task_id": data["task_id"], "input": input, "output": output})
62
63# llmjp
64results = []
65for data in tqdm(datasets):
66
67 input = data["input"]
68
69 prompt = f"""### 指示
70 {input}
71 ### 回答:
72 """
73
74 tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
75 with torch.no_grad():
76 outputs = model.generate(
77 tokenized_input,
78 max_new_tokens=100,
79 do_sample=False,
80 repetition_penalty=1.2
81 )[0]
82 output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
83
84 results.append({"task_id": data["task_id"], "input": input, "output": output})
85
86# こちらで生成されたjsolを提出してください。
87# 本コードではinputとeval_aspectも含んでいますが、なくても問題ありません。
88# 必須なのはtask_idとoutputとなります。
89import re
90model_name = re.sub(".*/", "", model_name)
91with open(f"./{model_name}-outputs.jsonl", 'w', encoding='utf-8') as f:
92 for result in results:
93 json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters
94 f.write('\n')