File size: 5,697 Bytes
2de67ea 15eba44 56b90ca 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 488d646 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 2de67ea 15eba44 56b90ca 15eba44 74eb6c4 15eba44 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
---
language:
- "ja"
tags:
- "text-generation"
- "Japanese"
license: "cc-by-nc-4.0"
datasets: []
metrics: []
base_model: []
---
# 推論用コード README
## 概要
以下では、Hugging Faceにアップロードしたモデルを用いて、ELYZA-tasks-100-TVの出力を得るための方法を説明します。
---
## 使用したデータセット
本プロジェクトで使用したデータは、以下の論文で紹介されたデータセットです。
- **関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎**. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)
このデータセットは、LLM(大規模言語モデル)に対する日本語インストラクションデータを構築するために利用されました。`ichikara-instruction`というデータセットは、様々なタスクに対して日本語での指示を提供するもので、モデルの日本語処理能力向上に役立ちます。
### データセットのリンク
データセットに関する詳細情報やダウンロードリンクは、以下の公式ウェブページから確認できます:
- [ichikara-instruction データセット公開ページ](https://liat-aip.sakura.ne.jp/wp/llm%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E4%BD%9C%E6%88%90/llm%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF-%E5%85%AC%E9%96%8B/)
---
## 必要なライブラリ
推論を実行するためには、以下のPythonライブラリが必要です。
```bash
pip install -U ipywidgets
pip install transformers==4.46.3
pip install -U bitsandbytes
pip install -U accelerate
pip install -U datasets
pip install -U peft==0.13.2
```
これらのライブラリは、モデルの推論やデータセットの処理を行うために使用されます。
---
## 推論の実行
### 1. Hugging Face トークンの設定
まず、Hugging Faceのトークンを取得し、以下のコードで設定します。
```bash
HF_TOKEN = "Hugging Face Token" # ご自身のHugging Faceトークンを貼り付けてください
```
### 2. モデルとアダプタの設定
次に、使用するベースモデルを指定します。以下のコードでモデルの設定を行います。
```bash
# 使用するベースモデル(Hugging Face上のモデルIDを指定)
model_id = "nyanta2530/llm-jp-3-13b-finetune"
```
### 3. モデルのロード
以下のコードで、ベースモデルおよびLoRAアダプタを統合したモデルをロードします。
```bash
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
import torch
# LoRAの設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
# モデルとトークナイザーのロード
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto",
token=HF_TOKEN
)
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token=HF_TOKEN)
```
### 4. 入力データの読み込み
次に、入力データ(ELYZA-tasks-100-TV)をJSONL形式で読み込みます。以下のコードで、ファイルを読み込み、タスクデータを処理します。
```bash
import json
datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
item = ""
for line in f:
line = line.strip()
item += line
if item.endswith("}"):
datasets.append(json.loads(item))
item = ""
```
### 5. 推論の実行
次に、ロードしたモデルを使用して、各タスクの入力に対して推論を実行します。以下のコードで推論を行い、結果をresultsリストに保存します。
```bash
from tqdm import tqdm
results = []
for data in tqdm(datasets):
input = data["input"]
prompt = f"""### 指示
{input}
### 回答
"""
tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
attention_mask = torch.ones_like(tokenized_input)
with torch.no_grad():
outputs = model.generate(
tokenized_input,
attention_mask=attention_mask,
max_new_tokens=100,
do_sample=False,
repetition_penalty=1.2,
pad_token_id=tokenizer.eos_token_id
)[0]
output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
results.append({"task_id": data["task_id"], "input": input, "output": output})
```
### 6. 出力ファイルの保存
最後に、生成された結果をjsonl形式で保存します。以下のコードで、推論結果をファイルに書き出します。
```bash
import re
# jsonlファイルの保存
jsonl_id = re.sub(".*/", "", adapter_dpo_id)
with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False) # ensure_ascii=False for handling non-ASCII characters
f.write('\n')
```
このコードを実行すると、{jsonl_id}-outputs.jsonlという名前で出力ファイルが保存されます。このファイルは、タスクIDと出力が含まれたjsonl形式のファイルです。
|