|
|
--- |
|
|
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} |
|
|
} |
|
|
``` |
|
|
|
|
|
## ๋ฌธ์์ฌํญ |
|
|
|
|
|
๋ชจ๋ธ ์ฌ์ฉ ์ค ๋ฌธ์์ฌํญ์ด ์์ผ์๋ฉด ์ด์๋ฅผ ๋จ๊ฒจ์ฃผ์ธ์. |