File size: 4,305 Bytes
5448b9e
 
 
 
 
 
 
 
 
 
 
007abb2
5448b9e
 
 
 
 
 
 
 
 
 
 
007abb2
 
aed79ef
 
 
 
 
 
 
 
 
5955f21
aed79ef
 
 
 
 
 
 
5955f21
aed79ef
5955f21
aed79ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5955f21
aed79ef
 
 
 
 
007abb2
 
 
aed79ef
007abb2
 
 
 
 
 
 
aed79ef
007abb2
aed79ef
 
 
007abb2
 
aed79ef
007abb2
 
 
 
 
 
 
 
 
 
 
 
 
 
aed79ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
base_model: llm-jp/llm-jp-3-13b
tags:
- text-generation-inference
- transformers
- unsloth
- llama
- trl
license: apache-2.0
language:
- en
- ja
---

# Uploaded  model

- **Developed by:** togakyo
- **License:** apache-2.0
- **Finetuned from model :** llm-jp/llm-jp-3-13b

This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library.

[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth)

# Sample Use
# 実行手順

以下の手順に従うことで、Hugging Face上のモデル(`togakyo/llm-jp-3-13b-it`)を用いて入力データ(`elyza-tasks-100-TV_0.jsonl`)を推論し、
その結果を`{model_id}-outputs.jsonl`というファイルに出力できます。

## 前提条件

- Python環境があること(例: Google Colab)
- Hugging Faceのアクセストークン (HF_TOKEN) が取得済みであること
- GPU RAM 15GB(10.3GB使用)

## セットアップ

1. 必要なライブラリなどインストールを行います。

   ```bash
   !pip uninstall unsloth -y
   # WARNING: Skipping unsloth as it is not installed.
   !pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
   # RESTART SESSION する
   !pip install --upgrade torch
   !pip install --upgrade xformers
   !pip install ipywidgets --upgrade
   ```
   ```python
   # Install Flash Attention 2 for softcapping support
   import torch
   if torch.cuda.get_device_capability()[0] >= 8:
       !pip install --no-deps packaging ninja einops "flash-attn>=2.6.3"
   ```

2. Hugging Faceのトークンを取得していることを確認してください。以下はGoogle Colabでuserdataを使う例です(実行環境に合わせて適宜変更してください)。

   ```python
   from google.colab import userdata
   HF_TOKEN = userdata.get('HF_TOKEN')
   ```

## モデル・トークナイザの読み込み

```python
# llm-jp/llm-jp-3-13bを4bit量子化のqLoRA設定でロード。

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from unsloth import FastLanguageModel
import torch
max_seq_length = 512 # unslothではRoPEをサポートしているのでコンテキスト長は自由に設定可能
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は8Bクラスのモデルを扱うためTrue

model_id = "togakyo/llm-jp-3-13b-it"
# FastLanguageModel インスタンスを作成
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_id,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
    trust_remote_code=True,
)

```
読み込みに10分程度かかります。

## 入力データの準備

`./elyza-tasks-100-TV_0.jsonl`というファイルからデータセットをロードします。

```python
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 = ""
```

## 推論実行

```python
from tqdm import tqdm

# 推論するためにモデルのモードを変更
FastLanguageModel.for_inference(model)

results = []
for dt in tqdm(datasets):
  input = dt["input"]

  prompt = f"""### 指示\n{input}\n### 回答\n"""

  inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)

  outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2)
  prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]

  results.append({"task_id": dt["task_id"], "input": input, "output": prediction})

```

## 出力の保存

最後に、model_idをベースにしたファイル名でJSONL形式の出力ファイルを保存します。

```python
import re
# 結果をjsonlで保存
jsonl_id = re.sub(".*/", "", model_id)
with open(f"{jsonl_id}_output.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')

```

以上の手順で、{model_id}-outputs.jsonlというファイルに推論結果が書き出されます。