File size: 2,847 Bytes
082b308
 
e70fdf8
9928e37
00114dc
082b308
312859c
e70fdf8
91c518c
082b308
c5eb426
 
 
 
 
 
67aa07d
 
acb6f01
67aa07d
e42ab22
082b308
d9feb71
e8943cb
e42ab22
082b308
b21390e
768a72e
f530276
 
054b9f8
e42ab22
082b308
b409a85
15cb908
63570d8
 
 
 
4ea3d5d
60d56f3
e42ab22
 
082b308
e42ab22
7aaa4fe
e42ab22
 
082b308
e42ab22
 
 
ee7271f
7aaa4fe
ee7271f
 
7aaa4fe
ee7271f
 
 
 
 
 
 
 
 
 
 
 
 
 
7aaa4fe
ee7271f
 
 
e70fdf8
 
0d37439
 
 
 
 
e70fdf8
 
9928e37
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
---
library_name: transformers
datasets:
- fukugawa/kamakura-tasks-100
license: gemma
---
## Overview

このモデルは、「[gemma-2-9b](https://huggingface.co/google/gemma-2-9b)」に対して、データセット「[kamakura-tasks-100](https://huggingface.co/datasets/fukugawa/kamakura-tasks-100)」の100件を用いてファインチューニングを実施し、指示応答できるようにしました。

## Demo

このモデルを使ったChatbotのデモをspaces上に公開しています。

* [Chatbotデモ](https://huggingface.co/spaces/fukugawa/gemma-2-9b-finetuned)

## Blog Post

* [自作データセットによるGemma2-9Bのファインチューニング](https://matsuolab-geniac.notion.site/Gemma2-9B-fukugawa-d2c52f881d324c6fbc37febe3d30d0c0)

## Usage

以下は、ELYZA-tasks-100-TV(100問)の回答を生成する推論コードです。

#### Requirements:

```bash
# python 3.10
pip install -U transformers
pip install -U accelerate
pip install -U peft
```

「[gemma-2-9b](https://huggingface.co/google/gemma-2-9b)」を利用するには、HFにログインし、利用規約に同意する必要があります。以下のコマンドでログインしてください(Notebookではfrom_pretrained()のtoken引数でも可)。

```bash
huggingface-cli login
```

#### Inference:

~~~~python
import json

import torch
from datasets import Dataset
from tqdm import tqdm
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "fukugawa/gemma-2-9b-finetuned"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.bfloat16)

datasets = Dataset.from_json("./elyza-tasks-100-TV_0.jsonl")

results = []
for data in tqdm(datasets):
  input = data["input"]
  prompt = f"### 指示\n{input}\n### 回答\n"
  tokenized_input = tokenizer.encode(prompt, return_tensors="pt").to(model.device)

  with torch.no_grad():
      outputs = model.generate(
          tokenized_input,
          max_new_tokens=512,
          do_sample=False,
      )[0]
    
  output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
  results.append({"task_id": data["task_id"], "input": input, "output": output})

with open("./outputs.jsonl", 'w', encoding='utf-8') as f:
    for result in results:
        json.dump(result, f, ensure_ascii=False)
        f.write('\n')
~~~~

ELYZAタスクTVのJSONLファイル(elyza-tasks-100-TV_0.jsonl)が必要です。
推論時に18〜19GBのGPUメモリが必要になります。Nvidia L4 24GBメモリで動作確認しています。
100問の推論時間は約15〜20分程です。
カレントディレクトリにoutputs.jsonlが出力されます。

## Dataset

* [kamakura-tasks-100](https://huggingface.co/datasets/fukugawa/kamakura-tasks-100)