miniLLM
miniLLM 是一个用于学习、实验和本地部署的轻量级因果语言模型。它采用 Decoder-only Transformer、分组查询注意力(GQA)、RoPE 和稀疏混合专家(Sparse MoE)架构。
本目录保存的是项目当前经强化学习对齐后的策略模型,适合进行对话生成、指令遵循实验和部署演示。它仍然是一个约 2 亿参数的小型实验模型,不应被视为具备生产级可靠性的通用助手。
[!IMPORTANT] 模型可能生成错误、虚构、有偏见或不安全的内容。请勿在无人审核的情况下将输出用于医疗、法律、金融等高风险决策。
模型信息
| 项目 | 配置 |
|---|---|
| 任务类型 | 自回归文本生成(Causal Language Modeling) |
| 架构 | Decoder-only Transformer + Sparse MoE |
| 总参数量 | 199,791,360(约 199.8M) |
| 每 Token 激活参数量 | 约 65.3M |
| Transformer 层数 | 8 |
| 隐藏维度 | 768 |
| 注意力 | GQA:8 个 Query Heads / 4 个 KV Heads |
| Attention Head Dim | 96 |
| MoE | 4 Experts,Top-1 路由 |
| Expert 中间维度 | 2,432 |
| 词表大小 | 8,192 |
| 最大位置长度 | 32,768 |
| 位置编码 | RoPE,theta = 1,000,000 |
| 归一化 | RMSNorm,eps = 1e-6 |
| 权重精度 | FP32 |
| 权重共享 | Token Embedding 与 LM Head 共享 |
| 对话格式 | ChatML 风格 |
32,768 是配置所允许的最大位置长度,并不表示模型已经在所有长上下文长度上得到充分训练或验证。
目录内容
out/miniLLM_model/
├── README.md
├── chat_template.jinja
├── config.json
├── generation_config.json
├── model.safetensors
├── tokenizer.json
└── tokenizer_config.json
| 文件 | 用途 |
|---|---|
model.safetensors |
FP32 模型权重,约 762 MiB |
config.json |
模型结构、MoE 参数和 Tokenizer 指纹 |
generation_config.json |
默认生成配置 |
tokenizer.json |
8K 词表 Tokenizer |
tokenizer_config.json |
特殊 Token 和最大长度配置 |
chat_template.jinja |
对话、思考过程和工具调用模板 |
特殊 Token 如下:
| Token | ID | 用途 |
|---|---|---|
<|endoftext|> |
0 | Padding / Unknown |
<|im_start|> |
1 | 消息开始(BOS) |
<|im_end|> |
2 | 消息结束(EOS) |
环境安装
请在项目根目录执行:
pip install -r requirements.txt
推荐使用 Python 3.10 或更高版本。主要依赖包括 PyTorch、Transformers、Tokenizers、Safetensors 和 Jinja2。
[!NOTE] 模型依赖项目中的
model/model_minillm.py。由于导出配置没有注册auto_map,请使用MiniLLMConfig和MiniLLMForCausalLM加载,而不是直接调用通用的AutoModelForCausalLM。以下示例应从项目根目录运行。
适用场景
- 学习小型语言模型的结构、训练、对齐和部署流程
- 本地对话与文本生成实验
- SFT、LoRA、DPO、PPO 或 GRPO 等后续训练的初始化模型
- MoE 路由、GQA、RoPE 和 KV Cache 的教学研究
- 低成本原型与演示
已知限制
- 模型规模较小,知识容量、复杂推理、代码生成和长文本一致性有限。
- 强化学习对齐不保证事实正确性、安全性或稳定的指令遵循。
- 生成内容可能重复、偏离问题或混合语言,也可能无法正确结束输出。
- 虽然配置支持 32K 上下文,但实际效果会受到训练序列长度、数据分布、内存和推理实现的影响。
- 稀疏 MoE 每个 Token 只激活一个 Expert;总参数量不等于单次前向传播的激活参数量。
- 当前目录未包含训练数据版本、训练步数、训练损失或标准基准测试结果,因此不声明具体效果指标。
- FP32 权重约占 762 MiB;实际运行还需要为激活值、KV Cache 和框架开销预留额外内存。