AI 模型与平台

PowerInfer:快速大型语言模型,采用消费级GPU

mm
将 Unite.AI 添加到您在 Google 上的首选来源

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

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

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

PowerInfer:快速大型语言模型,采用消费级GPU

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

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

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

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

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

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

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

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

架构和方法论

以下图表详细说明了PowerInfer框架的架构,该架构由离线和在线组件组成。

由于不同大型语言模型的局部性特性存在差异,离线组件可以对LLM框架的激活稀疏度进行profiling,从而区分热神经元和冷神经元。在离线阶段,推理引擎将两种类型的神经元加载到CPU和GPU中,以便在运行时提供低延迟的LLM请求服务。

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

在离线阶段,LLM配置器组件使用来自通用数据集的请求来收集推理过程的激活数据。首先,它监控框架中所有层的神经元激活,然后使用策略求解器组件将神经元分类为热神经元或冷神经元。策略求解器的主要目标是将激活频率较高的神经元分配给GPU层,将其余神经元分配给CPU层。在第二阶段,策略求解器组件使用神经元影响指标和硬件规格来平衡层之间的工作负载,并通过整数线性编程最大化GPU的影响指标以利用神经元。

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

一旦离线阶段执行成功,框架就会执行在线阶段。在过程的第三步中,在线引擎根据离线策略求解器的输出,将热神经元和冷神经元分配给各自的处理单元,然后处理用户请求。在运行时和第四步中,在线引擎通过创建CPU和GPU执行器(运行在CPU侧的线程)来管理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框架在不同硬件配置的设备上的普遍适用性,实验是在两台不同的个人电脑上进行的:一台配备了英特尔i9-13900K处理器、NVIDIA RTX 4090 GPU和192 GB主内存,另一台配备了英特尔i7-12700K处理器、NVIDIA RTX 2080Ti GPU和64 GB主内存。

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

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

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

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

上图比较了两种框架在两台具有不同规格的PC上的性能。如图所示,PowerInfer框架始终比llama.cpp框架提供更高的输出标记生成速度。

最后的思考

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

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