Connect with us

人工智能

PowerInfer:使用单个消费级GPU的快速大型语言模型服务

mm

由于其出色的内容创建能力,生成式大型语言模型目前处于人工智能革命的前沿,人们正在不断努力提高其生成能力。然而,尽管取得了快速的进展,这些模型仍需要大量的计算能力和资源。这主要是因为它们由数百亿个参数组成。此外,为了平稳运行,生成式人工智能模型依赖于成千上万个GPU,从而导致了显著的运营成本。高运营需求是生成式人工智能模型尚未有效部署在个人设备上的一个关键原因。

在本文中,我们将讨论PowerInfer,一种为标准计算机设计的高速度LLM推理引擎,仅需一块消费级GPU。PowerInfer框架旨在利用LLM推理中的高局部性,具有神经元激活的幂律分布。这意味着在任何时候,一小部分“热”神经元始终在输入中保持活跃,而其余的“冷”神经元则根据特定的输入或要求激活。这种方法使PowerInfer框架能够减少生成式人工智能产生所需输出所需的计算能力。

我们将详细探讨PowerInfer框架,包括其方法论、管道和实际应用结果。让我们开始。

PowerInfer:快速大型语言模型与消费级GPU

生成式大型语言模型,如ChatGPT和DALL-E,以其复杂的生成和自然语言处理任务而闻名。由于其高计算需求,这些模型通常在具有高级GPU的数据中心中部署。需要如此高的计算能力限制了其部署在数据中心,凸显了将大型语言模型部署在更易访问的本地平台(如个人计算机)上的必要性。

增加大型语言模型的可访问性可以降低推理和内容生成成本,提高数据隐私,并允许模型自定义。此外,虽然数据中心部署优先考虑高吞吐量,但本地部署可以专注于低延迟,因为批处理大小较小。

然而,将这些模型部署在本地设备上由于其大量的内存需求而带来重大挑战。大型语言模型作为自回归变换器,一次生成一个文本标记,每个标记都需要访问整个模型,包括数百亿个参数。这需要许多高端GPU来实现低延迟的输出生成。此外,本地部署通常按顺序处理个别请求,限制了并行处理的潜力。

为了解决生成式人工智能框架的复杂内存需求,现有的解决方案采用了诸如模型卸载和压缩等方法。像蒸馏、剪枝和量化等技术可以减少模型大小,但即使这样,对于个人计算机中的标准级别GPU来说仍然太大。模型卸载将变换器层在CPU和GPU之间分区,允许跨CPU和GPU内存分布层处理。然而,这种方法受到慢速PCIe互连和CPU有限的计算能力的限制,导致推理延迟高。

PowerInference框架认为,LLM推理特性与硬件结构之间的不匹配是LLM推理中内存问题的主要原因。理想情况下,经常访问的数据应该存储在高带宽、有限容量的GPU中,而不经常访问的数据应该存储在低带宽、高容量的CPU中。然而,每次LLM推理迭代的参数量太大,使得工作集对于单个GPU来说太大,导致对局部性的利用效率低下。

大型语言模型中的推理过程表现出高局部性,每次迭代只激活有限数量的神经元。PowerInference框架旨在通过使用GPU管理少量“热”神经元,而使用CPU处理“冷”神经元来利用这种局部性。它预先选择和预加载“热”神经元到GPU,并在运行时识别激活的神经元。这种方法最小化了昂贵的PCIe数据传输,允许GPU和CPU独立处理其分配的神经元。

然而,在本地设备上部署LLM面临着障碍。在线预测器对于识别激活的神经元至关重要,但它们占用了大量的GPU内存。PowerInfer框架使用一种自适应方法来构建小型预测器,用于激活偏差和稀疏度较高的层,同时保持准确性并减小尺寸。此外,LLM框架需要专用稀疏运算符。PowerInfer框架采用了神经元感知稀疏运算符,它们直接与神经元通信,消除了在运行时将其转换为密集格式的需要。

最后,最佳地将激活的神经元放置在CPU和GPU之间是一个挑战。PowerInfer框架使用离线阶段创建一个神经元放置策略,测量每个神经元对LLM推理结果的影响,并将其框定为一个整数线性问题。

架构和方法论

以下图表详细说明了PowerInfer框架的架构,包括管道中的离线和在线组件。

由于不同大型语言模型之间的局部性特性存在差异,离线组件可以对LLM框架的激活稀疏度进行概况,允许它区分“热”和“冷”神经元。另一方面,在离线阶段,推理引擎将两种类型的神经元加载到CPU和GPU中,从而在运行时以低延迟处理LLM请求。

离线阶段:策略求解器和LLM配置器

在离线阶段,LLM配置器组件使用来自通用数据集的请求来收集推理过程的激活数据。在第一步中,它监视所有层中神经元的激活,并使用策略求解器组件将神经元分类为“热”或“冷”。策略求解器的主要目标是将激活更频繁的神经元分配给GPU层,将其余的分配给CPU层。在第二阶段,策略求解器组件使用神经元影响指标和硬件规格来平衡层之间的工作量,并通过使用整数线性编程来最大化GPU的影响指标。

在线阶段:神经元感知LLM推理引擎

一旦离线阶段成功执行,框架就会执行在线阶段。在过程的第三步中,根据离线策略求解器的输出,在线引擎在处理用户请求之前将“热”和“冷”神经元分配给各自的处理单元。在运行时,且在步骤4中,在线引擎通过创建在CPU侧运行的CPU和GPU执行器来管理GPU-CPU计算。引擎然后预测激活的神经元,并跳过未激活的神经元。激活的神经元然后预加载到GPU进行处理。同时,CPU计算并传输其神经元的结果以与GPU整合。在线引擎能够专注于矩阵内的个别神经元行和列,因为它在CPU和GPU上使用了神经元感知的稀疏运算符。

自适应稀疏预测器

PowerInfer框架中在线推理引擎减少计算负载的主要概念是,它只处理预测为激活的神经元。传统上,在每个变换器层中,框架使用两个不同的预测器来预测MLP和自注意力块中神经元的激活,从而限制了预测为活跃的神经元的推理计算。然而,设计用于本地部署的有效预测器具有挑战,因为有限的资源使得平衡模型大小和预测准确性变得困难。由于这些预测器被框架频繁部署以预测活跃的神经元,因此它们需要存储在GPU中以实现更快的访问。然而,框架通常部署大量预测器,这些预测器占用了大量内存,甚至超过了存储LLM参数所需的内存。

此外,预测器的大小通常由两个因素决定:LLM层的内部偏差和稀疏度。

为了优化这些因素,PowerInfer框架使用变换器层中每个预测器的迭代训练方法,而不使用固定大小的方法。在此训练方法的第一步中,根据模型的稀疏度配置文件建立基准模型的大小,并通过考虑内部激活偏差来迭代调整模型大小,以保持准确性。

神经元放置和管理

如前所述,当离线策略求解器组件确定神经元放置策略时,在线推理引擎组件根据生成的策略将模型加载到GPU和CPU内存中。对于可能具有多个权重矩阵的每个层,PowerInfer框架根据神经元是否为“热”激活,将每个神经元分配给CPU或GPU。确保在确定的序列中计算分段神经元的准确性对于获得精确的结果至关重要。为了解决这个问题,PowerInfer框架生成两个神经元表:一个位于GPU内存中,另一个位于CPU内存中,每个表将个别神经元与其在矩阵中的原始位置关联起来。

神经元感知运算符

鉴于大型语言模型中观察到的激活稀疏度,不活跃的神经元及其权重可以通过矩阵乘法运算被绕过,从而产生了使用稀疏运算符的需求。与其使用具有多个限制的稀疏运算符,PowerInfer框架使用神经元感知运算符,它们直接在GPU和CPU上计算活跃的神经元及其权重,而无需在运行时将其转换为密集格式。神经元感知运算符与传统的稀疏运算符不同,因为它们专注于矩阵内的个别行和列矢量,而不是专注于整个矩阵。

神经元放置策略

为了利用CPU和GPU的计算能力,PowerInfer框架的离线组件生成一个放置策略,指导框架在将神经元分配给CPU或GPU层时。策略求解器生成此策略,并控制每个层内的神经元放置,这有助于确定每个处理单元的计算工作量。在生成放置策略时,策略求解器组件考虑了各种因素,包括每个神经元的激活频率、通信开销以及每个处理单元的计算能力,例如带宽和内存大小。

结果和实现

为了展示PowerInfer框架在具有不同硬件配置的设备上的通用性,实验是在两台不同的个人电脑上进行的:一台配备了Intel i9-13900K处理器、NVIDIA RTX 4090 GPU和192 GB主内存,另一台配备了Intel i7-12700K处理器、NVIDIA RTX 2080Ti GPU和64 GB主内存。

PowerInfer框架的端到端性能与批量大小为1、默认部署设置的llama.cpp进行了比较。然后,框架从ChatGPT和Alpaca数据集中采样提示,考虑到现实世界对话输入和输出中的长度可变性。以下图表显示了不同模型的生成速度。

如图所示,PowerInfer框架每秒生成8.32个标记,并达到每秒16个标记的峰值,从而以显著的差距超越了llama.cpp框架。此外,随着输出标记数量的增加,PowerInfer框架的性能也会提高,因为生成阶段对整体推理时间有着显著的影响。

此外,如上图所示,PowerInfer框架在低端PC上超越了llama.cpp框架,峰值生成速度为每秒7个标记,平均标记生成速度为每秒5个标记。

上图显示了两个框架中GPU和CPU之间的神经元负载分布。如图所示,PowerInfer框架显著增加了GPU的神经元负载份额,从20%增加到70%。

上图比较了两个框架在两台具有不同规格的PC上的性能。如图所示,PowerInfer框架在输出标记生成速度方面始终优于llama.cpp框架。

总结

在本文中,我们讨论了PowerInfer,一种为标准计算机设计的高速度LLM推理引擎,仅需一块消费级GPU。PowerInfer框架旨在利用LLM推理中的高局部性,这种方法以神经元激活的幂律分布为特征。PowerInfer框架是一种为大型语言模型设计的快速干预系统,利用自适应预测器和神经元感知运算符来激活神经元和计算稀疏度。

专业为工程师,心为作家。 Kunal是一名技术作家,对AI和ML有着深厚的热爱和理解,致力于通过其引人入胜和信息丰富的文档来简化这些领域中的复杂概念。