|
--- |
|
language: ko |
|
license: apache-2.0 |
|
base_model: unsloth/Llama-3.2-3B-Instruct |
|
tags: |
|
- financial |
|
- credit-rating |
|
- korean |
|
- llama |
|
- unsloth |
|
- fine-tuned |
|
model_name: FinCreditLlama-3.2-3B |
|
pipeline_tag: text-generation |
|
--- |
|
|
|
# FinCreditLlama-3.2-3B |
|
|
|
## ๋ชจ๋ธ ๊ฐ์ |
|
FinCreditLlama-3.2-3B๋ ๊ธ์ต ์ ์ฉ ํ๊ฐ๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋ ํ๊ตญ์ด ์ธ์ด ๋ชจ๋ธ์
๋๋ค. |
|
|
|
**๋ฒ ์ด์ค ๋ชจ๋ธ**: unsloth/Llama-3.2-3B-Instruct |
|
**๋ฐ์ดํฐ์
**: himedia/financial_dummy_data_v4 |
|
**ํ์ต ๋ฐฉ๋ฒ**: LoRA (Low-Rank Adaptation) - **๋ณํฉ๋ ์ ์ฒด ๋ชจ๋ธ** |
|
**ํ์ต ์ผ์**: 20250702_181705 |
|
|
|
## ๐ ํ์ต ๊ฒฐ๊ณผ |
|
- **Final Training Loss**: 0.8515 |
|
- **Final Validation Loss**: 0.7593 |
|
- **Best Validation Loss**: 0.7593 (step 10) |
|
- **Overall Improvement**: 62.7% |
|
- **Training Time**: 0.64 minutes |
|
|
|
## ํ์ดํผํ๋ผ๋ฏธํฐ |
|
- **Learning Rate**: 0.0002 |
|
- **Max Steps**: 10 |
|
- **Batch Size**: 2 |
|
- **Gradient Accumulation**: 8 |
|
- **LoRA r**: 64 |
|
- **LoRA alpha**: 64 |
|
- **Max Sequence Length**: 2048 |
|
- **Warmup Steps**: 5 |
|
|
|
## ๐ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ |
|
- **GPU**: NVIDIA A100-SXM4-40GB |
|
- **Peak Memory**: 6.674 GB |
|
- **Memory Usage**: 16.9% |
|
|
|
## ์ฌ์ฉ ๋ฐฉ๋ฒ |
|
|
|
### ์ผ๋ฐ์ ์ธ ์ฌ์ฉ (Transformers) |
|
```python |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
# ๋ชจ๋ธ๊ณผ ํ ํฌ๋์ด์ ๋ก๋ |
|
tokenizer = AutoTokenizer.from_pretrained("himedia/fincredit-lamma-3.2-3b-lr2e04-bs16-r64-steps10-20250702_181705") |
|
model = AutoModelForCausalLM.from_pretrained("himedia/fincredit-lamma-3.2-3b-lr2e04-bs16-r64-steps10-20250702_181705") |
|
|
|
# ๊ฐ๋จํ ์ถ๋ก ์์ |
|
prompt = "๊ณ ๊ฐ์ ์ ์ฉ๋ฑ๊ธ์ ํ๊ฐํด์ฃผ์ธ์:" |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
outputs = model.generate(**inputs, max_length=200) |
|
result = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
print(result) |
|
``` |
|
|
|
### vLLM ์ฌ์ฉ (๊ณ ์ฑ๋ฅ ์ถ๋ก ) |
|
```python |
|
from vllm import LLM, SamplingParams |
|
|
|
# vLLM ๋ก๋ (๋ณํฉ๋ ๋ชจ๋ธ์ด๋ฏ๋ก ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ) |
|
llm = LLM( |
|
model="himedia/fincredit-lamma-3.2-3b-lr2e04-bs16-r64-steps10-20250702_181705", |
|
max_model_len=2048, |
|
gpu_memory_utilization=0.85 |
|
) |
|
|
|
# ์ํ๋ง ํ๋ผ๋ฏธํฐ ์ค์ |
|
sampling_params = SamplingParams( |
|
temperature=0.7, |
|
top_p=0.9, |
|
max_tokens=200 |
|
) |
|
|
|
# ์ถ๋ก |
|
prompts = ["๊ณ ๊ฐ์ ์ ์ฉ๋ฑ๊ธ์ ํ๊ฐํด์ฃผ์ธ์:"] |
|
outputs = llm.generate(prompts, sampling_params) |
|
|
|
for output in outputs: |
|
prompt = output.prompt |
|
generated_text = output.outputs[0].text |
|
print(f"Prompt: {prompt!r}") |
|
print(f"Generated text: {generated_text!r}") |
|
``` |
|
|
|
### Unsloth ํ
์คํธ ํ๊ฒฝ์์ ์ฌ์ฉ |
|
```python |
|
from unsloth import FastLanguageModel |
|
|
|
# ์๋ณธ LoRA ์ด๋ํฐ๋ก ํ
์คํธ |
|
model, tokenizer = FastLanguageModel.from_pretrained( |
|
model_name = "himedia/fincredit-Llama-3.2-3B-lr2e04-bs16-r64-steps1000-20250623_060351", # LoRA ์ด๋ํฐ |
|
max_seq_length = 2048, |
|
dtype = None, |
|
load_in_4bit = True, |
|
) |
|
``` |
|
|
|
## ๐ ํ์ต ๋ฐ์ดํฐ ํ์ผ |
|
์ด ๋ ํฌ์งํ ๋ฆฌ์๋ ๋ค์ ํ์ต ๊ด๋ จ ํ์ผ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค: |
|
- `training_log.json`: ์ ์ฒด ํ์ต ๋ก๊ทธ (JSON ํ์) |
|
- `FinCreditLlama-3.2-3B_20250702_181705_training_curves.png`: ํ์ต ๊ณก์ ์๊ฐํ ์ด๋ฏธ์ง |
|
|
|
## ๋ ํฌ์งํ ๋ฆฌ๋ช
๊ตฌ์ฑ |
|
``` |
|
fincredit-lamma-3.2-3b-lr2e04-bs16-r64-steps10-20250702_181705 = fincredit-lamma3-4b-lr2e04-bs2-r64-steps10-20250702_181705 |
|
``` |
|
- `fincredit-lamma3-4b`: ๋ชจ๋ธ ๊ธฐ๋ณธ๋ช
|
|
- `lr2e04`: Learning Rate |
|
- `bs2`: Batch Size |
|
- `r64`: LoRA rank |
|
- `steps10`: ํ์ต ์คํ
|
|
- `20250702_181705`: ํ์ต ์๊ฐ |
|
|
|
## ๋ฐฐํฌ ์ ๋ณด |
|
- **๋ชจ๋ธ ํ์
**: ๋ณํฉ๋ ์ ์ฒด ๋ชจ๋ธ (LoRA ์ด๋ํฐ๊ฐ ๋ฒ ์ด์ค ๋ชจ๋ธ์ ๋ณํฉ๋จ) |
|
- **vLLM ํธํ**: โ
์์ ํธํ |
|
- **RunPod ๋ฐฐํฌ**: โ
์ง์ |
|
- **์๋ณธ LoRA ์ด๋ํฐ**: `himedia/fincredit-Llama-3.2-3B-lr2e04-bs16-r64-steps1000-20250623_060351` |
|
|
|
## ์ฑ๋ฅ |
|
์ด ๋ชจ๋ธ์ ํ๊ตญ์ด ๊ธ์ต ํ
์คํธ์ ๋ํด ํ์ธํ๋๋์ด ์ ์ฉ ํ๊ฐ ๊ด๋ จ ์ง์์๋ต์ ํนํ๋์ด ์์ต๋๋ค. |
|
|
|
## ๋ผ์ด์ ์ค |
|
Apache 2.0 |
|
|