SmallThinker A Family of Efficient Large Language Models Natively Trained for Local Deployment
回应我在 EdgeMoE 结尾提出的暴论:所有需要离线 Profiling 的工作都应该由 LLM 厂家在训练时实现。 我们不应该问“如何把云端模型塞进本地设备?”,而应该问“如果我们从一开始就为本地设备的限制而设计,一个大语言模型会是什么样子?”。 SmallThinker 模型家族是一个从零开始、原生为本地部署而设计的全新架构。它将本地设备的弱计算能力、有限内存和慢速存储这三大限制,转化为了架构设计的核心原则。 Insights Sparsity is all you need Predict-and-prefetch is all you need Model Architecture Fine-Grained Mixture of Experts SmallThinker 旨在引入稀疏性来大幅降低计算负载,该架构由四个关键部分组成: 基础 MoE 架构:模型采用了 MOE 架构。4B 模型配置了 32 个专家,而 21B 模型则配置了 64 个专家。这种设计可以在保持巨大总参数量(从而保证模型的知识容量)的同时,显著减少单次推理所需的实际计算量 基于稀疏 ReGLU 的 FFN: 为了在MoE的结构稀疏性之上实现第二层稀疏,每个专家内部都使用了ReGLU激活函数。ReLU系列的激活函数天然会使许多神经元的输出变为零,从而在专家内部诱导出“神经元级别的稀疏性”。这意味着,即使一个专家被路由激活,其内部仍有大量神经元是不参与计算的。这为后续的计算优化提供了基础,进一步降低了计算和I/O开销 预注意力路由:最具创新性的设计之一 传统做法:在大多数 MoE 模型中,Router 模块位于 Attention 模块之后 SmallThinker: 将 Router 放在了 Attention 模块之前 允许模型在执行计算密集型的注意力操作的同时,提前预测出接下来需要哪些专家。推理引擎可以利用这个时间窗口,并行地从慢速的SSD中 prefetch 所需专家的参数到内存中。当注意力计算完成时,专家参数也已准备就绪,从而隐藏 I/O 延迟 DP-Groups 全局负载均衡损失: 解决一个 MoE 训练中的固有矛盾:既要让专家“专业化”,又要避免训练不均衡 SmallThinker 采用了一种更宽松的、在数据并行的分组(DP-Groups)内进行负载均衡的策略。这允许不同的小组根据自己的数据“培养”出各自的专业化专家,既实现了功能上的专业化,又保持了训练的稳定性,且几乎不增加额外的训练开销 ...