LLMs 的软件/硬件协同优化策略 – 第二部分(软件)

张开发
2026/5/8 7:32:33 15 分钟阅读

分享文章

LLMs 的软件/硬件协同优化策略 – 第二部分(软件)
原文towardsdatascience.com/sw-hw-co-optimization-strategy-for-llms-part-2-software-65ea2247481e随着新的 LLM 模型和特性的不断涌现查看hugging face LLM 排行榜软件工具和库的发布速度正在加快。这种快速进步也在 AI 硬件领域激发了许多创新。从系统角度优化 LLM 时重要的是要理解尽管来自 Meta、Google、OpenAI、Nvidia、斯坦福和其他主要公司和研究机构的研究每天都在涌现但软件堆栈/库不能立即将所有内容转换为硬件执行。只有一小部分软件特性可以支持这需要几个月约 6 个月的开发才能投入生产。如果这些特性需要在 AI 硬件加速器中支持那么在发生任何架构变化的情况下开发周期会更长2-4 年。解决 LLMs 软件和硬件优化之间的这种差异是一个重大挑战我们旨在通过这一系列文章来解决这个问题https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0878bd03bbe5b26490f45493f1a0dc4d.png作者图片新兴的软件工具和库既适用于 LLM 训练也适用于推理。在这篇文章中我们将特别关注 LLM 部署以及这些工具如何增强 LLM 性能的深入探讨。在未来的文章中我们将深入研究 LLM 训练软件如 deepspeed、Fairscale、colossal-AI 等。之前我讨论了 LLM 模型的改进并强调了新的研究特性。您可以通过回顾下面的讨论来刷新您的记忆大型语言模型LLMs的软件/硬件协同优化策略LLMs作为专门领域的人工智能模型依赖于传统的 AI 堆栈将模型转换为机器代码以便在 AI 硬件上执行。不同的硬件公司提供各自的软件堆栈以促进 AI 推理。以下我将展示三个主要的硬件供应商Nvidia、AMD、Intel及其相应的软件平台https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ce4da3a661771b293c6a9a00aa7ee5d8.png作者图片传统 AI 软件堆栈如上表所示Nvidia 通过其专有的 CUDA 软件生态系统在生成式 AI 领域中处于领先地位。它提供了一套强大的工具和库如 cuDNN、cuBLAS 等Nvidia 通过其图形处理单元加速了顶级 AI 用例。他们最近发布的 TensorRT-LLM 引入了一系列丰富的功能如连续批处理、vLLM 和张量并行性优化了 LLM。AMD 专注于 RoCm 以加强其强大的 AI 硬件MI 2/300 系列产品。同时Intel 推崇 oneAPI、oneDNN 和 OpenVINO API 和工具链支持 Intel 的 CPU、GPU 和 NPU 平台上的 AI 模型旨在实现 AI 硬件上的统一软件和开放生态系统。将 LLM 应用于传统的 AI 软件堆栈首先是从启用基本函数和算子开始的。大多数算子通常都得到支持因为 LLM 依赖于基于 Transformer 的架构包括编码器/解码器。然而某些新的算子如位置编码可能需要特别注意。以 TensorRT 为例不支持的算子会回退到 PyTorch。然后图被分割成两个区域下图中灰色在 PyTorch 上执行和绿色在 TensorRT 上执行。灰色区域中算子数量过多表明性能不佳。importtorch_tensorrt#convert to tensorRTtrt_moduletorch_tensorrt.compile(model,irFX,...)#run inferencetrt_module(x)https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/53daed2f62688f56383c36d54f9f846d.png来源pytorch.org/Nvidia 的 TensorRT 支持许多针对 DL 模型的优化包括层和张量融合将多个操作或层融合到一个内核中以减少内存访问频率并提高性能内核自动调优选择最佳算法或层批量大小以在目标硬件上实现最佳性能混合精度可以将 FP32 数据类型转换为 FP16/INT8 以实现快速推理。不同的公司都有它们自己的实现来支持这些功能这些功能在各种 AI 模型中是通用的并不特定于 LLM现在让我们深入了解与 LLM 相关的软件。加速 LLM SW 框架和库由于大型 LLM 对计算和内存的高需求传统的 AI 软件堆栈在优化大型 LLM 方面存在不足。一些新兴的开源软件框架和库已经出现以加速 LLM 推理满足开发者的需求。以下表格中列出了一些流行的框架并附有参考链接Ref [1] vLLM; Ref [2] streamingLLM; Ref [3] FlexGen; Ref [4] OpenLLM; Ref [5] DeepSpeed)https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/60ffd42495247287b30b6173ad44e909.png作者总结的表格顶级四个框架由主要公司开发与来自大学且针对特定功能的底部三个框架相比提供了更广泛的功能。例如vLLM 最初专注于分页 kv 注意力逐渐扩展了对其他功能的支持。粗体加亮的特性表示在各种 LLM 框架中最常支持的特性。以下将深入探讨一些这些特性1. 连续批量20x 倍吞吐量在批量生成过程中一些序列比其他序列更快地完成标记生成导致在所有批量完成之前出现空闲时间。连续批量通过将新任务集成到完成较快的批量中来解决这个问题。它利用注意力掩码来屏蔽之前的序列防止干扰。…/Images/6d4fd1057b48a82e8c16c941096e4839.png使用连续批量的四个序列示例。来源如何通过连续批量在 LLM 推理中实现 23 倍吞吐量同时降低 p50 延迟参考文献 [6]上图显示了连续批量的基本原理。与传统静态批量相比每个序列将在不同的时间步结束导致 GPU 利用不足。在这个特定示例中序列 3 在 T5 结束并在 T6、T7 和 T8 上浪费了 GPU 资源。为了解决这个问题一旦检测到结束标记就会插入一个新的序列即 S5、S6、S7以充分利用 GPU。2. 模型并行张量和管道并行张量并行涉及将张量分割成多个子张量每个设备管理一个子张量并执行计算。产生的部分结果被组合起来以产生最终结果。在下面的图中参考文献 [7]如果张量 B 垂直分割成两部分矩阵 A 将乘以这两个部分。每个乘法都在一个单独的设备上执行然后得到的部分输出 C 被连接起来以得到最终结果。…/Images/c1175ac0f6ccb7914758bafaf43ea6cd.png张量并行示意图。来源Colossal-AI参考文献 [7]管道并行涉及根据层将模型分割成多个块将每个块分配给一个单独的设备GPU。在正向传播过程中中间激活或反向传播梯度被传输到另一个设备进行进一步处理直到达到最终输出。这种方法利用多个设备同时工作以增强吞吐量但需要在设备之间进行快速且无缝的通信。…/Images/fded0002e31a4a0514f5dd1f71780712.png管道并行示意图。来源Colossal-AI参考文献[7]3.FlexGen参考文献[8]Flexgen 引入了一种针对内存容量有限的受限计算平台的卸载策略。它通过利用 CPU、GPU 和磁盘的能力优化内存和计算资源识别高效的张量存储和访问模式。…/Images/87b07232cd9f1a339f6b139a4931c6ac.png两种不同的 FlexGen 策略时间表演示。来源FlexGen使用单个 GPU 进行大型语言模型的高吞吐量生成推理参考文献[8]与基于卸载的两种其他框架DeepSpeed 零推理和 Hugging Face Accelerate相比FlexGen 提供了显著更高的吞吐量下文图表所示。…/Images/8993cdb3df4565d750ff094413378585.pngFlexGen 带来 100 倍的最大吞吐量提升。来源FlexGen使用单个 GPU 进行大型语言模型的高吞吐量生成推理参考文献[8]除了上述提到的特性之外新技术正在快速发展一个值得注意的例子是苹果最近发布的卸载策略利用闪存来加速 LLMs参考文献[9]使得模型运行大小达到可用 DRAM 的两倍与 CPU 和 GPU 中的简单加载方法相比推理速度分别提高了 4-5 倍和 20-25 倍。关键信息我在之前的文章中讨论了分页注意力和量化的基本概念。随着关于 LLM 模型和加速技术的新的研究迅速出现各种组织正在开发支持它们的底层软件。对于组织和开发者来说根据他们的需求谨慎选择最合适的选项至关重要。一个强大且高效的软件对于有效地实施这些加速技术、最大化 AI 硬件资源至关重要。在我即将发布的文章中我将深入探讨加速 LLMs 的高级 AI 硬件和内存技术。敬请关注参考文献[1] vLLMgithub.com/vllm-project/vllm[2] streamingLLMgithub.com/mit-han-lab/streaming-llm[3] FlexGengithub.com/FMInference/FlexGen#how-it-works[4] OpenLLMgithub.com/bentoml/OpenLLM[5] 微软研究博客DeepSpeed通过系统优化和压缩加速大规模模型推理和训练[6] 凯德·丹尼尔沈晨梁毅和赖亚华如何通过连续批处理在 LLM 推理中实现 23 倍吞吐量同时降低 p50 延迟Anyscale 博客2023 年 6 月[7] 李胜贵马思琪并行范式Colossal-AI 概念[8] 应胜等FlexGen使用单个 GPU 进行大型语言模型的高吞吐量生成推理arxiv2023 年 6 月[9] 凯万·阿利扎德等LLM in a flash使用有限内存高效进行大型语言模型推理arxiv2023 年 12 月

更多文章