Views
No views yet
dependencies = [
"wandb>=0.18.6",
"python-dotenv>=1.0.1",
"unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git",
"torch @ https://download.pytorch.org/whl/cu124/torch-2.5.0%2Bcu124-cp312-cp312-linux_x86_64.whl",
"transformers==4.46.1",
"numpy>=2.1.3",
"bitsandbytes>=0.45.0",
"accelerate>=1.1.1",
"datasets>=3.1.0",
"peft>=0.13.2",
"trl>=0.12.2",
"xformers>=0.0.28.post2",
]1
2# ベースとなるモデルと学習したLoRAのアダプタ(Hugging FaceのIDを指定)。
3model_id = "llm-jp/llm-jp-3-13b"
4adapter_id = "taka1stdec/llm-jp-3-13b-it_lora_v2"
5
6# unslothのFastLanguageModelで元のモデルをロード。
7dtype = None # Noneにしておけば自動で設定
8load_in_4bit = True # 今回は13Bモデルを扱うためTrue
9
10model, tokenizer = FastLanguageModel.from_pretrained(
11 model_name=model_id,
12 dtype=dtype,
13 load_in_4bit=load_in_4bit,
14 trust_remote_code=True,
15)
16
17# 元のモデルにLoRAのアダプタを統合。
18model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
19
20# タスクとなるデータの読み込み。
21datasets = []
22with open("./inputs/elyza-tasks-100-TV_0.jsonl", "r") as f:
23 item = ""
24 for line in f:
25 line = line.strip()
26 item += line
27 if item.endswith("}"):
28 datasets.append(json.loads(item))
29 item = ""
30
31
32# モデルを用いてタスクの推論。
33
34# 推論するためにモデルのモードを変更
35FastLanguageModel.for_inference(model)
36
37results = []
38for dt in tqdm(datasets):
39 input = dt["input"]
40
41 prompt = f"""### 指示\n{input}\n### 回答\n"""
42
43 inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
44
45 outputs = model.generate(**inputs, max_new_tokens = 2048, use_cache = True, do_sample=False, repetition_penalty=1.2)
46 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
47
48 results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
49
50
51# 結果をjsonlで保存。
52
53# ここではadapter_idを元にファイル名を決定しているが、ファイル名は任意で問題なし。
54json_file_id = re.sub(".*/", "", adapter_id)
55with open(f"{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
56 for result in results:
57 json.dump(result, f, ensure_ascii=False)
58 f.write('\n')