--- 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 或本仓库的讨论区留言。