DuoGPT-40M(一代)
从零训练的 38.85M 参数英文小模型,消费级显卡(RTX 4060 Laptop 8GB)单卡训完。
|
|
| 参数 |
38,854,144(bf16 约 78MB) |
| 架构 |
Llama 风格:11 层 / d512 / 8 头 / SwiGLU / RoPE / RMSNorm,无 bias,权重绑定 |
| 词表 |
8192(自训 byte-level BPE) |
| 上下文 |
512 token |
| 预训练 |
745M token,3.37 小时,val ppl 4.96 |
| SFT |
334K 条(摘要 + 按词写故事),2.07 小时,val ppl 2.99 |
GGUF / Ollama 用法
本仓库同时提供了 GGUF 格式(由 model/lit_model.pth 直接转换,模板保持与训练一致),可直接用 Ollama 导入:
# 从 HF 拉取 GGUF(选一个量化档)
curl -L -o duogpt-40m.gguf \
https://huggingface.co/Duoia/duogpt-40m-v1/resolve/main/duogpt-40m-v1-q4_k_m.gguf
# 用仓库里的 Modelfile 导入
ollama create duogpt-40m -f Modelfile
ollama run duogpt-40m "Where is Mary?"
| 文件 |
大小 |
说明 |
duogpt-40m-v1-q4_k_m.gguf |
36 MB |
推荐日常用(Q4_K_M 量化) |
duogpt-40m-v1-f16.gguf |
83 MB |
无量化,质量最高 |
Modelfile |
- |
Ollama 导入配置(模板已按训练格式设置) |
GGUF 版与 litgpt 版的 /q /s /t 命令效果一致:模板里已内置 <|user|> 包装,
直接 ollama run duogpt-40m "<问题>" 即等价于旧版 /q。
快速开始
pip install -r requirements.txt # 主要是 litgpt==0.5.13 + torch
bash scripts/chat.sh # 交互对话(默认加载 SFT 版)
bash scripts/ask.sh "Summarize the following story in one sentence." # 单次提问
如果 python3 不是装好依赖的那个解释器,用 PYTHON=/path/to/python bash scripts/chat.sh 指定。
scripts/chat.sh 里的三种问法:
/q <问题> 裸问句
/s <故事> | <问题> 带小故事的阅读理解
/t <指令> | <输入> 任意任务(概括、写故事都走这个)
目录
model/ SFT 版(推荐日常使用;会写故事/概括/做简单问答)
src/duogpt_prompt.py 必需的对话模板类(litgpt 加载时会找它,PYTHONPATH 已由脚本设好)
scripts/chat.sh 交互入口(自动指向本包内的模型)
scripts/ask.sh 单次提问入口
scripts/chat.py chat.sh 的实现(一次加载、连续提问)
MODEL_CARD.md 完整模型卡:架构参数分布、数据构成、训练超参、评测数字
用法示例
# 明确任务(模型最擅长这类)
bash scripts/ask.sh "Write a short story for young children using these words: moon, basket, tiny"
bash scripts/ask.sh "Summarize the following story in one or two sentences.
Once upon a time, there was a little girl named Lily. She found a shiny red ball."
# 换模型 / 换参数
TEMP=0.3 MAXTOK=40 bash scripts/chat.sh
在 Python 里直接用:
from litgpt import LLM
llm = LLM.load("model") # 自动读取包内的 prompt_style
print(llm.generate("Summarize the following story in one sentence.\nOnce upon a time...",
max_new_tokens=60, temperature=0.7))
已知限制(重要,避免误判)
- 只会做被交代的任务:给它一句裸问题(如
What is a volcano?)它不会回答;必须像上面那样把任务写清楚。
- 没有知识:训练语料只有儿童故事,问事实性问题会瞎编。
- 上下文上限 512 token:prompt + 生成长度之和;超出会报
Cannot forward sequence of length T。
- 写着写着会跑偏:39M 模型的常见病,长文本后半段容易失去一致性(实体串味、重复)。
- 英文为主,只有儿童级词汇。
数据来源与许可
- 预训练语料:TinyStoriesV2-GPT4(CDLA-Sharing-1.0)与 Children-Stories(用户自备,含 GPT 生成内容)
- 本包模型权重由上述数据从零训练得到,仅供研究与个人使用;若再分发请一并保留此说明与 MODEL_CARD.md。