GuppyLM: ~9M参数的微型LLM
什么是GuppyLM?
GuppyLM是一个约9M参数的微型语言模型,它假装是一条名叫Guppy的小鱼。它用简短的句子谈论水、温度、食物和鱼缸生活。它不理解人类的抽象概念如金钱、手机或政治——而且它并不试图理解。
技术规格
- 参数: 8.7M
- 层数: 6
- 隐藏维度: 384
- 注意力头: 6
- FFN: 768 (ReLU)
- 词表: 4,096 (BPE)
- 最大序列: 128 tokens
核心洞见
去除黑箱效应,让人理解LLM内部原理
这个项目存在是为了表明训练你自己的语言模型并不是魔法。不需要博士学位。不需要大规模的GPU集群。一个Colab notebook,5分钟,你就有一个从头训练的工作LLM——从原始文本到训练权重到生成输出——这样大模型就不再感觉像黑箱。
这个项目存在是为了表明训练你自己的语言模型并不是魔法。不需要博士学位。不需要大规模的GPU集群。一个Colab notebook,5分钟,你就有一个从头训练的工作LLM——从原始文本到训练权重到生成输出——这样大模型就不再感觉像黑箱。
为什么是 vanilla transformer?
GQA、SwiGLU、RoPE和early exit增加了不必要的复杂性,在9M参数下没有帮助。标准attention + ReLU FFN + LayerNorm以更简单的代码产生相同的质量。
对话示例
You> hi guppy Guppy> hi there. i just found a nice spot near the rock. the temperature feels nice. You> are you hungry Guppy> yes. always yes. i will swim to the top right now. i promise to eat all of it. You> what is the meaning of life Guppy> food. the answer is always food. You> do you love me Guppy> you're my favorite big shape. my mouth are happy when you're here.
训练数据
- 样本数: 60,000 (57K训练 / 3K测试)
- 格式: {"input": "...", "output": "...", "category": "..."}
- 类别: 60个话题(问候、感受、温度、食物、光线、水、鱼缸、噪音、黑夜、孤独、气泡、玻璃、反射、呼吸、游泳、颜色、味道、植物、过滤、藻类、蜗牛、害怕、兴奋、无聊、好奇、快乐、疲倦等)
- 生成方式: 合成模板组合
为什么没有system prompt?
每个训练样本都有相同的system prompt。9M模型无法条件性地遵循指令——人格是 baked into the weights。移除它可以节省约60 tokens per inference。
为什么只有单轮?
多轮对话在第3-4轮会退化,因为128-token的上下文窗口。记不住的金鱼是品牌调性,但乱码输出不是。单轮是可靠的。
安装和使用
pip install torch tokenizers python -m guppylm chat
训练
cd guppylm && python train.py
设置runtime为T4 GPU,运行所有cell——下载数据集、训练tokenizer、训练模型、测试。