Views
No views yet
pip install unsloth torch peft1HF_TOKEN = "your token"
2import torch
3max_new_tokens = 1024
4
5new_model_id = "MikenekoDyn/llm-jp-13b-061215b" #'_lora'は読み込むときに自動で付加される
6load_in_4bit = False
7load_in_8bit = not load_in_4bit
8do_sample=True
9repetition_penalty=1.05
10temperature=0.7
11top_p=0.95
12
13## ELYZA-tasks-100-TVの読み込み
14import json
15datasets = []
16with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
17 item = ""
18 for line in f:
19 line = line.strip()
20 item += line
21 if item.endswith("}"):
22 datasets.append(json.loads(item))
23 item = ""
24
25## Config設定
26from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
27# QLoRA config
28bnb_config = BitsAndBytesConfig(
29 load_in_4bit=load_in_4bit,
30 load_in_8bit=load_in_8bit,
31 bnb_4bit_quant_type="nf4",
32 bnb_4bit_compute_dtype=torch.bfloat16,
33 bnb_4bit_use_double_quant=False,
34)
35# Load model
36model = AutoModelForCausalLM.from_pretrained(
37 new_model_id+"_lora",
38 quantization_config=bnb_config,
39 device_map="auto",
40 token = HF_TOKEN
41)
42# Load tokenizer
43tokenizer = AutoTokenizer.from_pretrained(new_model_id+"_lora", trust_remote_code=True, token = HF_TOKEN)
44
45## 推論実施
46from tqdm import tqdm
47results = []
48ii=0
49for data in tqdm(datasets):
50 input = data["input"]
51 prompt = f"""### User
52 {input}
53 ### Assistant
54 """
55 tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
56 with torch.no_grad():
57 outputs = model.generate(
58 tokenized_input,
59 max_new_tokens=max_new_tokens,
60 do_sample=do_sample,
61 repetition_penalty=repetition_penalty,
62 temperature=temperature,
63 top_p=top_p
64 )[0]
65 output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
66 if ii<3:
67 print(output)
68 results.append({"task_id": data["task_id"], "input": input, "output": output})
69 ii=ii+1
70
71# jsonlで保存
72import re
73save_model_name = re.sub(".*/", "", new_model_id)
74with open(f"{save_model_name}_output.jsonl", 'w', encoding='utf-8') as f:
75 for result in results:
76 json.dump(result, f, ensure_ascii=False)
77 f.write('\n')