prismdata's picture
๋ชจ๋ธ ์นด๋“œ์— SFT ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(Perdix-SFT-Data) ๋งํฌ์™€ koalpaca ๋ผ์ด์„ ์Šค ์ฃผ์˜ ์ถ”๊ฐ€
4e66075 verified
|
Raw History Blame Contribute Delete
6.95 kB
---
license: apache-2.0
language:
- ko
- en
library_name: transformers
pipeline_tag: text-generation
base_model: prismdata/Perdix-1.1B-Base
tags:
- custom_code
- conversational
- instruct
- differential-attention
- polynorm
datasets:
- prismdata/Perdix-SFT-Data
- HuggingFaceTB/smoltalk
- nlpai-lab/kullm-v2
- heegyu/open-korean-instructions
---
# Perdix-1.1B-Instruct
[Perdix-1.1B-Base](https://huggingface.co/prismdata/Perdix-1.1B-Base)์— ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋กœ ์ง€์‹œ ๋ฏธ์„ธ์กฐ์ •(SFT)์„ ํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ๊ทธ๋ฆฌ์Šค ์‹ ํ™”์˜ ํŽ˜๋ฅด๋”•์Šค์—์„œ ๋”ฐ์™”์Šต๋‹ˆ๋‹ค. ๋‹ค์ด๋‹ฌ๋กœ์Šค์˜ ์–ด๋ฆฐ ์ œ์ž์˜€๊ณ  ํ†ฑ๊ณผ ์ปดํผ์Šค๋ฅผ ๋ฐœ๋ช…ํ–ˆ๋Š”๋ฐ, ํƒ‘์—์„œ ๋–จ์–ด์ง€๋‹ค ์ž๊ณ ์ƒˆ๊ฐ€ ๋˜๋Š” ๋ฐ”๋žŒ์— ๊ทธ ๋’ค๋กœ๋Š” ๋‚ฎ๊ฒŒ๋งŒ ๋‚ ์•„๋‹ค๋‹Œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ด ๋ชจ๋ธ ์ˆ˜์ค€์ด ๋”ฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
A 1.1B-parameter Korean/English chat model, supervised-finetuned from Perdix-1.1B-Base on about 390K conversations. It answers simple questions and follows short instructions in Korean and English; it is small and often wrong on facts and arithmetic.
## ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฌด์—‡์„ ๋ชป ํ•˜๋‚˜
์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ์งง์€ ์ง€์‹œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด์™€ ์˜์–ด ๋ชจ๋‘ ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์‹ค์ œ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค(temperature 0.7, top-k 50, top-p 0.9, repetition penalty 1.1).
> **๋Œ€ํ•œ๋ฏผ๊ตญ์˜ ์ˆ˜๋„๋Š” ์–ด๋””์ธ๊ฐ€์š”?**
> ๋Œ€ํ•œ๋ฏผ๊ตญ์˜ ์ˆ˜๋„๋Š” ์„œ์šธ์ž…๋‹ˆ๋‹ค.
> **๊น€์น˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋‘ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.**
> ๊น€์น˜๋Š” ํ•œ๊ตญ์˜ ์ „ํ†ต ๋ฐœํšจ ์‹ํ’ˆ์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ ˆ์ธ๋ฐฐ์ถ”์— ๋‹ค์–‘ํ•œ ์–‘๋…์„ ๋„ฃ๊ณ  ๋ฒ„๋ฌด๋ฆฐ ํ›„ ๊น€์น˜๋ฅผ ๋‹ด๊ฐ€ ๋จน๋Š” ์Œ์‹์ž…๋‹ˆ๋‹ค.
> **What is 7 times 8?**
> To find 7 times 8, we multiply 7 by 8.
> The answer is 56.
> **์•ˆ๋…•! ์˜ค๋Š˜ ๊ธฐ๋ถ„์ด ์–ด๋•Œ?**
> ๊ธฐ๋ถ„์ด ์ข‹์Šต๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?
๋ชป ํ•˜๋Š” ๊ฒƒ๋„ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.
- **์‚ฌ์‹ค๊ณผ ๊ณ„์‚ฐ์€ ์ž์ฃผ ํ‹€๋ฆฝ๋‹ˆ๋‹ค.** "1๋ถ€ํ„ฐ 10๊นŒ์ง€ ๋”ํ•˜๋ฉด?"์— 1+1=2, 2+1=3โ€ฆ ์‹์œผ๋กœ ์—‰๋šฑํ•œ ํ’€์ด๋ฅผ ๋‚ด๋†“์Šต๋‹ˆ๋‹ค. 1.1B ํฌ๊ธฐ์˜ ํ•œ๊ณ„์ž…๋‹ˆ๋‹ค.
- **๊ธด ์ถ”๋ก , ์ฝ”๋“œ ์ž‘์„ฑ, ํˆด์ฝœ์€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค.** ๊ทธ๋Ÿฐ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
- **๋Œ€ํ™” ๊ธฐ๋ก์€ ์งง๊ฒŒ๋งŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.** ๋ฌธ๋งฅ ๊ธธ์ด๊ฐ€ 2,048ํ† ํฐ์ด๊ณ , ๋ฉ€ํ‹ฐํ„ด์€ ๋ช‡ ํ„ด ์ •๋„๋งŒ ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.
- ํ•™์Šต ๋ฐ์ดํ„ฐ๊ฐ€ ์›น๊ณผ ๊ณต๊ฐœ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ผ ํŽธํ–ฅ๋˜๊ฑฐ๋‚˜ ๋ถ€์ ์ ˆํ•œ ๋‚ด์šฉ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ํ™•์ธ์ด ํ•„์š”ํ•œ ์šฉ๋„์—๋Š” ์“ฐ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
## ์‚ฌ์šฉ๋ฒ•
๋ชจ๋ธ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ์†Œ์— ๋“ค์–ด ์žˆ์–ด์„œ `trust_remote_code=True`๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ํ˜•์‹์€ ChatML์ด๊ณ  `chat_template`์— ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "prismdata/Perdix-1.1B-Instruct"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(
repo, trust_remote_code=True, dtype=torch.bfloat16).to("cuda").eval()
messages = [{"role": "user", "content": "๊น€์น˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋‘ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”."}]
ids = tok.apply_chat_template(messages, add_generation_prompt=True,
return_dict=True, return_tensors="pt")["input_ids"].to("cuda")
out = model.generate(ids, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.9,
repetition_penalty=1.1)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
```
์•Œ์•„ ๋‘˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋‹ต๋ณ€์€ `<|im_end|>`์—์„œ ๋๋‚ฉ๋‹ˆ๋‹ค. `eos_token`์ด ์ด ํ† ํฐ์œผ๋กœ ์žกํ˜€ ์žˆ์–ด `generate`๊ฐ€ ์•Œ์•„์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
- system ํ”„๋กฌํ”„ํŠธ๋Š” ํ˜•์‹์ƒ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•™์Šต ๋ฐ์ดํ„ฐ ๋Œ€๋ถ€๋ถ„์ด system ์—†์ด ๊ตฌ์„ฑ๋ผ ํšจ๊ณผ๋Š” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
- ๋ฌธ๋งฅ ๊ธธ์ด๋Š” 2,048ํ† ํฐ์ž…๋‹ˆ๋‹ค.
- KV ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธธ๊ฒŒ ์ƒ์„ฑํ•˜๋ฉด ๋А๋ฆฝ๋‹ˆ๋‹ค.
- ํŒจ๋”ฉ ๋งˆ์Šคํฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. `attention_mask`๋Š” ๋ฌด์‹œ๋˜๋ฏ€๋กœ, ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ๋Œ€ํ™”๋ฅผ ํŒจ๋”ฉํ•ด์„œ ํ•œ ๋ฐฐ์น˜๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ํ‹€์–ด์ง‘๋‹ˆ๋‹ค. ํ•œ ๊ฑด์”ฉ ๋„ฃ์œผ์„ธ์š”.
## ๋ชจ๋ธ
| ํ•ญ๋ชฉ | ๊ฐ’ |
|---|---|
| ํŒŒ๋ผ๋ฏธํ„ฐ | 1,107M |
| ๊ตฌ์กฐ | decoder-only, pre-RMSNorm, RoPE, ์ž…์ถœ๋ ฅ ์ž„๋ฒ ๋”ฉ ๊ณต์œ  |
| ์ธต / ์ฐจ์› / ํ—ค๋“œ | 20 / 2048 / 16 |
| FFN ์ฐจ์› | 8192 |
| ๋ฌธ๋งฅ ๊ธธ์ด | 2,048 |
| ์–ดํœ˜ | 49,154 (BPE 49,152 + `<|im_start|>`, `<|im_end|>`) |
| ๊ฐ€์ค‘์น˜ ํ˜•์‹ | float32 safetensors |
๊ตฌ์กฐ๋Š” ๋ฒ ์ด์Šค์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํŠธ๋žœ์Šคํฌ๋จธ์™€ ๋‹ค๋ฅธ ์ ์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
- **Differential Attention.** ์–ดํ…์…˜ ๋งต์„ ๋‘ ๊ฐœ ๋งŒ๋“ค์–ด ํ•˜๋‚˜์—์„œ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ๋บ๋‹ˆ๋‹ค. ์–‘์ชฝ์— ๊ณตํ†ต์œผ๋กœ ๋ผ๋Š” ์žก์Œ์„ ์ƒ์‡„ํ•˜๋ ค๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.
- **PolyNorm.** ํ™œ์„ฑ ํ•จ์ˆ˜ ์ž๋ฆฌ์— x, xยฒ, xยณ์„ ๊ฐ๊ฐ ์ •๊ทœํ™”ํ•ด์„œ ํ•™์Šต๋˜๋Š” ๊ฐ€์ค‘์น˜๋กœ ์„ž์–ด ์”๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ์ œ๊ฐ€ ๊ณ ์•ˆํ•œ ๊ฒŒ ์•„๋‹ˆ๊ณ  Motif-2.6B ๊ธฐ์ˆ ๋ณด๊ณ ์„œ([arXiv:2508.09148](https://arxiv.org/abs/2508.09148))์™€ Differential Transformer(Ye et al., 2024)๋ฅผ ์ฝ๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์› ์ €์ž๋“ค๊ณผ๋Š” ๊ด€๊ณ„์—†๋Š” ๊ฐœ์ธ ๊ตฌํ˜„์ด๋ผ, ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ œ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค.
## ํ•™์Šต
๋ฒ ์ด์Šค ๋ชจ๋ธ์˜ ์‚ฌ์ „ํ•™์Šต(30B ํ† ํฐ)์€ [Perdix-1.1B-Base](https://huggingface.co/prismdata/Perdix-1.1B-Base) ์นด๋“œ์— ์ ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์œ„์— SFT๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
- **๋ฐ์ดํ„ฐ**: ์•ฝ 390K ๋Œ€ํ™”, 2 epoch
- ์˜์–ด: [smoltalk](https://huggingface.co/datasets/HuggingFaceTB/smoltalk)์˜ everyday-conversations(3ํšŒ ๋ฐ˜๋ณต), smol-magpie-ultra, smol-constraints, smol-rewrite, smol-summarize, metamathqa-50k, numina-cot-100k ์ผ๋ถ€
- ํ•œ๊ตญ์–ด: [kullm-v2](https://huggingface.co/datasets/nlpai-lab/kullm-v2), [open-korean-instructions](https://huggingface.co/datasets/heegyu/open-korean-instructions)์˜ koalpaca, OIG-smallchip2-ko, korquad-chat ์ผ๋ถ€
- ์›๋ณธ ํŒŒ์ผ๊ณผ ํ† ํฐํ™”๋œ ํ•™์Šต ์ž…๋ ฅ(train/val npz), ์†Œ์Šค๋ณ„ ๊ฑด์ˆ˜๋Š” [prismdata/Perdix-SFT-Data](https://huggingface.co/datasets/prismdata/Perdix-SFT-Data)์— ์˜ฌ๋ ค ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
- ๊ฐ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ผ์ด์„ ์Šค์™€ ์ถœ์ฒ˜๋Š” ์› ์ €์žฅ์†Œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. koalpaca๋Š” CC-BY-NC-4.0์ด๋ผ ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์„ž์ธ SFT ๊ฒฐ๊ณผ๋ฅผ ์ƒ์—…์ ์œผ๋กœ ์“ธ ๋•Œ๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
- **ํ˜•์‹**: ChatML. ํ† ํฌ๋‚˜์ด์ €์— `<|im_start|>`, `<|im_end|>`๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ ์ž„๋ฒ ๋”ฉ์€ ๊ธฐ์กด ์ž„๋ฒ ๋”ฉ ํ‰๊ท ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. loss๋Š” ๋‹ต๋ณ€ ๊ตฌ๊ฐ„์—๋งŒ ๊ฑธ์—ˆ์Šต๋‹ˆ๋‹ค.
- **ํ•™์Šต๋ฅ **: ์ตœ๊ณ  5e-5, 100์Šคํ… ์›Œ๋ฐ์—… ๋’ค cosine์œผ๋กœ ์ตœ๊ณ ๊ฐ’์˜ 10%๊นŒ์ง€
- **๋ฐฐ์น˜**: ์Šคํ…๋‹น ์•ฝ 65K ํ† ํฐ, ๊ธธ์ด ๊ตฌ๊ฐ„๋ณ„ ํŒจ๋”ฉ, bf16, 6,984์Šคํ…
- **๊ฒฐ๊ณผ**: ๊ฒ€์ฆ loss 1.37 โ†’ 1.13
- **์žฅ๋น„**: DGX Spark ํ•œ ๋Œ€, ์•ฝ 21์‹œ๊ฐ„
ํ•™์Šต ์ฝ”๋“œ๋Š” [github.com/theprismdata/Perdix](https://github.com/theprismdata/Perdix)์— ์žˆ์Šต๋‹ˆ๋‹ค.
## ๋ผ์ด์„ ์Šค
๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ์ฝ”๋“œ๋Š” Apache-2.0. ํ•™์Šต์— ์“ด ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋Š” ๊ฐ๊ฐ์˜ ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฅด๋ฉฐ ์ถœ์ฒ˜๋Š” ์œ„์— ์ ์—ˆ์Šต๋‹ˆ๋‹ค.