这是一个实验和学习性质的开源项目,把DEQ(深度均衡模型)算法和RWKV-v7架构结合起来玩一玩🤗
简单来说,这个项目尝试用更少的模型参数来做和RWKV-v7差不多的事,我用DEQ算法来优化模型结构,看看能不能在保持性能的同时,让模型更轻量一些。
- 传统RWKV-v7:1个768维嵌入的block ≈ 28.7M 文件大小
- 官方最小的0.1B模型:12个block ≈ 344M 文件大小
- DEQ-RWKV:仅需 1个block ,你想想🙃
显存优化:由于DEQ特性,中间的多个block只需存一个block的梯度,大幅降低训练的显存占用
| 文件/目录 | 功能描述 |
|---|---|
| main.ipynb | 用于测试与学习的模型定义和训练流程Jupyter笔记本 |
| train.py | 示例调用model.py去训练的参考代码 |
| model.py | DEQ-RWKV7架构的完整定义,包括模型结构、前向传播等 |
| wkv7.py | CUDA实现的RWKV-v7的wkv模块Python封装接口 |
| tokenizer.py | RWKV官方的分词器,负责文本与token的相互转换 |
| vocab.txt | RWKV的官方词表 |
| cuda/ | 里面是用CUDA写的核心计算代码,也是RWKV官方的 |
| test.jsonl | 一个测试训练效果用的数据集,里面是一些已经转成token的数据 |
注意:main.py里的用到的g1a.pth是rwkv7的官方的某个0.1b模型的参数,可自行下载(哪个都可以),放在主目录就好
如果你想自己捣鼓这个项目,或者学习DEQ算法如何用,直接看代码就好啦~ 训练流程在main.ipynb里写得很清楚(只不过我没怎么写注释😅),如果想看我修改的模型定义,就看model.py
就是想分享一下我实验了很久的代码😅
如果你觉得有用,可以自己拿去改,或者在这个基础上做更多的实验。
有什么问题或者建议,也欢迎提出来一起讨论
- 🖥️感谢 Mingkai Zhou 赞助的算力支持!
- 🙌感谢 RWKV 社区提供的开源代码!
