具体来说,PowerInfer 是一个用于本地布置 LLM 的高速推理引擎。与那些选用多专家系统(MoE)不同的是,PowerInfer 经过使用 LLM 推理中的高度局部性,奇妙的规划了一款 GPU-CPU 混合推理引擎。
它的作业原理是这样的,将频频激活的神经元(即热激活,hot-activated)预加载到 GPU 上以便快速拜访,而不常激活的神经元(冷激活,cold-activated)(占大多数)则在 CPU 上核算。
看到这项研讨后,网友激动的标明:单卡 4090 跑 175B 大模型不再是梦。
PowerInfer 规划的关键是使用 LLM 推理中固有的高度局部性,其特征是神经元激活中的幂律散布。这种散布标明,一小部分神经元(称为热神经元)跨输入共同激活,而大多数冷神经元则依据特定输入而改变。PowerInfer 使用这种机制规划了 GPU-CPU 混合推理引擎。
下图 7 展现了 PowerInfer 的架构概述,包含离线和在线组件。离线组件处理 LLM 的激活稀少,区别热神经元和冷神经元。在线阶段,推理引擎将两种类型的神经元加载到 GPU 和 CPU 中,在运转时以低推迟服务 LLM 恳求。
图 8 说明晰 PowerInfer 怎么和谐 GPU 和 CPU 来处理层之间的神经元。PowerInfer 依据离线数据对神经元进行分类,将热激活的神经元(例如索引 3、5、7)分配给 GPU 内存,将其他神经元分配给 CPU 内存。
一旦接收到输入,预测器就会辨认当时层中哪些神经元或许会被激活。有必要留意一下的是,经过离线统计分析辨认的热激活神经元或许与运转时激活行为不共同。例如,神经元 7 尽管标记为热激活,但现实却并非如此。然后,CPU 和 GPU 都会处理激活的神经元,疏忽没有激活的神经元。GPU 核算神经元 3 和 5,而 CPU 处理神经元 4。神经元 4 的核算完成后,其输出将发送到 GPU 进行成果集成。
因为本文专心于低推迟设置,因而评价目标是端到端生成速度,量化为每秒生成 token 的数量(tokens/s)。
跟着输出 token 数量的添加,PowerInfer 的功能优势变得更明显,因为生成阶段在全体推理时间中扮演着更重要的人物。在此阶段,CPU 和 GPU 上都会激活少数神经元,与 llama.cpp 比较,减少了不必要的核算。例如,在 OPT-30B 的情况下,每生成一个 token,只要大约 20% 的神经元被激活,其间大部分在 GPU 上处理,这是 PowerInfer 神经元感知推理的优点。
图 11 显现,在 PC-Low 上,PowerInfer 依然比 llama.cpp 获得了相当大的功能增强,均匀加快为 5.01 倍,峰值为 7.06 倍。但是,与 PC-High 比较,这些改善较小,主要是因为 PC-Low 的 11GB GPU 内存约束。此约束会影响可分配给 GPU 的神经元数量,特别是关于具有大约 30B 参数或更多参数的模型,导致更大程度地依赖于 CPU 来处理很多激活的神经元。
图 12 显现了 PowerInfer 和 llama.cpp 的 CPU 和 GPU 之间的神经元负载散布。有必要留意一下的是,在 PC-High 上,PowerInfer 明显添加了 GPU 的神经元负载比例,从均匀 20% 添加到 70%。这标明 GPU 处理了 70% 的激活神经元。但是,在模型的内存需求远超于 GPU 容量的情况下,例如在 11GB 2080Ti GPU 上运转 60GB 模型,GPU 的神经元负载会下降至 42%。这种下降是因为 GPU 的内存有限,不足以包容一切热激活的神经元,因而就需要 CPU 核算这些神经元的一部分。
最终,该研讨还评价了 PowerInfer 在不同批巨细下的端到端推理功能,如图 14 所示。当批巨细小于 32 时,PowerInfer 体现出了明显的优势,与 llama 比较,功能均匀提高了 6.08 倍。跟着批巨细的添加,PowerInfer 供给的加快比会下降。但是,即便批巨细设置为 32,PowerInfer 仍就坚持了相当大的加快。