🚀 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}
}