sLLM (Korean)

ν•œκ΅­μ–΄ μ†Œν˜• μ–Έμ–΄λͺ¨λΈ. 24μΈ΅ Β· d_model 768 Β· GQA(12 q / 4 kv) Β· sliding window(512) + 6μΈ΅λ§ˆλ‹€ global ν˜Όν•© μ–΄ν…μ…˜ Β· MTP(multi-token prediction) ν—€λ“œλ₯Ό 얹은 λ””μ½”λ”μž…λ‹ˆλ‹€. SentencePiece 32,768 vocab.

νŒŒλΌλ―Έν„° 178.6M (μž„λ² λ”© 25.2M μ œμ™Έ μ‹œ 153.4M). MTP ν—€λ“œλŠ” ν•™μŠ΅μ—μ„œ 보쑰 μ†μ‹€λ‘œ 쓰이고, μΆ”λ‘ μ—μ„œλŠ” self-speculative decoding의 draft μƒμ„±κΈ°λ‘œ μž¬ν™œμš©λ©λ‹ˆλ‹€.

μΈ΅ / d_model / FFN 24 / 768 / 2048
μ–΄ν…μ…˜ GQA 12 q Β· 4 kv head, head_dim 64
μ»¨ν…μŠ€νŠΈ 2,048 (sliding window 512, 6μΈ΅λ§ˆλ‹€ global)
RoPE ΞΈ local 10,000 / global 1,000,000
MTP 16 offset, 손싀 κ°€μ€‘μΉ˜ 0.2
vocab 32,768 (pad 0, bos 1, eos 2)

ν•™μŠ΅

μ½”νΌμŠ€ ν•œκ΅­μ–΄ 76.86M 토큰, ν•„ν„° ν›„ β‰ˆ74.86M
배치 8 Γ— grad_accum 4 Γ— 2,048 = 65,536 토큰/step
1 epoch β‰ˆ1,142 step
λͺ©ν‘œ 4 epoch β‰ˆ 4,570 step
best 체크포인트 step 4,500 (β‰ˆ3.9 epoch, λˆ„μ  β‰ˆ295M 토큰)
μ²˜λ¦¬λŸ‰ 22.9k tok/s, 피크 λ©”λͺ¨λ¦¬ 70.5 GiB

step 4,500 κΈ°μ€€ μ†μ‹€μž…λ‹ˆλ‹€. 총 손싀은 main + 0.2 Γ— mtpμž…λ‹ˆλ‹€.

main mtp 총
train 1.9419 5.8022 3.1023
val 3.0717 6.4412 β€”

val perplexity 21.6 (= exp(3.0717)). safetensors ν—€λ”μ˜ best_val 메타데이터가 이 val main κ°’μž…λ‹ˆλ‹€.

파일

파일 λ‚΄μš©
model.safetensors ν•™μŠ΅λœ κ°€μ€‘μΉ˜ (fp32, 714 MB)
config.json ModelConfig.to_dict() κ²°κ³Ό
model.py μ•„ν‚€ν…μ²˜ μ •μ˜ (λ‘œλ“œμ— ν•„μš”)
spm.model SentencePiece ν† ν¬λ‚˜μ΄μ €
onnx/model.onnx 프리필/λ””μ½”λ“œ 곡용 ONNX 트렁크 (708 MB)
onnx/mtp_head.onnx MTP ν—€λ“œ (speculative decoding용, 110 MB)
onnx/config.json μœ„μ™€ λ™μΌν•œ config

λ‘œλ“œ

KoreanSLLM은 transformers의 PreTrainedModel을 μƒμ†ν•˜μ§€ μ•ŠλŠ” 순수 nn.Moduleμ΄λ―€λ‘œ AutoModel.from_pretrainedλ‘œλŠ” λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. νŒŒμΌμ„ 직접 λ°›μ•„ μ”λ‹ˆλ‹€.

import json, torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file

repo = "PostAlign/sLLM"

# model.py λ₯Ό λ°›μ•„μ„œ import
import importlib.util, sys
spec = importlib.util.spec_from_file_location("kslm", hf_hub_download(repo, "model.py"))
kslm = importlib.util.module_from_spec(spec); sys.modules["kslm"] = kslm
spec.loader.exec_module(kslm)

cfg = kslm.ModelConfig(**json.load(open(hf_hub_download(repo, "config.json"))))
model = kslm.KoreanSLLM(cfg)
model.load_state_dict(load_file(hf_hub_download(repo, "model.safetensors")))
model.eval()

import sentencepiece as spm
tok = spm.SentencePieceProcessor(model_file=hf_hub_download(repo, "spm.model"))

ONNX

λΈŒλΌμš°μ €(WebGPU)Β·λͺ¨λ°”일(NNAPI/CoreML) 가속 μΆ”λ‘ μš© κ·Έλž˜ν”„μž…λ‹ˆλ‹€. 프리필과 λ””μ½”λ“œκ°€ 같은 κ·Έλž˜ν”„μ΄λ©°, 프리필은 past_len=0, λ””μ½”λ“œλŠ” seq=1둜 ν˜ΈμΆœν•©λ‹ˆλ‹€.

μž…λ ₯  input_ids (batch, seq) int64
      past_k    (24, batch, 4, past_len, 64)
      past_v    (24, batch, 4, past_len, 64)
좜λ ₯  logits    (batch, seq, 32768)
      hidden    (batch, seq, 768)        # mtp_head.onnx 의 μž…λ ₯
      present_k (24, batch, 4, past_len + seq, 64)
      present_v (24, batch, 4, past_len + seq, 64)

mtp_head.onnxλŠ” (hidden, offset_idx)λ₯Ό λ°›μ•„ (logits, mtp_hidden)을 λƒ…λ‹ˆλ‹€. speculative decoding의 수용/κ±°λΆ€ νŒμ • λ£¨ν”„λŠ” κ·Έλž˜ν”„κ°€ μ•„λ‹ˆλΌ 호슀트 μ½”λ“œμ— λ‘‘λ‹ˆλ‹€.

export 직후 onnxruntime으둜 PyTorch 원본과 λŒ€μ‘°ν–ˆμŠ΅λ‹ˆλ‹€.

프리필(T=24, P=0) λ‘œμ§“ μ΅œλŒ€μ˜€μ°¨: 1.621e-05
greedy 12μŠ€ν… 토큰열 일치: True
MTP offset 0..15 λ‘œμ§“ μ΅œλŒ€μ˜€μ°¨: 5.722e-06

ν•œκ³„

  • max_seq_len=2048이 생성 μ‹œ ν•˜λ“œ μ»·μž…λ‹ˆλ‹€.
  • ONNX κ·Έλž˜ν”„λŠ” KV μΊμ‹œλ₯Ό λ§€ μŠ€ν… 전체 λ³΅μ‚¬ν•©λ‹ˆλ‹€(in-place μƒνƒœκ°€ μ—†μŒ). κΈ΄ μ»¨ν…μŠ€νŠΈμ—μ„œ 병λͺ©μž…λ‹ˆλ‹€.
  • ONNX logitsκ°€ μ „ μœ„μΉ˜μ— λŒ€ν•΄ λ‚˜μ˜€λ―€λ‘œ κΈ΄ ν”„λ¦¬ν•„μ—μ„œ 좜λ ₯이 ν½λ‹ˆλ‹€(2,048 μ»¨ν…μŠ€νŠΈ fp32 κΈ°μ€€ 268 MB).
  • train/val 간극이 ν½λ‹ˆλ‹€. step 4,500μ—μ„œ train main 1.9419 (ppl 6.97) λŒ€ val main 3.0717 (ppl 21.6)둜, 같은 μ½”νΌμŠ€λ₯Ό μ•½ 4회 λ°˜λ³΅ν•œ 데 λ”°λ₯Έ 과적합이 λšœλ ·ν•©λ‹ˆλ‹€. 데이터λ₯Ό λŠ˜λ¦¬μ§€ μ•Šκ³  step만 더 밀어도 val이 κ°œμ„ λ˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • 데이터가 λͺ¨λΈ 크기에 λΉ„ν•΄ μ μŠ΅λ‹ˆλ‹€. 고유 토큰 74.86M은 178M νŒŒλΌλ―Έν„° κΈ°μ€€ ν”νžˆ μ“°λŠ” κ²½ν—˜μΉ™(νŒŒλΌλ―Έν„°λ‹Ή ~20토큰, μ•½ 3.6B)에 ν•œμ°Έ λͺ» λ―ΈμΉ©λ‹ˆλ‹€. μ„±λŠ₯ μƒν•œμ΄ 데이터에 κ±Έλ € μžˆμŠ΅λ‹ˆλ‹€.
  • μ†Œκ·œλͺ¨Β·μ§§μ€ ν•™μŠ΅ λͺ¨λΈμž…λ‹ˆλ‹€. μ‚¬μ‹€μ„±Β·μ•ˆμ „μ„± 보μž₯이 μ—†μœΌλ©°, 벀치마크 평가λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
Downloads last month
-
Safetensors
Model size
0.2B params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support