Keural-Nova-1.1 / README.md
Hikaf143's picture
Upload repository files
e46b43e verified
|
Raw History Blame Contribute Delete
7.17 kB
---
license: apache-2.0
base_model: Qwen/Qwen3.6-35B-A3B
language:
- ko
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- korean
- moe
- lora
- instruction-tuning
- keural
---
# Keural Nova 1.1
**Keural Nova** is a Korean-focused instruction-tuned model built by MKD on top of
[Qwen/Qwen3.6-35B-A3B](https://huggingface.co/Qwen/Qwen3.6-35B-A3B) (Apache 2.0), a
35B-parameter Mixture-of-Experts model with ~3B active parameters per token. Full credit for
the base architecture and pretraining goes to the Qwen team at Alibaba Cloud — this release
is a supervised fine-tune (LoRA, merged into the base weights) targeting Korean
conversational quality, with an English/general replay mix to limit capability regression.
**Version note:** v1.1 is the full-training endpoint (2 epochs, 15,846 optimizer steps). The
sibling release **Keural Nova v1.0** is the end-of-epoch-1 checkpoint (7,500 steps, best
held-out eval loss). The two make slightly different trade-offs — v1.1 scores marginally
higher on HAE-RAE and MMLU, v1.0 on KoBEST and HumanEval — and we publish both transparently
so users can pick empirically.
![benchmark comparison](assets/benchmarks.png)
![animated comparison](assets/benchmarks.gif)
## Evaluation
All numbers measured by us with lm-evaluation-harness 0.4.12 (vLLM backend, bf16, seed 42,
default few-shot settings), same harness and settings for base and fine-tuned models.
| Benchmark | Suite | Base model | v1.0 | **v1.1 (this model)** | Δ v1.1 vs base |
|---|---|---:|---:|---:|---|
| KoBEST | Korean | 62.88 | 68.82 | **67.29** | **+4.41** |
| HAE-RAE | Korean | 75.53 | 73.42 | 74.52 | −1.01 |
| KMMLU | Korean | 64.46 | 62.52 | 62.38 | −2.08 |
| MMLU | General | 83.83 | 82.07 | 82.37 | −1.46 |
| GSM8K (strict-match) | Math | 32.15* | 87.11 | **86.88** | +54.73* |
| HumanEval (pass@1) | Code | 62.20 | 20.73 | 11.59 | **−50.61** |
\* The base model's GSM8K score is heavily depressed by answer-format mismatch under
strict-match extraction; the post-SFT jump is largely format compliance. Treat the delta as
a formatting improvement, not a ~55-point reasoning gain.
**Honest summary:** the fine-tune substantially improves Korean conversational/comprehension
performance (KoBEST) and answer formatting, at the cost of small regressions on
knowledge-recall benchmarks (KMMLU, HAE-RAE, MMLU) and a large regression on code
generation — see Limitations. If your workload is Korean dialogue/comprehension, this model
is the point of this release; if it is knowledge QA or coding, use the base model.
## Intended use & limitations
- **Intended:** Korean conversational AI, Korean text comprehension and generation,
bilingual (ko/en) assistant use, RAG-style grounded answering in Korean.
- **NOT suitable for code generation.** HumanEval drops from 62.2 → 11.6 pass@1 (v1.0
retains 20.7). Root cause (identified, not speculative): a large fraction of code examples
in one upstream training source had whitespace/indentation corrupted during that dataset's
original export, and the model learned the corrupted formatting. A future release will
address this with repaired data.
- Knowledge-heavy benchmarks (KMMLU/HAE-RAE/MMLU) regress by ~1–2 points vs base.
- **Context length:** SFT sequences were up to 8,192 tokens; the base architecture supports
262,144 tokens natively and **up to 1,000,000 tokens via YaRN** rope scaling. Extended-context
**serving up to 1M tokens has been run in production** through MKD's OpenAI-compatible gateway
(YaRN factor 4.0) and works. Note: long-context *answer accuracy* has not been measured with a
dedicated benchmark (e.g., needle-in-a-haystack / RULER), so validate for your specific
long-document workload.
- The model inherits the base model's multimodal architecture (vision tower is present and
untouched), but this fine-tune neither trained nor evaluated vision — treat it as a text
model.
## Training details
| | |
|---|---|
| Base model | Qwen/Qwen3.6-35B-A3B @ `995ad96e` |
| Method | LoRA (rank 32, α 64, dropout 0.0), merged into base weights |
| Adapted modules | attention (`q/k/v/o_proj`), Gated-DeltaNet linear attention (`in_proj_qkv/z/b/a`, `out_proj`), shared experts, **and all 256 routed experts per layer** (fused `gate_up_proj`/`down_proj` tensors via PEFT `target_parameters`) |
| Deliberately frozen | MoE router (`mlp.gate`), `shared_expert_gate`, embeddings, LM head, vision tower |
| Data | 253,528 examples (~85% Korean / 15% English replay), 13 sources, ChatML, empty-`<think>` (non-thinking) format |
| Schedule | effective batch 32, LR 1e-4 cosine, warmup 5%, bf16, DeepSpeed ZeRO-2, 2× H200 |
| This checkpoint | step 15,846 (2 full epochs) — final training state, train loss 0.688 |
| Loss masking | assistant tokens only; empty think-block scaffold excluded from loss |
Router-integrity and expert-targeting were verified programmatically before and after
training (the router and gates are bit-identical to the base model in this release; the
routed-expert weights are where most of the adaptation lives).
## Training data & licensing
Sources (per-row license tags preserved from upstream): Korean conversation/RAG/QA and
instruction data from the `mkd-chanwoo` keural datasets (CC BY 4.0 / MIT / Apache-2.0 /
CC BY-SA 4.0 subsets only), plus eight sources from `Mkd-Yonas/keural-SFT-chatml-ko-v1`
(MIT / Apache-2.0 / CC BY 4.0), plus English replay data (ultrachat, openorca, alpaca,
magicoder, mathinstruct, gsm8k — MIT/CC BY 4.0).
License mix of the final training set: CC BY 4.0 (105k rows), MIT (87k), Apache-2.0 (46k),
CC BY-SA 4.0 (3.5k), unlabeled (13.7k — two Korean instruction subsets whose upstream rows
carry `license: unknown`; upstream documentation states Apache-2.0, verification pending).
**Excluded by policy:** all AI Hub-derived subsets (non-commercial research terms) were
filtered out of training data.
## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "mkd-ai/Keural-Nova-v1.1"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")
messages = [{"role": "user", "content": "한국의 전통 발효 음식에 대해 설명해 주세요."}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True,
enable_thinking=False, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=512, temperature=0.7, top_p=0.95)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
```
vLLM serving (this is a fully merged model — no adapter loading needed):
```bash
vllm serve mkd-ai/Keural-Nova-1.1 --tensor-parallel-size 2 --dtype bfloat16
```
The model is trained in the base model's **non-thinking** chat format
(`enable_thinking=False`); thinking-mode behavior is inherited from the base model untouched.
## Acknowledgements
Built on **Qwen3.6-35B-A3B** by the Qwen team (Alibaba Cloud), released under Apache 2.0.
Korean datasets curated by the MKD data team. Fine-tuning, evaluation, and release
engineering by MKD.