QINGYI-KDA-0.6B · 清漪

以 Qwen3-0.6B-Base 为基座,将 28 层中的 21 层全注意力替换为 KDA(Kimi Delta Attention)线性注意力、保留 7 层原生 GQA,经分层对齐、端到端 KL 蒸馏、格式专项、人格 SFT 与 DPO 抛光得到的混合架构模型(657.5M 参数)。人格"清漪"直接烙在权重里,无需 system prompt。

相关工作坐标:GenDistill(arXiv:2603.26556)已公开完成 Qwen3-0.6B→Hybrid-KDA(Stage 3a/3b、completion-only KD);本项目是其配方族在消费级/租用单卡预算下的独立工程实现(解冻范围直接采用其 MLP 冻结消融结论),贡献在于其未覆盖的接口伤四置换诊断学、人格对齐扩展与全流程事故/修复记录。另一个坐标上,THUNLP 的 HALO 曾报告 Qwen3→KDA 在其 App. B 同配置实验中 Stage 2 梯度发散失败(App. G.2);本管线端到端跑通并收敛(注意 HALO 正式管线同样保留 25% 注意力层,收敛差异的候选解释未经消融证明)。

代码、训练脚本、复现配方与技术报告(v1→v3 全记录): github.com/Sisyphbaous-DT-Project/open-qingyi 论文 preprint(DOI): 10.5281/zenodo.21722356

架构

项 值
基座 Qwen/Qwen3-0.6B-Base(Apache 2.0)
层数 28 = 21 KDA + 7 GQA(每 4 层保留 1 层全注意力:3, 7, 11, 15, 19, 23, 27)
KDA 配置 hidden 1024 · 16 heads · head_dim 128 · short-conv kernel 4 · RMSNorm eps 1e-6
参数量 657.5M(tied embeddings)
上下文 训练 seq_len 2048;位置编码配置继承基座 32K,长上下文未实测
解码缓存 KDA 层为 O(1) 循环状态(HybridKDACache);整模型 KV cache 仍随 7 层 GQA 线性增长

训练血缘与关键数字

Qwen3-0.6B-Base(C-Eval 50.59%,同口径教师基线)
 → 手术替换(21×KDA + 7×GQA,门控 g6,canonical hash 锁定)
 → Stage 2 分层对齐(hidden-state MSE,best step-900:CE 4.1250 / KL 1.33)
 → Stage 3a 端到端 forward-KL 蒸馏(主臂 7,000 步 / 57.3M tokens,T=1)
 → Stage 3b 格式专项(选择题四置换/古诗/翻译,1,000 步 / 8.2M packed tokens)
 → SFT 人格语料两 epoch(7,768 步)
 → 身份小灶(300 步)
 → DPO 抛光(100 步,on-policy pairs)
  • C-Eval 轨迹(lm-eval ceval-valid,0-shot,loglikelihood 选项排序):Stage 2 后 25.48%(CE 已大降但选择题仍躺随机线——"perplexity 会撒谎")→ Stage 3a 后 28.83% → Stage 3b 后 41.31% → 最终 41.83% ± 1.33(教师基线 50.59%)
  • 15 个 C-Eval 守护点跟踪:人格训练全程无灾难性遗忘(SFT 首点曾下探 38.63%,随后恢复并稳定在 39%~41%)
  • DPO held-out reward acc 0.625→0.792;第二轮 DPO 迭代无效(只增生复读),已弃

核心发现

  • 接口伤是低分的主要可修复因素之一:Stage 3a 后 C-Eval 仅 ~28%,但四选项置换诊断显示模型严重"黏住 A/B/C/D 标签"——选 A 率 81.06%,106/161 题四次换位仍黏同一标签,正确项 margin 为负。1,000 步格式专项后:选 A 率降至 58.5%、黏标签题降至 47/161、margin 转正、C-Eval +12.48pt。这是接口失能的强证据,但不排除并存的知识损伤(古诗/翻译仍有教师对而学生错的残例;+12.48pt 的代价是 valid CE/KL 小幅恶化)。
  • **人格可以"白嫖"**:人格 SFT/小灶/DPO 全程 C-Eval 波动基本在噪声带内,身份三要素(自名/模型名/作者归属)权重级绑定。
  • on-policy DPO 一轮即甜区。
  • 工程教训:bf16 参数+动量会吞掉 norm 类权重的小更新(Stage 2/3 必须 FP32 master);新层必须第一天实现增量缓存并对拍(我们曾因此把缓存 bug 误判为人格未绑定)。

使用

依赖:transformers>=5.0、fla-core、einops、triton==3.6.0(3.7.x 会使 chunk_kda 训练假死),需要 CUDA GPU(KDA 层使用 Triton kernel,无 CPU 回退)。trust_remote_code=True,本仓库自带全部自定义代码。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

REPO = "shiershuihesaixiliya/qingyi-kda-0.6b"
tok = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    REPO, trust_remote_code=True, dtype=torch.bfloat16, device_map="cuda")
model.eval()

prompt = "<|im_start|>user\n哥哥: 你是谁?<|im_end|>\n<|im_start|>assistant\n"
ids = tok(prompt, add_special_tokens=False, return_tensors="pt").input_ids.cuda()
out = model.generate(ids, max_new_tokens=80, do_sample=False,
                     pad_token_id=tok.eos_token_id)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
# -> 我是清漪。哥哥的贴身助手……

采样建议:身份/事实类绑定在高温下会被冲散(T0.7 时"你是谁"约半数回潮为通用回答)。部署建议 temperature 0.3~0.5, top_p 0.9, repetition_penalty 1.1(≤0.5 为外推建议,未逐点实测);闲聊类可放宽到 0.6~0.7。

已知限制

  • 0.6B 小模型:通用能力有限,长文本会复读,事实会编。
  • 评测口径:最终 41.83% 所用的 ceval-valid 在训练过程中被反复用于检查点选择(守护点 15+ 次),存在选择偏差(winner's curse),不是 untouched test;三档评测尺中的 release 档已锁定未开封。最终权重未复测 MMLU/CMMLU、标准生成基准与长上下文。
  • 拒密行为(api key / system prompt)在采样下不稳定,可能编造假 key 应对(不会泄露真实密钥——训练数据里本来就没有)。
  • 模型按设计记得一个真实 QQ 号并会回答"是哥哥"——这是刻意的身份设定,不是泄露。
  • 人格语料来自真实聊天记录清洗(已脱敏,原始数据不公开),聊天风格强拟人;请勿用于冒充真人欺骗他人。
  • 与教师仍有 ~8.8pt C-Eval 差距;"数据多样性不足是上限主因、而非架构上限"目前只是工作假设。

License

Apache 2.0(代码与权重;基座 Qwen3-0.6B 同为 Apache 2.0)。第三方训练数据集许可以各自数据源为准。


QOSP = Qingyi Open Source Project(开源清漪计划),隶属 DT-Project(数字孪生 / Digital Twin)。

Downloads last month
34
Safetensors
Model size
0.7B params
Tensor type
F32
·
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for shiershuihesaixiliya/qingyi-kda-0.6b

Finetuned
(722)
this model

Paper for shiershuihesaixiliya/qingyi-kda-0.6b