🚀 Doge 20M Instruct
Doge 20M Instruct 模型采用动态掩码注意力进行序列转换,在训练时使用自注意力机制,推理时采用状态空间方法。同时,它可以使用多层感知机或跨域专家混合模型进行状态转换,且跨域专家混合模型能直接继承多层感知机的权重以进行进一步训练。该模型由 SmallDoge 社区训练,详细的算法和模型架构相关论文即将发布,所有训练细节和代码可在 small-doge 仓库中查看。
🚀 快速开始
Doge 采用动态掩码注意力进行序列转换,可使用多层感知机或跨域专家混合模型进行状态转换。动态掩码注意力使 Transformer 能在训练时使用自注意力机制,在推理时使用状态空间方法,而跨域专家混合模型可直接继承多层感知机的权重进行进一步训练。此模型由 SmallDoge 社区训练,详细的算法和模型架构相关论文即将推出,所有训练细节和代码可在 small-doge 仓库中获取。
✨ 主要特性
- 独特的注意力机制:动态掩码注意力允许 Transformer 在训练和推理阶段采用不同的机制,提高效率和性能。
- 灵活的状态转换:可选择多层感知机或跨域专家混合模型进行状态转换,且跨域专家混合模型能继承多层感知机的权重。
- 社区驱动开发:由 SmallDoge 社区训练和维护。
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig, TextStreamer
tokenizer = AutoTokenizer.from_pretrained("SmallDoge/Doge-20M-Instruct")
model = AutoModelForCausalLM.from_pretrained("SmallDoge/Doge-20M-Instruct", trust_remote_code=True)
generation_config = GenerationConfig(
max_new_tokens=100,
use_cache=True,
do_sample=True,
temperature=0.8,
top_p=0.9,
repetition_penalty=1.0
)
steamer = TextStreamer(
tokenizer=tokenizer,
skip_prompt=True
)
prompt = "Hi, how are you doing today?"
conversation = [
{"role": "user", "content": prompt}
]
inputs = tokenizer.apply_chat_template(
conversation=conversation,
tokenize=True,
return_tensors="pt",
)
outputs = model.generate(
inputs,
tokenizer=tokenizer,
generation_config=generation_config,
streamer=steamer
)
📚 详细文档
模型训练
我们通过在 SmolTalk 上进行有监督微调(SFT),然后在 UltraFeedback Binarized 上进行直接偏好优化(DPO)来构建 Doge-Instruct 模型。
SFT 训练详情
DPO 训练详情
模型评估
训练过程可视化
- SFT:

- DPO:

训练环境
- 镜像:nvcr.io/nvidia/pytorch:24.12 - py3
- 硬件:1x NVIDIA RTX 4090
- 软件:Transformers, TRL
🔧 技术细节
该模型使用动态掩码注意力进行序列转换,可选择多层感知机或跨域专家混合模型进行状态转换。动态掩码注意力使 Transformer 在训练和推理阶段采用不同的机制,提高了效率和性能。跨域专家混合模型能够直接继承多层感知机的权重,便于进一步训练。
📄 许可证
本项目采用 Apache - 2.0 许可证。
📚 引用
@misc{smalldoges,
title={SmallDoges: A Family of Dynamic UltraFast Small Language Models},
author={Jingze, Shi and Yifan, Wu and Bingheng, Wu and Yuyu, Luo},
year={2025},
month={March},
url={https://github.com/SmallDoges/small-doge}
}