把 250M 参数模型压到 60MB 部署
最近在刷 Reddit 的机器学习版块,看到一个非常有意思的硬核项目。作者从零开始训练了一个 250M 参数的小模型,最离谱的地方在于他把模型量化到了 2 bit 以下,导致整个部署包只有 60 MB,运行起来只需要 80 MB 左右的内存。这种规格在现在的 AI 圈简直像是个异类,不需要任何 GPU,在普通的笔记本 CPU 上就能跑到 400 tokens/s 的速度。
需要注意的是,由于算力预算有限,这个模型目前主要强在“检索”和“提取”信息,而不是对超长文本进行深度逻辑推理。
这个项目的核心思路不是靠堆参数,而是靠极端的压缩和一种很聪明的长文本处理机制。
这种极低比特是怎么做到的
通常我们聊量化,顶多也就是 4 bit 或者 8 bit,作者直接把模型压到了 2 bit 以下。为了让这么小的模型还能具备一定的检索能力,他在处理长上下文时用了一种“分层存储”的策略:
- 活跃缓存: 最近的 2048 个 token 保持 fp16 精度,作为正常的 KV Cache 存在内存里。
- 压缩存档: 超过这个长度的历史信息会被压缩成 1 bit,直接写到磁盘上。每个 token 大约只占 320 字节。
- 超长检索: 这种机制让模型理论上可以检索高达 1 亿个 token 的历史记录,存储成本也极低(100 万 token 的历史也就 320 MB 磁盘占用)。
需要注意的是,由于算力预算有限,这个模型目前主要强在“检索”和“提取”信息,而不是对超长文本进行深度逻辑推理。
词表部分的黑科技
还有一个细节值得深挖,这个模型的词表(Vocabulary)并不是传统的 Embedding Table。作者给每个 token 分配了一个固定的 512-bit 代码,这部分完全没有可训练参数,总大小才 8.4 MB。虽然这看起来很反直觉,但他在 WordSim-353 测试中的 Spearman 相关系数达到了 0.619,远超随机编码的 0.029,说明这种编码方式确实保留了语义特征。
实测表现怎么样
虽然模型只有 250M,逻辑能力肯定比不上现在的 Llama 3 或者 Claude,但在特定任务上表现很稳。比如我看了他给出的测试案例,让模型从 5000 多万个 token 之外的磁盘存档里找一个设备序列号,它居然准确地把 SN-442976 给拎出来了。
对于想要研究极低比特量化或者边缘侧设备部署的开发者来说,这个项目非常有参考价值。他把完整的训练套件、微调用的权重以及 Demo 都开源了。
项目地址:
https://github.com/QLNI/SHADOW-250M-InstructHuggingFace 权重:
https://huggingface.co/NODEMIND/SHADOW-250M 事件追踪 · 相关报道
手机端20B MoE大模型实时推理?
17天前
免费 AI 工具箱 · 全部完全免费