File size: 3,478 Bytes
706304d
614996e
706304d
 
11e2e46
706304d
11e2e46
 
 
 
 
 
 
 
bf77b45
11e2e46
 
 
 
 
 
 
 
 
 
 
bf77b45
11e2e46
 
bf77b45
11e2e46
bf77b45
11e2e46
 
 
 
 
 
 
bf77b45
11e2e46
 
bf77b45
11e2e46
 
 
 
 
 
 
 
 
 
 
f5ffd8f
11e2e46
f5ffd8f
11e2e46
1301820
 
614996e
 
 
 
 
 
 
 
 
 
 
0f9d579
11e2e46
0f9d579
614996e
11e2e46
f1ea8fd
 
11e2e46
 
 
 
f5ffd8f
11e2e46
 
 
 
f5ffd8f
 
11e2e46
 
 
 
 
 
 
 
 
 
f5ffd8f
 
 
11e2e46
 
 
 
 
 
 
 
 
f851ee7
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
---
library_name: peft
---

# モデル概要 

[meta-llama/Llama-2-7b-hf](https://huggingface.co/meta-llama/Llama-2-7b-hf)を日本語データ([taka-yayoi/databricks-dolly-15k-ja](https://huggingface.co/datasets/taka-yayoi/databricks-dolly-15k-ja))を用いてインストラクションチューニングしました.

# 使用方法

```python
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

# モデルの読み込み
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_use_double_quant=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16
    ),
    device_map={"":0}
)

# トークナイザーの読み込み
tokenizer = AutoTokenizer.from_pretrained(
    "meta-llama/Llama-2-7b-hf"
)

# LoRAの読み込み
model = PeftModel.from_pretrained(
    model,
    "asaoka/Llama-2-7b-hf-qlora-dolly15k-japanese",
    device_map={"":0}
)
model.eval()

# プロンプトの準備
prompt = "### Instruction: 富士山とは?\n\n### Response: "

# 推論の実行
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```

使用方法は,[「Google Colab で Llama-2-7B のQLoRA ファインチューニングを試す」](https://note.com/npaka/n/na7c631175111#f2af0e53-4ef3-4288-b152-6524f1b940a7)を参照しました.

# トレーニング方法

- ファインチューニング:インストラクションチューニング + QLoRA(4bitLoRA)

- トークナイザー:[meta-llama/Llama-2-7b-hf](https://huggingface.co/meta-llama/Llama-2-7b-hf)のトークナイザーをそのまま使用
  
## Training procedure

The following `bitsandbytes` quantization config was used during training:
- quant_method: bitsandbytes
- load_in_8bit: False
- load_in_4bit: True
- llm_int8_threshold: 6.0
- llm_int8_skip_modules: None
- llm_int8_enable_fp32_cpu_offload: False
- llm_int8_has_fp16_weight: False
- bnb_4bit_quant_type: nf4
- bnb_4bit_use_double_quant: True
- bnb_4bit_compute_dtype: bfloat16

### Framework versions

- PEFT 0.5.0

トレーニング方法は,[「MetaのLlama 2をDatabricksでQLoRAを使ってファインチューニングしてみる」](https://qiita.com/taka_yayoi/items/a973fa2d08062224d422)を参照しました.

# JGLUEスコア

| タスク | Llama-2-7b-hf | This Model |
|:-|:-|:-|
| jcommonsenseqa-1.1-0.6(acc) | 0.7274 | 0.7060 |

[JGLUEスコア](https://aclanthology.org/2022.lrec-1.317/)は,Stability AI社の[lm-evaluation-harness](https://github.com/Stability-AI/lm-evaluation-harness)を用いて
算出しました.JGLUEスコアの算出に用いたスクリプトを下記に示します.

- Llama-2-7b-hf

```bash
!python main.py \
    --model hf-causal-experimental \
    --model_args pretrained=meta-llama/Llama-2-7b-hf \
    --tasks jcommonsenseqa-1.1-0.6 \
    --num_fewshot 3 \
    --device cuda \
    --output_path ./results.json
```

- This Model


```bash
!python main.py \
    --model hf-causal-experimental \
    --model_args pretrained=meta-llama/Llama-2-7b-hf,peft=asaoka/Llama-2-7b-hf-qlora-dolly15k-japanese \
    --tasks jcommonsenseqa-1.1-0.6 \
    --num_fewshot 3 \
    --device cuda \
    --output_path ./results.json
```