Views
No views yet
1!pip install -U bitsandbytes
2!pip install -U transformers
3!pip install -U accelerate
4!pip install -U datasets
5!pip install ipywidgets --upgrade
6from transformers import (
7 AutoModelForCausalLM,
8 AutoTokenizer,
9 BitsAndBytesConfig,
10)
11import torch
12from tqdm import tqdm
13import json
14
15HF_TOKEN = "<my token>"
16
17model_name = "papettoTV/llm-jp-3-13b-it"
18
19# QLoRA config
20bnb_config = BitsAndBytesConfig(
21 load_in_4bit=True,
22 bnb_4bit_quant_type="nf4",
23 bnb_4bit_compute_dtype=torch.bfloat16,
24 bnb_4bit_use_double_quant=False,
25)
26
27# Load model
28model = AutoModelForCausalLM.from_pretrained(
29 model_name,
30 quantization_config=bnb_config,
31 device_map="auto",
32 token = HF_TOKEN
33)
34
35# Load tokenizer
36tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, token = HF_TOKEN)
37
38# データセットの読み込み。
39# omnicampusの開発環境では、左にタスクのjsonlをドラッグアンドドロップしてから実行。
40datasets = []
41with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
42 item = ""
43 for line in f:
44 line = line.strip()
45 item += line
46 if item.endswith("}"):
47 datasets.append(json.loads(item))
48 item = ""
49
50# gemma
51results = []
52for data in tqdm(datasets):
53
54 input = data["input"]
55 prompt = f"""### 指示
56 {input}
57 ### 回答:
58 """
59
60 input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
61 # outputs = model.generate(**input_ids, max_new_tokens=512, do_sample=False, repetition_penalty=1.2,)
62 outputs = model.generate(input_ids=input_ids.input_ids, max_new_tokens=512, do_sample=False, repetition_penalty=1.2,)
63
64 output = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)
65
66 results.append({"task_id": data["task_id"], "input": input, "output": output})
67
68# llmjp
69results = []
70for data in tqdm(datasets):
71
72 input = data["input"]
73
74 prompt = f"""### 指示
75 {input}
76 ### 回答:
77 """
78
79 tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
80 with torch.no_grad():
81 outputs = model.generate(
82 tokenized_input,
83 max_new_tokens=100,
84 do_sample=False,
85 repetition_penalty=1.2
86 )[0]
87 output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
88
89 results.append({"task_id": data["task_id"], "input": input, "output": output})
90
91# こちらで生成されたjsolを提出しました
92import re
93model_name = re.sub(".*/", "", model_name)
94with open(f"./{model_name}-outputs.jsonl", 'w', encoding='utf-8') as f:
95 for result in results:
96 json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters
97 f.write('\n')