| --- |
| license: apache-2.0 |
| language: |
| - zh |
| - en |
| tags: |
| - open-mythos |
| - pytorch |
| - recurrent-depth-transformer |
| - mixture-of-experts |
| - small-model |
| - pretraining |
| - multi-domain |
| metrics: |
| - type: eval_loss |
| value: 4.87 |
| pipeline_tag: text-generation |
| datasets: |
| - ShengbinYue/DISC-Law-SFT |
| - bigbio/pubmed_qa |
| - wikimedia/wikipedia |
| - flytech/python-codes-25k |
| - roneneldan/TinyStories |
| --- |
| |
| # OpenMythos-100M-Mixed |
|
|
| ## 模型简介 |
|
|
| 这是首个基于 **OpenMythos** 开源架构的**公开预训练 checkpoint 系列**。 |
| OpenMythos 实现了**循环深度变换器(Recurrent-Depth Transformer, RDT)**, |
| 通过在核心计算模块中引入循环机制来扩展模型深度。 |
|
|
| 该模型具有约 **112.9M 参数**,在 **六个领域的混合数据**上完成了两阶段预训练(30K + 50K 步,共 80K 步)。 |
| 全部训练在消费级硬件 **NVIDIA GeForce GTX 1050 Ti (4GB)** 上完成。 |
|
|
| ## 模型架构 |
|
|
| | 组件 | 配置 | |
| |------|------| |
| | 架构 | OpenMythos (RDT + MoE) | |
| | 注意力机制 | GQA (Grouped Query Attention) | |
| | 总参数量 | 112,898,594 (≈112.9M) | |
| | 词表大小 | 199,998 (openai/gpt-oss-20b tokenizer) | |
| | 模型维度 | 512 | |
| | 注意力头数 | 8 (KV 头: 4) | |
| | 专家数量 | 4 路由专家 + 1 共享专家 | |
| | 每 token 激活专家数 | 2 | |
| | 专家维度 | 256 | |
| | LoRA 秩 | 8 | |
| | 循环深度 | prelude=2, max_loop_iters=4, coda=2 (运行时深度 8) | |
| | 最大序列长度(训练) | 256 | |
| | 最大序列长度(推理) | 256 | |
|
|
| ## 训练数据 |
|
|
| 模型在以下六个领域的混合数据上训练(使用 `interleave_datasets` 流式交错采样): |
|
|
| | 数据集 | 领域 | 阶段1权重 | 阶段2权重 | |
| |--------|------|-----------|-----------| |
| | [DISC-Law-SFT](https://huggingface.co/datasets/ShengbinYue/DISC-Law-SFT) | 中文法律 | 20% | 25% | |
| | [pubmed_qa (context)](https://huggingface.co/datasets/pubmed_qa) | 英文医学 | 20% | 25% | |
| | [pubmed_qa (QA)](https://huggingface.co/datasets/pubmed_qa) | 家庭医生问答 | 10% | 15% | |
| | [wikipedia 20231101.zh](https://huggingface.co/datasets/wikimedia/wikipedia) | 中文百科 | 10% | 15% | |
| | [python-codes-25k](https://huggingface.co/datasets/flytech/python-codes-25k) | Python 代码 | 20% | 15% | |
| | [TinyStories](https://huggingface.co/datasets/roneneldan/TinyStories) | 小说创作 | 20% | 5% | |
|
|
| > 阶段2 调整了数据配比:降低了小说权重,提高了法律、医学和百科的占比,使模型更好地学习专业知识。 |
|
|
| ## 训练历程 |
|
|
| 模型分两阶段训练,总计 80,000 步: |
|
|
| | 阶段 | 起始 | 训练步数 | 数据配比 | 说明 | |
| |------|------|----------|----------|------| |
| | 阶段1 | 随机初始化 | 30,000 | 均衡配比 | 基础预训练,loss 从 12.3 降至 5.17 | |
| | 阶段2 | 30K checkpoint | 50,000 | 强化专业领域 | 继续训练,loss 进一步降至 4.87 | |
|
|
| ## 训练超参数 |
|
|
| | 参数 | 阶段1 (0-30K) | 阶段2 (30K-80K) | |
| |------|---------------|-----------------| |
| | 训练步数 | 30,000 | 50,000 | |
| | 最大序列长度 | 256 | 256 | |
| | 批次大小 | 1 | 1 | |
| | 学习率 | 固定 3e-4 | 3e-4 → 1e-5 (warmup 1K + cosine decay) | |
| | 优化器 | AdamW (β1=0.9, β2=0.95, weight_decay=0.1) | 同 | |
| | 梯度裁剪 | 1.0 | 1.0 | |
| | 混合精度 | FP16 (autocast + GradScaler) | 同 | |
| | 训练硬件 | NVIDIA GTX 1050 Ti (4GB) | 同 | |
| | 阶段训练 token 数 | ≈ 7,680,000 | ≈ 12,800,000 | |
| | **总训练 token 数** | | **≈ 20,480,000** | |
| | 阶段耗时 | ≈ 3.5 小时 | ≈ 6.7 小时 | |
| | **总耗时** | | **≈ 10.2 小时** | |
| |
| ## 评估结果 |
| |
| 所有评估使用相同的数据配比和随机种子。验证 loss 越低越好。 |
| |
| | Checkpoint | 训练步数 | 验证 Loss (n_loops=4) | 相比上一版本提升 | |
| |------------|----------|------------------------|-----------------| |
| | 30K | 30,000 | 5.17 | — | |
| | **80K** | **80,000** | **4.87** | **↓ 0.30 (-5.8%)** | |
|
|
| **关键发现**: |
| - 第二阶段新增 50K 步训练带来了 **5.8% 的验证 loss 降低**,说明模型仍在有效学习。 |
| - 调整数据配比(强化专业领域)的同时,验证 loss 持续下降,证明配方改进有效。 |
| - 在仅使用 4GB 显存的消费级 GPU 上,将 100M 模型训练到可用水平是**完全可行的**。 |
|
|
| ## 深度外推能力 |
|
|
| OpenMythos 架构的核心优势是**推理时可使用与训练时不同的循环深度**。 |
| 以下是 80K checkpoint 在不同 `n_loops` 下的表现: |
|
|
| | n_loops | 验证 Loss | Δ vs n_loops=4 | |
| |---------|-----------|-----------------| |
| | 1 | 7.16 | +2.29 | |
| | 2 | 7.03 | +2.16 | |
| | **4(训练深度)** | **4.87** | **0(基线)** | |
| | 8 | 4.96 | +0.09 | |
| | 16 | 4.96 | +0.09 | |
|
|
| **深度外推分析**: |
| - n_loops=4 相比 n_loops=1 有 **2.29 的巨大优势**,证明循环深度机制在有效工作。 |
| - 从 30K 到 80K,n_loops=1 vs 4 的差距从 1.0 扩大到 2.29,说明模型越来越依赖多次循环。 |
| - n_loops=8/16 目前略差于训练深度(4),这是正常的——模型需要在推理时见过的循环次数上表现最好。 |
| - 未来若在不同 n_loops 下进行多深度训练,有望实现更强的深度外推。 |
| |
| ## 使用方法 |
| |
| ### 环境要求 |
| |
| ```bash |
| pip install torch datasets loguru |
| git clone https://github.com/kyegomez/OpenMythos.git |
| cd OpenMythos |
| pip install -e . |
| |
| ### 加载模型 |
| |
| import torch |
| from open_mythos import OpenMythos |
| from open_mythos.main import MythosConfig |
| from open_mythos.tokenizer import MythosTokenizer |
|
|
| # 配置模型(必须与训练时一致) |
| cfg = MythosConfig( |
| vocab_size=199998, |
| dim=512, |
| n_heads=8, |
| n_kv_heads=4, |
| max_seq_len=256, |
| max_loop_iters=4, |
| prelude_layers=2, |
| coda_layers=2, |
| attn_type="gqa", |
| n_experts=4, |
| n_shared_experts=1, |
| n_experts_per_tok=2, |
| expert_dim=256, |
| lora_rank=8, |
| rope_theta=500000.0, |
| dropout=0.0, |
| kv_lora_rank=256, |
| q_lora_rank=512, |
| qk_rope_head_dim=32, |
| qk_nope_head_dim=64, |
| v_head_dim=64, |
| ) |
| |
| # 加载模型(推荐使用 80K checkpoint) |
| model = OpenMythos(cfg) |
| model.load_state_dict(torch.load("mythos_100m_mixed_80k.pt", map_location="cpu")) |
| model.eval() |
|
|
| # 推理 |
| tokenizer = MythosTokenizer() |
| prompt = "Question: What are the symptoms of diabetes?\nAnswer:" |
| ids = tokenizer.encode(prompt) |
| x = torch.tensor([ids]) |
| with torch.no_grad(): |
| output = model.generate(x, max_new_tokens=100, n_loops=4, temperature=0.8) |
| print(tokenizer.decode(output[0].tolist())) |
|
|
| ## 预期用途与限制 |
|
|
| 预期用途: |
|
|
| 作为基础模型,用于微调特定领域的任务(如法律文书、医学问答等) |
|
|
| 为研究者提供探索 RDT 架构学习动态的平台 |
|
|
| 作为教学工具,展示如何在小规模 GPU 上训练自定义架构的模型 |
|
|
| 作为 OpenMythos 架构的首个公开社区 checkpoint 系列 |
|
|
| 局限性: |
|
|
| 由于模型规模和数据量的限制,生成的事实性知识可能不准确 |
|
|
| 不建议直接用于生产环境 |
|
|
| 模型在处理长程依赖和高度复杂的推理任务时仍有局限 |
|
|
| 当前版本仅支持 256 token 上下文,长文本能力有限 |
|
|
| 后续计划 |
| 30K 基础预训练 |
|
|
| 80K 强化专业领域训练(数据配比优化) |
|
|
| 超算上继续训练(seq_len=1024, batch_size=2) |
|
|
| 64GB 卡长上下文训练(seq_len=2048) |
| |
| 领域微调版本(法律专版、医学专版等) |
| |
| 模型量化(int8/int4)以支持更广泛的部署 |
| |
| 致谢 |
| 感谢 Kye Gomez 开源 OpenMythos 架构 |
| |
| 感谢 DeepSeek 及其他 AI 助手提供的技术支持 |
| |
| 感谢开源社区提供的工具和数据集 |
| |
| 特别感谢 Hugging Face 和所有数据集作者 |
| |
| 引用 |
| 如果你使用了该模型或本训练配方,欢迎引用: |
| |
| @misc{openmythos-100m-mixed, |
| author = {dgcrxs}, |
| title = {OpenMythos-100M-Mixed: A 100M Recurrent-Depth Transformer Trained on Multi-Domain Data}, |
| year = {2026}, |
| publisher = {Hugging Face}, |
| howpublished = {\url{https://huggingface.co/dgcrxs/OpenMythos-100M-Mixed}}, |
| } |
| |
| 许可证 |
| 本项目采用 Apache 2.0 许可证。 |
| |
| 联系 |
| 如有问题或建议,欢迎在 GitHub Issues 或本仓库的讨论区留言。 |