Views
No views yet
| Property | Value |
|---|---|
| Architecture | Mixtral-style MoE (8 experts, top-2 routing) |
| Parameters | 14.83B total / ~7.42B active per token |
| Layers | 24 |
| Hidden size | 4096 |
| Attention heads | 32 (GQA — 8 KV heads) |
| Head dim | 128 |
| Expert intermediate size | 5,632 |
| Experts | 8 total, top-2 per token |
| Context length | 4,096 tokens |
| Vocabulary | 131,074 (131,072 SPM + `< |
| RoPE theta | 500,000 |
| Sliding window | 512 (alternating layers) |
| Norm | RMSNorm (eps=1e-5) |
| Activation | SiLU |
| Dtype | bfloat16 |
| Languages | Korean (primary), English |
| Stage | Steps | Tokens | Data | Hardware |
|---|---|---|---|---|
| Pretraining Stage 1 | 100,000 | ~50B | Korean + English web corpus | 2× H200 SXM |
| Pretraining Stage 2 | 120,000 | ~13B | Korean + English web corpus (continued) | 2× H200 SXM |
| SFT Epoch 1 | 18,000 | 710M | keural-SFT 1.14M ChatML samples | 2× H200 SXM |
| DPO Round 1 | 6,927 | — | 440K Korean preference pairs | 2× H200 SXM |
| SFT Epoch 2 | 29,112 | 7.63B | keural-SFT 710K samples (2nd pass) | 2× H200 SXM |
| SFT Epoch 3 (this checkpoint) | 40,000 / 65,849 | ~14B | 2.35M merged ChatML dataset | 2× H200 SXM |
| Hyperparameter | Value |
|---|---|
| Resumed from | checkpoint_29112 (SFT epoch 2 final) |
| Learning rate | 1e-5 → 1e-6 cosine decay |
| Min learning rate | 1e-6 |
| Effective batch size | 64 (4 per GPU × 8 grad accum × 2 GPUs) |
| Max sequence length | 4,096 tokens |
| Weight decay | 0.05 |
| Gradient clipping | 1.0 |
| Optimizer | AdamW |
| Checkpoint step | 40,000 (60.7% of epoch) |
| Total epoch steps | 65,849 |
| Parallelism | FSDP FULL_SHARD (ZeRO-3 equivalent) |
| Precision | bfloat16 + gradient checkpointing |
| Hardware | 2× NVIDIA H200 SXM (139 GiB each) |
| Source | Samples | Language |
|---|---|---|
| OpenHermes-2.5 | 1,001,551 | English |
| SlimOrca | 517,982 | English |
| UltraChat | 193,212 | English |
| OpenOrca | 138,639 | English |
| AIHub multisession sci | 127,868 | Korean |
| AIHub daily conversation | 120,867 | Korean |
| AIHub multisession social | 85,346 | Korean |
| Alpaca | 46,303 | English |
| KoInstruct QA | 45,299 | Korean |
| KoInstruct base | 42,276 | Korean |
| KoAlpaca | 21,091 | Korean |
| AIHub expert QA | 10,778 | Korean |
| Total | 2,351,212 | Korean ~19% / English ~81% |
<|im_start|>system
You are a helpful bilingual Korean-English assistant. Always respond in the same language as the user.<|im_end|>
<|im_start|>user
안녕하세요! 오늘 날씨가 어때요?<|im_end|>
<|im_start|>assistant1pip install vllm
2
3python -m vllm.entrypoints.openai.api_server \
4 --model mkd-hossain/keural-sft3-40k \
5 --dtype auto \
6 --max-model-len 4096 \
7 --gpu-memory-utilization 0.71from openai import OpenAI
2
3client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
4
5response = client.chat.completions.create(
6 model="mkd-hossain/keural-sft3-40k",
7 messages=[
8 {"role": "system", "content": "You are a helpful bilingual Korean-English assistant. Always respond in the same language as the user."},
9 {"role": "user", "content": "인공지능이란 무엇인가요?"},
10 ],
11 max_tokens=512,
12 temperature=0.7,
13)
14print(response.choices[0].message.content)transformers1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model_id = "mkd-hossain/keural-sft3-40k"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 torch_dtype=torch.bfloat16,
10 device_map="auto",
11)
12
13messages = [
14 {"role": "system", "content": "You are a helpful bilingual Korean-English assistant. Always respond in the same language as the user."},
15 {"role": "user", "content": "파이썬 리스트 정렬 방법을 알려주세요."},
16]
17
18text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
19inputs = tokenizer(text, return_tensors="pt").to(model.device)
20
21with torch.no_grad():
22 output = model.generate(
23 **inputs,
24 max_new_tokens=512,
25 temperature=0.7,
26 top_p=0.9,
27 repetition_penalty=1.1,
28 do_sample=True,
29 eos_token_id=131073,
30 )
31
32response = tokenizer.decode(output[0][inputs.input_ids.shape[1]:], skip_special_tokens=False)
33response = response.split("<|im_end|>")[0].strip()
34print(response)| Token | ID | Purpose |
|---|---|---|
| `< | im_start | >` |
| `< | im_end | >` |
<bos> | 1 | Beginning of sequence |
<eos> | 2 | End of sequence (not used for chat) |
<pad> | 0 | Padding |
Always seteos_token_id=131073when generating. Do not use ID 2.
| Checkpoint | Stage | Steps | Notes |
|---|---|---|---|
| mkd-hossain/keural-pretrained | Pretraining | 120,000 | Raw base model |
| mkd-hossain/keural-sft-18k | SFT Epoch 1 | 18,000 | Initial instruction tuning |
| mkd-hossain/keural-dpo-final | DPO Round 1 | 6,927 | Alignment on Korean preference data |
| mkd-hossain/keural-sft2 | SFT Epoch 2 | 29,112 | 2nd pass on 710K dataset |
| mkd-hossain/keural-sft3-40k | SFT Epoch 3 | 40,000 | Intermediate — 2.35M dataset |