Views
No views yet
llm-jp/llm-jp-3-13b) を用いて入力データを推論し、その結果を出力することができます。llm-jp/llm-jp-3-13b) をダウンロード済みであること1!pip install -U pip
2!pip install -U transformers
3!pip install -U bitsandbytes
4!pip install -U accelerate
5!pip install -U datasets
6!pip install -U peft
7!pip install -U trl
8!pip install -U wandb
9!pip install ipywidgets --upgrade1from google.colab import userdata
2HF_TOKEN = userdata.get('HF_TOKEN')HF_TOKEN = "your_hf_token_here"1import torch
2from transformers import (
3 AutoModelForCausalLM,
4 AutoTokenizer,
5 BitsAndBytesConfig,
6)
7from peft import PeftModel
8
9# モデル ID の設定
10base_model_id = "llm-jp/llm-jp-3-13b"
11adapter_id = "llm-jp-3-13b-finetune"
12
13# 量子化設定
14bnb_config = BitsAndBytesConfig(
15 load_in_4bit=True,
16 bnb_4bit_quant_type="nf4",
17 bnb_4bit_compute_dtype=torch.bfloat16,
18)
19
20# モデルの読み込み
21model = AutoModelForCausalLM.from_pretrained(
22 base_model_id,
23 quantization_config=bnb_config,
24 device_map="auto",
25 token=HF_TOKEN
26)
27
28# トークナイザの読み込み
29tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True, token=HF_TOKEN)
30
31# LoRA アダプタの適用
32model = PeftModel.from_pretrained(model, adapter_id, token=HF_TOKEN)./elyza-tasks-100-TV_0.jsonl ファイルをロードします。1import json
2from tqdm import tqdm
3
4datasets = []
5with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
6 item = ""
7 for line in f:
8 line = line.strip()
9 item += line
10 if item.endswith("}"):
11 datasets.append(json.loads(item))
12 item = ""1results = []
2for data in tqdm(datasets):
3 input_data = data["input"]
4
5 # プロンプトの準備
6 prompt = f"""### 指示
7{input_data}
8### 回答
9"""
10
11 tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
12 attention_mask = torch.ones_like(tokenized_input)
13 with torch.no_grad():
14 outputs = model.generate(
15 tokenized_input,
16 attention_mask=attention_mask,
17 max_new_tokens=200,
18 do_sample=False,
19 repetition_penalty=1.2,
20 pad_token_id=tokenizer.eos_token_id
21 )[0]
22
23 output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
24
25 # 結果を保存
26 results.append({
27 "input": input_data,
28 "output": output
29 })1import re
2
3jsonl_id = re.sub(".*/", "", adapter_id)
4with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
5 for result in results:
6 json.dump(result, f, ensure_ascii=False)
7 f.write('\n'){adapter_id}-outputs.jsonl というファイルに保存されます。