JINSOO LLM 1B - Korean Language Model
๋ชจ๋ธ ์ค๋ช
๊ตญ๋ฆฝ์ฐฝ์๋ํ๊ต IBDP ์ฐ๊ตฌ์ค์์ ์คํ์ฉ์ผ๋ก ๊ฐ๋ฐํ ํ๊ตญ์ด 1B ํ๋ผ๋ฏธํฐ ์ธ์ด BASE ๋ชจ๋ธ์ ๋๋ค. ๊ฐ์ธ ํ๋ก์ ํธ ๋ฐ์ดํฐ ์์ง์ ์ด๋ ค์์ผ๋ก ํ ํฌ๋์ด์ ๋ beomi/KoAlpaca-Polyglot-5.8B ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ๊ทธ ์ธ์๋ PyTorch๋ก ์ง์ ๊ตฌํํ Transformer ๊ธฐ๋ฐ ๋์ฝ๋ ๋ชจ๋ธ์ ๋๋ค.
์์น ์ธ์ฝ๋ฉ์ ์ํฅ์ ๋ณด๊ธฐ ์ํด RoPE๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ฌด๊ฒ๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ํฅํ V2๋ฒ์ ์์๋ ์์น ์ธ์ฝ๋ฉ์ ์ถ๊ฐํ์ฌ SFT๋ฅผ ์ํ ์์ ํ BASE๋ชจ๋ธ์ ๊ตฌ์ถํ ์์ ์ ๋๋ค.
ํ์ต ํ ํฐ์ ์ฝ ~13B ์ผ๋ก ์ฝ๊ฐ ์ธ๋ํธ๋ ์ด๋ ๋์์ผ๋ฉฐ ๋ง์ง๋ง์ ๊ณ ํ์ง ๋ฐ์ดํฐ๋ก ์ถ๋ ฅ ๋ถํฌ๋ง ์ด์ง ๋ค๋ฌ์์ต๋๋ค
- RMSNorm: ํจ์จ์ ์ธ ์ ๊ทํ ๋ ์ด์ด
- SwiGLU: ๊ฐ์ ๋ ํ์ฑํ ํจ์ (FFN multiplier = 3x)
- Flash Attention: ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ดํ ์ ๋ฉ์ปค๋์ฆ
- Weight Tying: ์๋ฒ ๋ฉ/์ถ๋ ฅ ๋ ์ด์ด ๊ฐ์ค์น ๊ณต์
- Causal Masking: ์๊ธฐํ๊ท์ ํ ์คํธ ์์ฑ
๋ชจ๋ธ ๊ตฌ์กฐ
Parameters: ~1.37B
Architecture: Custom decoder-only transformer (PyTorch ๊ตฌํ)
Hyperparameters:
hidden_size: 2048
num_hidden_layers: 24
num_attention_heads: 16
intermediate_size: 6144
max_position_embeddings: 2048
vocab_size: 30004
์ฌ์ฉ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ ์ถ๋ก
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# ๋ชจ๋ธ ๋ฐ ํ ํฌ๋์ด์ ๋ก๋
model = AutoModelForCausalLM.from_pretrained(
"DokHee/jinsoo-llm-1b-korean",
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained("DokHee/jinsoo-llm-1b-korean")
# ํ
์คํธ ์์ฑ
prompt = "1,2,3,4"
# response : 1,2,3,4,5,6,7,8,9,10,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,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78
# prompt = "์ฌ๋์ ์ฌ์ฅ๋ณ์ "
# response : ์ฌ๋์ ์ฌ์ฅ๋ณ์ ฮฒ ์๋ฏธ๋
ธ๊ณ ์ ๋ฉด์ญ์ฒด๊ณ๊ฐ ๊ณผ๋ํ๊ฒ ํ์ฑํ๋์ด ์์ด ๋
ธํ๊ฐ ์งํ๋๋ฉด ์ธํฌ๊ฐ ์ฃฝ๊ฒ ๋๊ณ , ์ด๋ ์ธํฌ๊ฐ ์ฃฝ๊ฒ ๋์ด ์ธํฌ๊ฐ ์ฃฝ๊ฒ ๋๋ ๊ฒ์ด๋ค.
# ์ด๋ฌํ ๋
ธํ๋ ์ ์ ์ , ํ๊ฒฝ์ , ์ฌํ์ ์์ธ๋ค๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ์ด๋ฌํ ํ๊ฒฝ์ ์์ธ๋ค์ ๋
ธํ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์์ธ๋ค์ ํฌํจํ๋ค.
# ๋
ธํ ๊ณผ์ ์์๋ ์ ์ ์ , ํ๊ฒฝ์ ์์ธ๋ค๋ก ์ธํด ๋ฐ์ํ๋ ์ ์ ์ ์์ธ๋ค์ด ๋ณตํฉ์ ์ผ๋ก ์์ฉํ์ฌ ๋
ธํ ๊ณผ์ ์ ๊ฐ์ํ์ํค๊ฒ ๋๋ค.
# ์ ์ ์ ์์ธ๋ค์ ์ ์ ...
inputs = tokenizer(prompt, return_tensors="pt", return_token_type_ids=False).to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=128,
temperature=0.56,
top_p=0.9,
do_sample=True,
pad_token_id=tokenizer.pad_token_id,
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
ํ์ต ์ ๋ณด
- ํ ํฌ๋์ด์ : beomi/KoAlpaca-Polyglot-5.8B (PAD ํ ํฐ ์ถ๊ฐ)
- ํ์ต ํ๊ฒฝ: NVIDIA GPU, PyTorch 2.7.0
- ํผํฉ ์ ๋ฐ๋: BFloat16
- ์ต์ ํ: AdamW (lr=1e-5, weight_decay=0.01)
- ์ปจํ ์คํธ ๊ธธ์ด: 2048 tokens
์ ํ์ฌํญ
- ์ด ๋ชจ๋ธ์ ํ๊ตญ์ด์ ํนํ๋์ด ์์ผ๋ฉฐ, ๋ค๋ฅธ ์ธ์ด์์๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค
- 1B ํ๋ผ๋ฏธํฐ๋ก ๋ํ ๋ชจ๋ธ ๋๋น ๋ณต์กํ ์ถ๋ก ๋ฅ๋ ฅ์ด ์ ํ์ ์ผ ์ ์์ต๋๋ค
- RoPE ๋ฐ ๊ธฐํ SFT, ํ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์์ผ๋ฏ๋ก ํ๊ตญ์ด ์์ฑ์ ๊ฐ๋ฅํ๋ ๋ฌธ๋งฅ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
๋ผ์ด์ ์ค
Apache 2.0
ํฌ๋ ๋ง
- ํ ํฌ๋์ด์ : beomi/KoAlpaca-Polyglot-5.8B
- ์ํคํ ์ฒ: PyTorch๋ก ์ง์ ๊ตฌํํ Transformer ๊ธฐ๋ฐ ๋์ฝ๋
๋ฌธ์
์ด์๋ ์ง๋ฌธ์ด ์์ผ์๋ฉด ๋ชจ๋ธ ์ ์ฅ์์ ์ด์๋ฅผ ๋ฑ๋กํด์ฃผ์ธ์.
- Downloads last month
- 10