Views
No views yet
1
2# 必要なライブラリをインストール
3!pip install unsloth
4!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
5!pip install -U torch
6!pip install -U peft
7
8# 必要なライブラリを読み込み
9from unsloth import FastLanguageModel
10from peft import PeftModel
11import torch
12import json
13from tqdm import tqdm
14import re
15from google.colab import files # ファイルアップロード/ダウンロード用
16from transformers import BitsAndBytesConfig
17
18# ベースとなるモデルと学習したLoRAのアダプタ
19model_id = "llm-jp/llm-jp-3-13b"
20adapter_id = "ryusuke009/llm-jp-3-13b-finetune-2"
21
22# 4bit量子化の設定
23quantization_config = BitsAndBytesConfig(
24 load_in_4bit=True,
25 bnb_4bit_compute_dtype=torch.float16,
26 bnb_4bit_use_double_quant=True,
27 bnb_4bit_quant_type="nf4",
28 llm_int8_enable_fp32_cpu_offload=True
29)
30
31# unslothのFastLanguageModelで元のモデルをロード
32model, tokenizer = FastLanguageModel.from_pretrained(
33 model_name=model_id,
34 quantization_config=quantization_config,
35 trust_remote_code=True,
36)
37
38# 元のモデルにLoRAのアダプタを統合
39model = PeftModel.from_pretrained(model, adapter_id)
40
41# タスクとなるデータの読み込み(ファイルアップロード方式)
42print("推論用のJSONLファイルをアップロードしてください...")
43uploaded = files.upload()
44
45# アップロードされたファイルを処理
46datasets = []
47filename = list(uploaded.keys())[0]
48with open(filename, "r") as f:
49 item = ""
50 for line in f:
51 line = line.strip()
52 item += line
53 if item.endswith("}"):
54 datasets.append(json.loads(item))
55 item = ""
56
57print(f"データセットの読み込み完了: {len(datasets)}件のデータを処理します")
58
59# 推論するためにモデルのモードを変更
60FastLanguageModel.for_inference(model)
61
62# モデルを用いてタスクの推論
63results = []
64for dt in tqdm(datasets):
65 input = dt["input"]
66 prompt = f"""### 指示\n{input} 簡潔に回答してください \n### 回答\n"""
67 inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
68
69 outputs = model.generate(
70 **inputs,
71 max_new_tokens=512,
72 use_cache=True,
73 do_sample=False,
74 repetition_penalty=1.2
75 )
76 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
77 prediction = re.sub(r"[*#]", "", prediction)
78
79 results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
80
81# 結果をjsonlで保存とダウンロード
82output_filename = "model_predictions_output.jsonl"
83with open(output_filename, 'w', encoding='utf-8') as f:
84 for result in results:
85 json.dump(result, f, ensure_ascii=False)
86 f.write('\n')
87
88# 結果ファイルをダウンロード
89files.download(output_filename)
90print("処理が完了しました。結果ファイルがダウンロードされます。")
91