File size: 3,578 Bytes
46ec075 43e4bea 1af6c3a 46ec075 1af6c3a 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 76cb0d8 46ec075 |
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 |
### 実行手順
以下の手順に従うことで、Hugging Face上のモデル(llm-jp/llm-jp-3-13b + midorikawa/llm-jp-3-13b-it_lora)を用いて
入力データ(elyza-tasks-100-TV_0.jsonl)を推論し、その結果を{model_name}-outputs.jsonlというファイルに出力できます。
### 前提条件
- Python環境があること(例: Google Colab)
- GPUを使用すること
- Hugging Faceのアクセストークン (HF_TOKEN) が取得済みであること
Usage
### セットアップ
- 必要なライブラリのインストールを行います。
```python
!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
```
### モデル・トークナイザの読み込み
```python
# Hugging Faceのトークンを取得
from google.colab import userdata
HF_TOKEN=userdata.get('HF_TOKEN')
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
)
import torch
from tqdm import tqdm
import json
# QLoRA用の設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=False,
)
# モデル読み込み
model_name = "midorikawa/llm-jp-3-13b-it_lora"
# モデル読み込み
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
token = HF_TOKEN
)
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, token = HF_TOKEN)
```
### 入力データの準備
- ./elyza-tasks-100-TV_0.jsonlというファイルからデータセットをロードします。
```python
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 = ""
```
### 推論実行
```python
results = []
for data in tqdm(datasets):
input_text = data["input"]
prompt = f"""### 指示
{input_text}
### 回答:
"""
# トークナイザーを使用して input_ids と attention_mask を取得
tokenized_input = tokenizer(
prompt,
add_special_tokens=True,
padding='longest',
truncation=True,
return_tensors="pt"
).to(model.device)
with torch.no_grad():
outputs = model.generate(
input_ids=tokenized_input["input_ids"],
attention_mask=tokenized_input["attention_mask"],
max_new_tokens=512,
do_sample=False,
repetition_penalty=1.2,
pad_token_id=tokenizer.eos_token_id
)[0]
# 出力をデコード
output = tokenizer.decode(outputs[tokenized_input["input_ids"].size(1):], skip_special_tokens=True)
results.append({"task_id": data["task_id"], "input": input_text, "output": output})
# モデル名の処理
model_name_cleaned = re.sub(".*/", "", model_name)
# 結果をファイルに保存
with open(f"./{model_name_cleaned}-outputs.jsonl", 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False) # ensure_ascii=False は非ASCII文字の処理に有効
f.write('\n')
```
以上の手順で、{model_name}-outputs.jsonlというファイルに推論結果が書き出されます。
### 出力結果
- llm-jp-3-13b-it_lora-outputs.jsonl
---
base_model: llm-jp/llm-jp-3-13b
tags:
- text-generation-inference
- transformers
- unsloth
- llama
- trl
license: apache-2.0
language:
- en
---
|