Views
No views yet
1from transformers import (
2 AutoModelForCausalLM,
3 AutoTokenizer,
4 BitsAndBytesConfig,
5)
6from peft import PeftModel
7import torch
8from tqdm import tqdm
9import json
10
11# モデルとトークナイザーをロード
12model_id = "model_id" # 使用するモデルIDを指定
13HF_TOKEN = "huggingface_token" # Hugging Faceの認証トークン
14adapter_id = "adapter_id" # アップロードしたHugging FaceのID
15
16# QLoRA config
17bnb_config = BitsAndBytesConfig(
18 load_in_4bit=True,
19 bnb_4bit_quant_type="nf4",
20 bnb_4bit_compute_dtype=torch.bfloat16,
21)
22
23model = AutoModelForCausalLM.from_pretrained(
24 model_id,
25 quantization_config=bnb_config,
26 device_map="auto", # モデルをGPU/CPUに自動配置
27 token=HF_TOKEN
28)
29
30# 元のモデルにLoRAのアダプタを統合。
31model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)\
32
33tokenizer = AutoTokenizer.from_pretrained(model_id, token=HF_TOKEN)
34
35# 推論データ
36datasets = [
37 {"task_id": 1, "input": "こんにちは、今日の天気を教えてください。"},
38 {"task_id": 2, "input": "自己紹介をしてください。"}
39]
40
41# 推論を実行
42results = []
43for data in tqdm(datasets):
44 input = data["input"]
45
46 # プロンプトを作成
47 prompt = f"""### 指示
48 {input}
49 ### 回答
50 """
51
52 # 入力をトークン化
53 input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
54
55 # 推論実行
56 outputs = model.generate(
57 **input_ids,
58 max_new_tokens=100,
59 do_sample=False,
60 repetition_penalty=1.2
61 )
62
63 # 出力をデコード
64 output = tokenizer.decode(outputs[0][input_ids.input_ids.size(1):], skip_special_tokens=True)
65
66 # 結果を保存
67 results.append({"task_id": data["task_id"], "output": output})
68
69