**探讨了基于消费级硬件和内存受限 GPU 加速基于 MOE 的语言模型的策略。 **提出了一种以MOE为中心的卸载方法,并探讨了混合量化对混乱和语言理解任务表现的影响。 **对所提出的策略进行了评估,结果表明,与现有方法相比,结果是:显著提高了消费级硬件的构建速度,包括免费的 Google Colab
该方法为在资源受限的硬件上推理大型MOE语言模型提供了实用的解决方案,使这些强大的模型在研发中得到更广泛的应用。
图 1:mixtral-8x7b-instruct 中间层的专家加载模式示例。 蓝色单元格表示专家在对令牌进行编码时处于活动状态颜色越深,浇口重量越大。 灰色小方块表示专家使用 LRU 缓存 (k=2) 进行缓存。
近年来自然语言处理领域的许多进展都依赖于大规模的预训练语言模型,如GPT-3、GPT-4等。 然而,如果没有开源的大型语言模型,如llama、falcon、bloom、opt或neox pythia,这一领域的科学就不可能取得快速进步。 开源大型语言模型的主要优势在于,研究人员可以在本地部署它们,并以专有 API 无法做到的方式对其进行修改。
尽管大型语言模型具有开放参数,但由于参数数量众多,它们仍然难以使用。 SOTA 的开源大型模型需要多个高端 GPU,即使是基本的推理工作也是如此。 为了在更实惠的硬件配置上使用这些大型语言模型,必须将模型参数压缩或卸载到较便宜的内存(如 RAM 或 SSD)中。
最近通过引入稀疏 MOE(专家混合)模块来改进 Transformer 架构。 MOE 模块包含多个“专家”(层),以及一个“门控功能”,用于选择要在给定输入上使用的专家。 因此,教育部模块仅使用所有“专家”的一小部分进行前向传递,从而实现更有效的训练。 值得注意的是,MOE模型是目前可用的最大的大型语言模型之一,也是表现最好的模型之一。 尽管 MOE 模型比密集模型更有效,但许多用于高效大型语言模型推理的技术并不是专门为 MOE 设计的,并且在使用 MOE 层的大规模语言模型上表现不佳。
图 2:(左)不同缓存大小 K 的 LRU 缓存命中率;(右)预加载不同数量的专家时的推测性加载召回。 实线表示加载前 1 层;虚线提前表示 2 层;虚线表示提前 10 层。
表 1:使用不同量化方案对 Mittral-8x7b 进行混淆和模型大小评估,包括共享注意力层量化 (ATTN quant) 和专家层量化 (Experts quant)。 相比之下,4 位量化的 mixtral-7b 在 wiki2 上的拼图级别为 503、C4上的混淆是756,MMLU得分613%。绿色值对应于我们为系统范围评估选择的配置。
* 专注于以每秒多个令牌的形式以交互方式生成令牌的任务,即以 1 的批量大小生成。 生成推理工作负载由两个阶段组成:
1) 对输入提示进行编码。
2)根据提示生成令牌。
这两个阶段之间的主要区别在于,提示令牌是并行编码的(层之间),而生成是顺序的(令牌到令牌,层到层)。 一般来说,阶段 1 与现有的混合专家算法配合得相对较好,因为每个层只需要为整个提示加载一次。 相反,在生成令牌时,必须为每个生成的令牌加载一次图层。 在实践中,这意味着推理速度受到从系统内存中获取参数的速度的限制。
*系统设计结合了缓存、预取技术和混合 MOE 量化方案
MOE量化。
有许多加权算法针对大型语言模型进行了优化。 模型压缩与卸载具有天然的协同作用,因为压缩模型加载到 GPU 上所需的时间更少。 使用**的实验观察到,与将所有非专家层保持在4位相比,MOE模型在将专家量化为更低的位宽时,可以实现更好的质量大小权衡。 **使用半二次量化 (HQQ) – 一种支持多种比特率的独立于数据的量化算法。 然而,选择这种算法只是为了方便起见,因为它已经在混合模型上进行了很好的测试。 由于**的分析不依赖于任何特定的量化选择,因此如果选择另一种量化算法(例如GPTQ或AWQ),则结论将是相似的。 在早期的实验中,还尝试了在 Switch-C-2048 模型上运行良好的 QMOE (Frantar 和 Alistarh, 2023b) 中的亚 1 位量化。 然而,发现亚 1 位压缩会导致 mixtral-8x7b 模型的过度混淆损失。
专家卸载。 对每一层使用等量的 LRU 缓存专家 k。 对于 Miftral-8x7B,** 在 12GB GPU 上使用 k=2,在 16GB GPU 上使用 k=4。 一旦系统完成了当前层的所有专家加载,就会立即触发推测专家加载。 投机专家加载获得 1-2 个最有可能的专家。 新加载的专家不会替换当前缓存的专家。 如果稍后在下一层推理中使用了推测加载的 EA,则它将替换下一层缓存中最近使用最少的 EA。
许多消费者设备和免费分层云实例的主机 RAM 有限,无法适应整个模型。 在这种情况下,必须在主机内存和设备内存之间拆分专家。 为了支持这一点,Expert LRU 缓存实现在主机和 GPU 设备之间拆分了 Expert。 当专家加载到 GPU 缓存中时,系统还会将专家卸载回最近最少使用的设备上的 RAM,以保持内存平衡。 为了实际加快卸载速度,所有专家参数都分配在一个连续的内存缓冲区中,用于单个主机到设备的复制移动。 对于主机端 (RAM) 专家,请固定此内存缓冲区以加快通信速度。 我们的实现还分配了 b=4 个设备缓冲区,用于异步复制和预取专家,而无需修改现有专家。 这些缓冲区在所有 MOE 层之间共享,以减少内存占用。 总体而言,系统需要分布在主机和设备内存之间的 num 层专家内存缓冲区,以及 b = 4 个临时缓冲区,每个缓冲区的大小等于单个专家。
* 系统地开发了在内存受限的GPU条件下运行大规模MOE语言模型的技术。 主要目标是在桌面级硬件上执行推理(生成令牌),该硬件只能容纳 MOE 型聊天助手 mixtral-8x7b-instructed 中的专家子集。 为此:
* 观察了 MOE 语言模型在标记之间访问其专家的方式,并发现了几种模式:
i)一些EA在相邻的令牌之间被重用,II)模型的隐式状态已经“知道”在早期层的后续层中使用哪些EA智能。
特定于 moe 的卸载策略旨在利用以下规则:
i) 它使用 LRU 缓存来大幅减少 GPU-RAM 通信,从而加快构建速度,以及 ii) 它提前猜测需要哪些专家才能更好地将专家加载与计算重叠。
*考虑到在 T4、RTX 3060 和 RTX 3080 移动设备上运行 MixTRAL-8X7B-Struct 的具体场景,开发了一种混合量化和所提出的卸载算法的实用组合,以每秒 2-3 个令牌的速率交互运行,具体取决于硬件。
表 2:mixtral-8x7b 在低端硬件上的推理速度,以每秒生成的令牌数为单位。
*标题:快速推理混合专家语言模型与卸载* 链接:
优质作者名单