思路:在CPU上,解码速度取决于每个token的活跃参数,而非总参数。我的目标是尝试在中等配置PC(无GPU)上以100tok/s运行一个10B模型。

Reddit r/LocalLLaMA 论文

摘要

提出了CPU解码速度取决于每个token的活跃参数而非总参数的见解,并提出一个使用三元权重和细粒度MoE的10B参数模型,以在中等配置PC上实现高token速率。报告了沙箱测量结果,显示在8.3M模型上速度从176 tok/s提升到848 tok/s,且质量损失极小。

在CPU上,batch 1受内存带宽限制。但如果 token/s = 带宽 / (每权重字节数 * 每个token的活跃权重数),那么总参数数量并不会减慢生成速度。因此,围绕每个token的一小组“活跃参数”来构建架构(三元权重和细粒度MoE),总容量可以增长而不影响速度。现在的新问题是:如果速度不是问题(105M和206M模型以相同的tok/s运行(预测739–1309 tok/s)),模型容量会随参数数量扩展,还是模型会因为专家增多而缺乏路由容量,变得“更笨”?我的测量结果:在Ryzen r5 3600X(单线程)上,引擎在8.3M沙箱模型上从176 tok/s提升到848 tok/s,使用了三元LUT MLP、激活跳过、确定性SSM扫描、双池MoE,仅增加了+0.00004 BPB的质量成本。(这里模型是缓存驻留的。)我在Kaggle的2x T4上启动了一个30M(11M活跃)模型的完整训练。运行前我进行了5项门控实验。四项通过,一项失败:使用不同分词器从更大的教师模型蒸馏,输给了简单的交叉熵(-0.0116 BPB,约相差2.3个sigma),因此我将配方改为以CE为主。这是一个我设想的100%透明项目。(8.3M沙箱之上尚未训练任何东西,10B是目标。)仓库在评论中。
查看原文

相似文章