Views
No views yet
elyza-tasks-100-TV_0.jsonlのタスクに回答するための推論コードです。このコードはGoogle Colabでの実行を想定しており、Hugging Faceにアップロードされたモデルとアダプタを使用します。推論結果はJSONL形式で出力されます。elyza-tasks-100-TV_0.jsonlファイルを実行コードと同じディレクトリ階層に配置してください。1!pip install transformers
2
3import torch
4from transformers import AutoTokenizer, AutoModelForCausalLM
5import json
6from tqdm import tqdm
7import re
8
9# モデル名の指定
10MODEL_NAME = "Taisekamo/llm-jp-3-13b-finetune"
11
12# GPUが利用可能か確認
13device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
14print(f"Using device: {device}")
15
16# トークナイザーとモデルのロード
17tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
18model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to(device)
19
20# データセットの読み込み
21datasets = []
22with open("./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# モデルによるタスクの推論
32results = []
33for data in tqdm(datasets):
34 input = data["input"]
35
36 prompt = f"""### 指示
37 {input}
38 ### 回答
39 """
40
41 tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
42 attention_mask = torch.ones_like(tokenized_input)
43
44 with torch.no_grad():
45 outputs = model.generate(
46 tokenized_input,
47 attention_mask=attention_mask,
48 max_new_tokens=100,
49 do_sample=False,
50 repetition_penalty=1.2,
51 pad_token_id=tokenizer.eos_token_id
52 )[0]
53 output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
54
55 results.append({"task_id": data["task_id"], "input": input, "output": output})
56
57# 推論結果をJSONLファイルとして保存
58jsonl_id = re.sub(".*/", "elyza-tasks-100-TV_0", "elyza-tasks-100-TV_0.jsonl")
59with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
60 for result in results:
61 json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters
62 f.write('\n')elyza-tasks-100-TV_0-outputs.jsonlというファイルが生成され、各タスクの結果が保存されます。1{
2 "task_id": "001",
3 "input": "タスクの指示文",
4 "output": "モデルの生成した回答"
5}