MiniWin

June 5, 2026 · View on GitHub

logo

中文 | English


MiniWin

MiniWin 是在 MiniMind 基础上修改得到的小型语言模型项目,核心改动来自论文 Periodic RoPE for Infinite Context LLMs(P-RoPE),受Iwin Transformer启发不断改进得到。

当序列长度超过预训练位置编码范围时,标准 RoPE 会出现位置编码耗尽(position exhaustion),长上下文性能随之下降。MiniWin 通过 Periodic RoPE(P-RoPE)Sliding Window Attention(SWA) 处理局部依赖,并配合 No Positional Encoding(NoPE) 的全局注意力层,在理论上支持更长的上下文窗口。

主要特性

  • P-RoPE:周期性位置编码,缓解 RoPE 外推失效问题
  • SWA + NoPE 混合层:局部窗口内建模相对位置,全局层实现无位置约束的跨序列交互
  • 保留 MiniMind 的训练流程:预训练、SFT、LoRA、DPO、RL 等
  • 原生 PyTorch 实现,支持单卡 / 多卡训练

快速开始

环境

pip install -r requirements.txt

数据集

使用 MiniMind 开源数据集,下载后放到 ./dataset/ 目录:

快速复现推荐:pretrain_hq.jsonl + sft_mini_512.jsonl

训练

进入 trainer 目录:

# 预训练
python train_pretrain.py

# 监督微调
python train_full_sft.py

多卡训练:

torchrun --nproc_per_node N train_pretrain.py
torchrun --nproc_per_node N train_full_sft.py

断点续训:添加 --from_resume 1

其他训练脚本(LoRA、DPO、PPO/GRPO 等)见 trainer/ 目录。

预训练模型

已训好的 SFT 权重(768 dim):

下载后放到 ./out/ 目录:

mkdir -p out
wget -O out/full_sft_768.pth https://github.com/Cominder/miniwin/releases/download/models/full_sft_768.pth

推理

python eval_llm.py --weight full_sft

项目结构

miniwin/
├── model/          # MiniWin 模型(P-RoPE、SWA、NoPE)
├── dataset/        # 数据集加载
├── trainer/        # 训练脚本
└── scripts/        # 工具脚本

引用

若本工作对你有帮助,请引用:

@article{huo2026periodic,
  title={Periodic RoPE for Infinite Context LLMs},
  author={Huo, Simin},
  journal={arXiv preprint arXiv:2605.27980},
  year={2026}
}

MiniMind 基础项目:

@misc{minimind,
  title={MiniMind: Train a Tiny LLM from scratch},
  author={Jingyao Gong},
  year={2024},
  howpublished={https://github.com/jingyaogong/minimind}
}

License

本项目采用 Apache-2.0 License