Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
license: apache-2.0
|
3 |
+
datasets:
|
4 |
+
- werty1248/Korean-1930-Novel-Scene-Summarize
|
5 |
+
language:
|
6 |
+
- ko
|
7 |
+
pipeline_tag: text-generation
|
8 |
+
---
|
9 |
+
|
10 |
+
## Model Card
|
11 |
+
|
12 |
+
- ์์ฝ ์๋๋ฆฌ์ค ๊ธฐ๋ฐ ์์ค ์์ฑ ๋ชจ๋ธ
|
13 |
+
- [werty1248/Korean-1930-Novel-Scene-Summarize](https://huggingface.co/datasets/werty1248/Korean-1930-Novel-Scene-Summarize) ์์
์ ํจ๊ณผ ํ์ธ์ฉ ๋ชจ๋ธ์
๋๋ค.
|
14 |
+
|
15 |
+
## Training Details
|
16 |
+
|
17 |
+
### Dataset
|
18 |
+
|
19 |
+
- [werty1248/Korean-1930-Novel-Scene-Summarize](https://huggingface.co/datasets/werty1248/Korean-1930-Novel-Scene-Summarize)
|
20 |
+
- ์ ์๊ถ์ด ๋ง๋ฃ๋ 20์ธ๊ธฐ ์ด ํ๊ตญ ๊ทผ๋๋ฌธํ 97ํธ
|
21 |
+
|
22 |
+
### Preprocessing
|
23 |
+
|
24 |
+
- system prompt์ ํจ๊ป ์์ค์ ์ฒซ ๋ฌธ๋จ์ ์ ๊ณต
|
25 |
+
- ์ดํ user๊ฐ ์๋๋ฆฌ์ค(50%) ๋๋ ์ด๋ฒคํธ(50%)๋ฅผ ์ ๊ณตํ๋ฉด assistant๊ฐ ๋ต๋ณ์ ์์ฑ
|
26 |
+
- 3-shot multi-turn ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ์ฌ ํ์ต
|
27 |
+
|
28 |
+
- ํ๋กฌํํธ ์์๋ ์๋์ ์์ต๋๋ค.
|
29 |
+
|
30 |
+
- Axolotl(full config๋ ์๋์ ์์ต๋๋ค)
|
31 |
+
- LoRA: (rank=32, alpha=128)
|
32 |
+
- NefTune_alpha: 5
|
33 |
+
- total_batch_size: 8
|
34 |
+
- num_epoch: 3
|
35 |
+
|
36 |
+
- 1xA100์์ ์ฝ 8์๊ฐ ํ์ต
|
37 |
+
|
38 |
+
## Template & How to use
|
39 |
+
|
40 |
+
- ์ ์ instruction์ ๋ฌด์ํ๋ ๊ฒฝํฅ ์์
|
41 |
+
- ํ์/์์ด ๋จ์ด๊ฐ ์์ด๋ ํ์ ์ํ๋จ
|
42 |
+
- ํ๊ตญ์ด ๋ฅ๋ ฅ์ด ๋ ๋จ์ด์ง ๊ฒ ๊ฐ์
|
43 |
+
|
44 |
+
### Input(๋๋ฌผ์ ๋ง์๋ ์ ๋์
๋ถ)
|
45 |
+
|
46 |
+
```
|
47 |
+
import torch
|
48 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
|
49 |
+
|
50 |
+
tokenizer = AutoTokenizer.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft")
|
51 |
+
model = AutoModelForCausalLM.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft", torch_dtype=torch.bfloat16).to('cuda')
|
52 |
+
|
53 |
+
system_prompt = """๋น์ ์ ์์ค ์์ฑ ์ด์์คํดํธ์
๋๋ค. ๋น์ ์ ์๋ฌด๋ ์ ์ ์ ๊ฐ์ด๋์ ๋ฐ๋ผ 1900~1940๋
๋ ๊ทผ๋ ํ๊ตญ ์์ค์ ์์ฑํ๋ ๊ฒ์
๋๋ค.
|
54 |
+
- ์ฃผ์ด์ง ์๋๋ฆฌ์ค ์์ฝ์ ํ์ธํ๊ณ , ์ด์ ๋ํ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ๋กฏ์ ๊ตฌ์ฑํ์ญ์์ค.
|
55 |
+
- ํ๋ถํ ํ๊ตญ์ด ํํ ๋ฐ ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐฝ์์ ์ผ๋ก ์งง์ ์ฌ์ ์์ฑํ์ธ์.
|
56 |
+
- ์ฌ์ ๋์ฌ์ ๊ทผ๋ ํ๊ตญ ํน์ ์ ํํ, ์ดํ, ์ฌํฌ๋ฆฌ, ์กด๋๋ง๊ณผ ๋ฐ๋ง์ ๋ฐ์ํ์ญ์์ค.
|
57 |
+
- ์ฌ์ ์ฃผ์ ์ฌ๊ฑด์ ๊ทผ๋ ํ๊ตญ์ ์ญ์ฌ์ , ๊ธฐ์ ์ ํน์ฑ์ ๋ฐ์ํ์ญ์์ค.
|
58 |
+
- ์ฌ์ 5~10๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑํ์ธ์.
|
59 |
+
"""
|
60 |
+
|
61 |
+
first_message = """### ์ฒซ ๋ฌธ๋จ
|
62 |
+
ํ๋์ ๋ถ์ฌ๋ฅด๋ ์ฉ์ ๋
ธ์ฌ์๋ ์ํ์ง๊ณ
|
63 |
+
์์๋ค์ ์๋น๋ ์ฌํ ์์ ๋ฌปํ๋ฒ๋ฆฐ
|
64 |
+
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๊ฒ๋ค์ ๋๊ตฌ๋ ์ ๊ฒฝ์ฐ์ง ์๋
|
65 |
+
์์กด์ด ์ฒ๋ฐํ ๋๋ด์ด ๋ ์๋์
|
66 |
+
|
67 |
+
ํ ๋จ์๊ฐ ์ฌ๋ง์ ๊ฑท๊ณ ์์๋ค.
|
68 |
+
"""
|
69 |
+
|
70 |
+
scenario = """### ๋ฑ์ฅ์ธ๋ฌผ
|
71 |
+
์ฌ๊ด ์ฃผ์ธ, ์ผ์ด๊ฑด ๋๋ผ์นด
|
72 |
+
|
73 |
+
### ์๋๋ฆฌ์ค
|
74 |
+
์ฌ๊ด ์ฃผ์ธ์ด ๋ฌธ๋ ์ฐฝ๋ฐ์ ๋ฐ๋ผ๋ณธ๋ค. ์ฌ๊ด ์ฃผ๋ณ์ ์จํต ์ฌ๋ง์ด๋ค. ์งํ์ ์ ๋ฉ๋ฆฌ์ ํ ์ฌ๋ด๊ฐ ํผ์ง๋งํ ์๋ฃจ๋ฅผ ์ง์ง ๋๋ฉด์ ์ฌ๊ด ๋ฐฉํฅ์ผ๋ก ๊ฑธ์ด์จ๋ค.
|
75 |
+
"""
|
76 |
+
messages = [{'role':'system', 'content':system_prompt + first_message},
|
77 |
+
{'role':'user', 'content':scenario},]
|
78 |
+
|
79 |
+
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=512)
|
80 |
+
|
81 |
+
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
82 |
+
outputs = pipe(
|
83 |
+
prompt,
|
84 |
+
do_sample=True,
|
85 |
+
temperature=0.8,
|
86 |
+
top_k=50,
|
87 |
+
top_p=0.95,
|
88 |
+
add_special_tokens=True
|
89 |
+
)
|
90 |
+
print(outputs[0]["generated_text"][len(prompt):])
|
91 |
+
```
|
92 |
+
|
93 |
+
### Result
|
94 |
+
```
|
95 |
+
ํ๋์ ๊นจ๋ํ์๋ค. ๋ฐ๋๋ ์์ด์ง ์์๋ค. ๋ฐ์ ์์ ๊ตด๋ฌ์ ธ ์๋ ํฌ์น์ด ํ ๋ฉ๋งํ๊ณ ํธ๋ฅธ ํ๋น ์๋ ์ ๋ณด์๋ค.
|
96 |
+
|
97 |
+
๊ฑฐ๊ธฐ๋ ๋ง์นจ ํ ์ฑ์ ์ฌ๊ด์ด ์ง์ฒด๋ก ๊ฝํ ์์๋ค. ์ข์ฐ ๋ฉ๋ฆฌ ๋ฐ์๊ฐ ์ฐ์ ๋ฟ์ด๋ค. ๋๋ฌด๋ ์๋ชฉ๋ ์๋ ์จ ์ฒ์ง๊ฐ ํคํ ์ฌ๊ด ์์ ์์์ธ๊ณ ์๋ ๊ฒ์ด๋ค. ์ผ๋ฅธ ๋ณด๋ฉด ํ ์กฐ๊ฐ ์์ถ ์ ๊ฐ๊ธฐ๋ ํ์ง๋ง ๊ฑด์ถ์ด๋ผ๋๋ ๋ณด๋ค๋ ๋ํ์ ๋
์ ๋ด์ด๋๊ณ ๋จ์ํ ๊ฐํ ํ๋๋ฅผ ๊ฑธ์ด์ ๊ทธ๋๋ก ๋ฒ์ดํ๋ โ์ฌ๊ดโ์ด๋ค. ๋ช๋ช ์ข์ ๊ธธ๋ง ๋ค์ด์๋ค๊ฐ ์ฌ๋ผ์ก์ ๋ฟ ํ ๊ธธ๋ ์ ๋ซ๋ ค์ง ๊ทธ ์๋ฆฌ์ ๊ทธ๋๋ก ์งํฑ๋์ด ์๋ ์ฌ๊ด์ด๋ค. ๊ธธ์ ๋ํ๋๋ ์ฌ๋์ ์๋ค. ์ข์ฐ๋ก ๋ฐ์๋ฅผ ๋ผ๊ณ ๋ ๋น์ด ์๋ ์ฐ ์ค์์ ๊ฐ๊ฐ์ด ๊ณ ๊ธฐ ๊ตฝ๋ ๋ฅ์ด์ ์ฏ๋ฐ๊ตฌ๋๋ฉฐ ๊ณ ๊น๊ฐ๋ง๋ฅผ ๊ฑธ๊ณ ํ์ธ๋ง ๋ช ๋ง๋ฆฌ์ฉ ์ง๋๊ฐ๊ณ ํคํ๊ฒ ์ ๋ฐ๋ฅ์ ํ๋น๋ง ๋น์น๊ณ ํ๋ ์ธ์ธํ ์ฌ๊ด์ด๋ค. ๊ทธ๊ฒ์ด ๋ฃธ_service๋ผ๋ ์ธ๊ณ์๋ ๋ฌ๋ฆฌ ์ฃผ์ธ๋ ์๊ณ ์ฌ์ฅ๋ ์๊ณ ์๋ ์๊ณ ํ ๊ฐํ๋ง ๊ฑธ๊ณ ์ฒ๋น์ฒ๋ผ ์ธ๋กญ๊ฒ ์งํค๊ณ ์๋ ๋ชจ์์ด๋ค.
|
98 |
+
|
99 |
+
๊ทธ๋ฐ ์ฌ๊ด์์ ์ด์ฝ๊ณ ์์ด ํ ์ฌ๋ ๋ํ๋ฌ๋ค. ์ฐฝ๋ฌธ์ด ์ด๋ ธ๋ค. ๋ฐ์ ๋ด๋ค๋ณด๋ ํ ์ ์ ๊ฒ์ ๊ทธ๋ฆผ์๊ฐ ์ฐฝ ์์์ ๋๋๋ด ์ค๋ฏ๋ฌ์ง๋ค. ๊ทธ๋ฌ๋๋ ๋ค์ ํ์ฐธ ํ์ ๊ทธ ๊ฒ์ ๊ทธ๋ฆผ์๋ ์๋ชฉ์ผ๋ก ์ฐจ์ฐจ ๋์ ๊ฐ์ง๊ณ ๋ ๊ทธ๋๋ก ์ฌ๋ผ์ง๋ ๊ฒ์ด๋ค.
|
100 |
+
|
101 |
+
๊ทธ๋ก๋ถํฐ ์ฌ๊ด์ ์๋ก์ด ์ผ์ ๋นํ์๋ค. ๋ฐ์๋ฆฌ์ค ์๋ฃจ๋ฅผ ๋ค๊ณ ํ ์ฌ๋์ด๊ฐ ๊ฑธ์ด ๋ค์ด์ค์ง ์์๋๊ฐ. ์ผ๊ตด์ ๋จผ๋น์ผ๋ก ๋๋ํ ๋ชป ๋ณด์ด๋ ๋ฒ์จ ์ฌ๋ฉด ์ฌ์ค ๊ฐ๋ฐ์ ์ ๋๋ ๊ณณ์ ํผ์ง๏ฟฝ๏ฟฝ ์๋ฃจ๋ฅผ
|
102 |
+
```
|
103 |
+
|
104 |
+
### Result of Original model(Qwen/Qwen2-7b-instruct)
|
105 |
+
|
106 |
+
```
|
107 |
+
"๊ทธ๊ฒ ๋๊ตฌ๋? ์ ์ด๋ ๊ฒ ๋จผ ๊ณณ์์ ์ด๊ณณ์ผ๋ก ์?" ์ฌ๊ด ์ฃผ์ธ์ด ๋ฌผ์ด๋ณด๋ฉฐ ์ฐฝ๋ฌธ์ ๋ฒ๋ฆฌ๊ณ ๋งํ๋ค. ๊ทธ๋
์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๊ฑด์กฐํจ๊ณผ ํจ๊ป ๊ฑฐ์น ๋ฐ๋์ ๊ฐ๋ผ์์๋ค.
|
108 |
+
|
109 |
+
์ผ์ด๊ฑด ๋๋ผ์นด๋ผ๋ ์ฌ๋ด๋ ์์ ์ ์๋ฃจ๋ฅผ ๋ ์ง์ง ๋๋ฉฐ ์ฌ๊ด ์ชฝ์ผ๋ก ๋ค๊ฐ๊ฐ๋ค. ๊ทธ์ ๋์๋ ํฌ๋ฏธํ๊ฒ ๋ณด์ด๋ ๋จผ์ง์ ๋จผ์ง๊ฐ ๊ฐ์ธ๊ณ ์๋ ํ๋น์ด ๋น๋๋ ๋ฏํ๋ค. ๊ทธ์ ์ผ๊ตด์๋ ๋๋ฐฉ์ธ์ด ๊ตด๋ฌ ๋ด๋ ค๊ฐ๋ฉฐ, ๊ทธ์ ์
์ ๋งํ ์ค๋น๋ฅผ ํ๊ณ ์์๋ค.
|
110 |
+
|
111 |
+
"์ฌ๊ด ์ฃผ์ธ๋, ์ ๋ฅผ ๋ฐ์์ฃผ์ค ์ ์์๊น์? ์ ๊ฐ ์ด๊ณณ์์ ์ ์ ์ฌ๊ณ ์ถ์ต๋๋ค." ๊ทธ์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๋ฌด๋ํ ์กฐ์ฉํจ์ ๊นจ์ฐ๋ฉฐ ์ ํด์ก๋ค.
|
112 |
+
|
113 |
+
์ฌ๊ด ์ฃผ์ธ์ ๊ทธ์ ์ฒด์ก๋ณต๊ณผ ๋ๆฑๆฑํ ๋ชจ์ต์ ๋ณด๋ฉฐ, ์ด ์ฌ๋ด์ ์ํฉ์ ๋ํด ๊ฑฑ์ ์ค๋ฌ์ ๋ค. "๊ทธ๋, ๋ค๊ฐ ํ์ํ๋ค๊ณ ๋๊ผ๋ค๋ฉด, ์ฌ๊ธฐ์ ์ฌ์ด๋ผ. ํ์ง๋ง ์ ์ด๋ฐ ๊ณณ๊น์ง ์๋์ง ์ค๋ช
ํด ์ค์ผ ํ ๊ฒ ๊ฐ์." ๊ทธ๋
์ ๋งํฌ๋ ์น๊ทผํ๋ฉด์๋ ๋ถ๋ช
ํ ์ง์์๋ค.
|
114 |
+
```
|
115 |
+
|
116 |
+
## Others
|
117 |
+
|
118 |
+
### Axolotl config
|
119 |
+
|
120 |
+
```
|
121 |
+
base_model: Qwen/Qwen2-7B-Instruct
|
122 |
+
trust_remote_code: true
|
123 |
+
|
124 |
+
load_in_8bit: false
|
125 |
+
load_in_4bit: false
|
126 |
+
strict: false
|
127 |
+
|
128 |
+
datasets:
|
129 |
+
- path: train_data.jsonl
|
130 |
+
type: sharegpt
|
131 |
+
dataset_prepared_path:
|
132 |
+
val_set_size: 0.05
|
133 |
+
output_dir: ./outputs/out
|
134 |
+
|
135 |
+
sequence_len: 4096
|
136 |
+
sample_packing: true
|
137 |
+
eval_sample_packing: true
|
138 |
+
pad_to_sequence_len: true
|
139 |
+
|
140 |
+
adapter: lora
|
141 |
+
lora_model_dir:
|
142 |
+
lora_r: 32
|
143 |
+
lora_alpha: 128
|
144 |
+
lora_dropout: 0.05
|
145 |
+
lora_target_linear: true
|
146 |
+
lora_fan_in_fan_out:
|
147 |
+
|
148 |
+
wandb_project:
|
149 |
+
wandb_entity:
|
150 |
+
wandb_watch:
|
151 |
+
wandb_name:
|
152 |
+
wandb_log_model:
|
153 |
+
|
154 |
+
neftune_noise_alpha: 5
|
155 |
+
gradient_accumulation_steps: 4
|
156 |
+
micro_batch_size: 2
|
157 |
+
num_epochs: 3
|
158 |
+
optimizer: adamw_torch
|
159 |
+
lr_scheduler: cosine
|
160 |
+
learning_rate: 0.0002
|
161 |
+
|
162 |
+
train_on_inputs: false
|
163 |
+
group_by_length: false
|
164 |
+
bf16: auto
|
165 |
+
fp16:
|
166 |
+
tf32: false
|
167 |
+
|
168 |
+
gradient_checkpointing: true
|
169 |
+
gradient_checkpointing_kwargs:
|
170 |
+
use_reentrant: false
|
171 |
+
early_stopping_patience:
|
172 |
+
resume_from_checkpoint:
|
173 |
+
local_rank:
|
174 |
+
logging_steps: 1
|
175 |
+
xformers_attention:
|
176 |
+
flash_attention: true
|
177 |
+
|
178 |
+
warmup_steps: 10
|
179 |
+
evals_per_epoch: 4
|
180 |
+
saves_per_epoch: 1
|
181 |
+
debug:
|
182 |
+
deepspeed:
|
183 |
+
weight_decay: 0.0
|
184 |
+
fsdp:
|
185 |
+
special_tokens:
|
186 |
+
```
|