Views
No views yet
1# bash
2# 必要なライブラリをインストール
3pip install unsloth
4pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
5pip install -U torch -q
6pip install -U peft -q1# Python
2# 必要なライブラリのインポート
3import re
4import json
5import pprint as pp
6import torch
7
8from tqdm import tqdm
9from unsloth import FastLanguageModel
10from peft import PeftModel
11
12
13
14model_id = "llm-jp/llm-jp-3-13b"
15adapter_id = "SODM/llm-jp-3-13b-unsloth-sft-elyza-ep2-lr2e4_lora"
16
17# モデルとトークナイザの読み込み
18# unslothのFastLanguageModelで元のモデルをロード。
19dtype = None
20load_in_4bit = True
21
22model, tokenizer = FastLanguageModel.from_pretrained(
23 model_name=model_id,
24 dtype=dtype,
25 load_in_4bit=load_in_4bit,
26 trust_remote_code=True,
27)
28
29# Hugging Face Token
30HF_TOKEN = **YOUR_TOKEN**
31
32# LoRAのアダプタを統合。
33model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
34
35# 入力データの処理(評価用データがGoogleDriveのMyDrive/に保存されている場合)
36datasets = []
37with open("/content/drive/MyDrive/elyza-tasks-100-TV_0.jsonl", "r") as f:
38 item = ""
39 for line in f:
40 line = line.strip()
41 item += line
42 if item.endswith("}"):
43 datasets.append(json.loads(item))
44 item = ""
45
46# 推論
47FastLanguageModel.for_inference(model)
48
49results = []
50for dt in tqdm(datasets):
51 input = dt["input"]
52
53 prompt = f"""### 指示\n{input}\n改行せずに指示された形式で回答してください。\n### 回答\n"""
54 inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
55
56 outputs = model.generate(**inputs, max_new_tokens = 2048, use_cache = True, do_sample=False, repetition_penalty=1.2)
57 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
58
59 results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
60
61# jsonlで保存
62with open(f"/content/drive/output.jsonl", 'w', encoding='utf-8') as f:
63 for result in results:
64 json.dump(result, f, ensure_ascii=False)
65 f.write('\n')
66
67pp.pprint(results)