File size: 3,118 Bytes
60597a0
 
 
528b65c
 
 
 
 
 
 
 
 
 
60597a0
 
528b65c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
base_model: Qwen/Qwen3-8B
library_name: peft
language:
- ko
- en
license: apache-2.0
tags:
- korean
- qwen3
- lora
- finetuned
- deepspeed
---

# Qwen3-8B Korean Finetuned Model

์ด ๋ชจ๋ธ์€ Qwen3-8B๋ฅผ ํ•œ๊ตญ์–ด ๋ฐ์ดํ„ฐ๋กœ ํŒŒ์ธํŠœ๋‹ํ•œ LoRA ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

## ๋ชจ๋ธ ์ƒ์„ธ ์ •๋ณด

- **๊ธฐ๋ณธ ๋ชจ๋ธ**: Qwen/Qwen3-8B
- **ํŒŒ์ธํŠœ๋‹ ๋ฐฉ๋ฒ•**: LoRA (Low-Rank Adaptation)
- **ํ›ˆ๋ จ ํ”„๋ ˆ์ž„์›Œํฌ**: DeepSpeed ZeRO-2 + Transformers
- **์–ธ์–ด**: ํ•œ๊ตญ์–ด, ์˜์–ด
- **๊ฐœ๋ฐœ์ž**: supermon2018

## ํ›ˆ๋ จ ๊ตฌ์„ฑ

### LoRA ์„ค์ •
- **Rank (r)**: 4
- **Alpha**: 8
- **Dropout**: 0.05
- **Target Modules**: qkv_proj, o_proj, gate_proj, up_proj, down_proj

### ํ›ˆ๋ จ ํŒŒ๋ผ๋ฏธํ„ฐ
- **Epochs**: 2
- **Batch Size**: 2 per device
- **Gradient Accumulation**: 8 steps
- **Learning Rate**: 2e-4
- **Precision**: BF16
- **Optimizer**: AdamW

### ํ•˜๋“œ์›จ์–ด
- **GPU**: 3x RTX 4090 (24GB each)
- **๋ถ„์‚ฐ ํ›ˆ๋ จ**: DeepSpeed ZeRO-2
- **๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”**: Gradient Checkpointing

## ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

### ์˜์กด์„ฑ ์„ค์น˜
```bash
pip install torch transformers peft
```

### ๋ชจ๋ธ ๋กœ๋“œ ๋ฐ ์‚ฌ์šฉ
```python
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# ๊ธฐ๋ณธ ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ
base_model_name = "Qwen/Qwen3-8B"
model = AutoModelForCausalLM.from_pretrained(
    base_model_name,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(base_model_name)

# LoRA ์–ด๋Œ‘ํ„ฐ ๋กœ๋“œ
model = PeftModel.from_pretrained(
    model, 
    "supermon2018/qwen3-8b-korean-finetuned"
)

# ์ถ”๋ก 
def generate_response(prompt, max_length=512):
    inputs = tokenizer(prompt, return_tensors="pt")
    
    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_length=max_length,
            temperature=0.7,
            do_sample=True,
            pad_token_id=tokenizer.eos_token_id
        )
    
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response[len(prompt):].strip()

# ์‚ฌ์šฉ ์˜ˆ์‹œ
prompt = "์•ˆ๋…•ํ•˜์„ธ์š”. ํ•œ๊ตญ์–ด๋กœ ๋Œ€ํ™”ํ•ด ์ฃผ์„ธ์š”."
response = generate_response(prompt)
print(response)
```

## ์„ฑ๋Šฅ ๋ฐ ํŠน์ง•

- **๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ**: LoRA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 16MB ํฌ๊ธฐ์˜ ๊ฐ€๋ฒผ์šด ์–ด๋Œ‘ํ„ฐ
- **๋‹ค๊ตญ์–ด ์ง€์›**: ํ•œ๊ตญ์–ด์™€ ์˜์–ด ๋ชจ๋‘ ์ง€์›
- **๋น ๋ฅธ ์ถ”๋ก **: ๊ธฐ๋ณธ ๋ชจ๋ธ์— ์–ด๋Œ‘ํ„ฐ๋งŒ ์ถ”๊ฐ€ํ•˜์—ฌ ๋น ๋ฅธ ๋กœ๋”ฉ

## ์ œํ•œ์‚ฌํ•ญ

- ์ด ๋ชจ๋ธ์€ LoRA ์–ด๋Œ‘ํ„ฐ์ด๋ฏ€๋กœ ๊ธฐ๋ณธ Qwen3-8B ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
- ํŠน์ • ๋„๋ฉ”์ธ์ด๋‚˜ ํƒœ์Šคํฌ์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ํŒŒ์ธํŠœ๋‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

## ๋ผ์ด์„ ์Šค

Apache 2.0 ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

## ์ธ์šฉ

์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์šฉํ•ด ์ฃผ์„ธ์š”:

```bibtex
@misc{qwen3-korean-finetuned,
  author = {supermon2018},
  title = {Qwen3-8B Korean Finetuned Model},
  year = {2024},
  publisher = {Hugging Face},
  url = {https://huggingface.co/supermon2018/qwen3-8b-korean-finetuned}
}
```

## ๋ฌธ์˜์‚ฌํ•ญ

๋ชจ๋ธ ์‚ฌ์šฉ ์ค‘ ๋ฌธ์˜์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.