图:基于生成式 AI 的汽车用户向导的解决方案架构图
上图中的编号对应以下内容: 1. 模型微调:AWS 演示应用开发团队选择 TinyLlama-1.1B-Chat-v1.0 作为其基础模型,该模型已针对会话任务进行了预训练。为了优化驾驶员的汽车用户向导聊天界面,团队设计了言简意赅、重点突出的回复,以便适应驾驶员在行车时仅可腾出有限注意力的情况。团队创建了一个包含 1,000 组问答的自定义数据集,并使用 Amazon SageMaker Studio 进行了微调。 2. 存储:经过调优的小语言模型存储在 Amazon Simple Storage Service (Amazon S3) 中。 3. 初始部署:小语言模型最初部署到基于 Ubuntu 的 Amazon EC2 实例。 4. 开发和优化:团队在 EC2 实例上开发并测试了生成式 AI 应用,使用 llama.cpp 进行小语言模型量化,并应用了 Q4_0 方案。KleidiAI 优化预先集成了 llama.cpp。与此同时,模型还实现了大幅压缩,将文件大小从 3.8 GB 减少至 607 MB。 5. 虚拟测试:将应用和小语言模型传输到 Arm 虚拟硬件的虚拟树莓派环境进行初始测试。 6. 虚拟验证:在虚拟树莓派设备中进行全面测试,以确保功能正常。 7. 边缘侧部署:通过使用 AWS IoT Greengrass Lite,将生成式 AI 应用和小语言模型部署到物理树莓派设备,并利用 AWS IoT Core 作业进行部署管理。 8. 部署编排:AWS IoT Core 负责管理部署到边缘侧树莓派设备的任务。 9. 安装过程:AWS IoT Greengrass Lite 处理从 Amazon S3 下载的软件包,并自动完成安装。 10. 用户界面:已部署的应用在边缘侧树莓派设备上为最终用户提供基于语音的交互功能。 11. 质量监控:生成式 AI 应用实现对用户交互的质量监控。数据通过 AWS IoT Core 收集,并通过 Amazon Kinesis Data Streams 和 Amazon Data Firehose 处理,然后存储到 Amazon S3。整车厂可通过 Amazon QuickSight 仪表板来监控和分析数据,及时发现并解决任何小语言模型质量问题。 接下来将深入探讨 KleidiAI 及该演示采用的量化方案。 Arm KleidiAI Arm KleidiAI 是专为 AI 框架开发者设计的开源库。它为 Arm CPU 提供经过优化的性能关键例程。该开源库最初于 2024 年 5 月推出,现在可为各种数据类型的矩阵乘法提供优化,包括 32 位浮点、Bfloat16 和 4 位定点等超低精度格式。这些优化支持多项 Arm CPU 技术,比如用于 8 位计算的 SDOT 和 i8mm,以及用于 32 位浮点运算的 MLA。 凭借四个 Arm Cortex-A76 核心,树莓派 5 演示使用了 KleidiAI 的 SDOT 优化,SDOT 是最早为基于 Arm CPU 的 AI 工作负载设计的指令之一,它在 2016 年发布的 Armv8.2-A 中推出。 SDOT 指令也显示了 Arm 持续致力于提高 CPU 上的 AI 性能。继 SDOT 之后,Arm 针对 CPU 上运行 AI 逐步推出了新指令,比如用于更高效 8 位矩阵乘法的 i8mm 和 Bfloat16 支持,以期提高 32 位浮点性能,同时减半内存使用。 对于使用树莓派 5 进行的演示,通过按块量化方案,利用整数 4 位量化(也称为 llama.cpp 中的 Q4_0)来加速矩阵乘法,KleidiAI 扮演关键作用。 llama.cpp 中的 Q4_0 量化格式 llama.cpp 中的 Q4_0 矩阵乘法包含以下组成部分: · 左侧 (LHS) 矩阵,以 32 位浮点值的形式存储激活内容。 · 右侧 (RHS) 矩阵,包含 4 位定点格式的权重。在该格式中,量化尺度应用于由 32 个连续整数 4 位值构成的数据块,并使用 16 位浮点值进行编码。 因此,当提到 4 位整数矩阵乘法时,它特指用于权重的格式,如下图所示:
在这个阶段,LHS 和 RHS 矩阵均不是 8 位格式,KleidiAI 如何利用专为 8 位整数点积设计的 SDOT 指令?这两个输入矩阵都必须转换为 8 位整数值。
对于 LHS 矩阵,在矩阵乘法例程之前,还需要一个额外的步骤:动态量化为 8 位定点格式。该过程使用按块量化方案将 LHS 矩阵动态量化为 8 位,其中,量化尺度应用于由 32 个连续 8 位整数值构成的数据块,并以 16 位浮点值的形式存储,这与 4 位量化方法类似。
动态量化可最大限度降低准确性下降的风险,因为量化尺度因子是在推理时根据每个数据块中的最小值和最大值计算得出的。与该方法形成对比的是,静态量化的尺度因子是预先确定的,保持不变。
对于 RHS 矩阵,在矩阵乘法例程之前,无需额外步骤。事实上,4 位量化充当压缩格式,而实际计算是以 8 位进行的。因此,在将 4 位值传递给点积指令之前,首先将其转换为 8 位。从 4 位转换为 8 位的计算成本并不高,因为只需进行简单的移位/掩码运算即可。
既然转换效率如此高,为什么不直接使用 8 位,省去转换的麻烦?
使用 4 位量化有两个关键优势:
· 缩小模型尺寸:由于 4 位值所需的内存只有 8 位值的一半,因此这对可用 RAM 有限的平台尤其有益。
· 提升文本生成性能:文本生成过程依赖于一系列矩阵向量运算,这些运算通常受内存限制。也就是说,性能受限于内存和处理器之间的数据传输速度,而不是处理器的计算能力。由于内存带宽是一个限制因素,缩小数据大小可最大限度减少内存流量,从而显著提高性能。
如何结合使用 KleidiAI 与 llama.cpp?
非常简单,KleidiAI 已集成到 llama.cpp 中。因此,开发者不需要额外的依赖项就能充分发挥 Armv8.2 及更新架构版本的 Arm CPU 性能。
两者的集成意味着,在移动设备、嵌入式计算平台和基于 Arm 架构处理器的服务器上运行 llama.cpp 的开发者,现在可以体验到更好的性能。
除了 llama.cpp,还有其他选择吗?
对于在 Arm CPU 上运行大语言模型,虽然 llama.cpp 是一个很好的选择,但开发者也可以使用其他采用了 KleidiAI 优化的高性能生成式 AI 框架。例如(按首字母顺序排列):ExecuTorch、MediaPipe、MNN 和 PyTorch。只需选择最新版本的框架即可。
因此,如果开发者正考虑在 Arm CPU 上部署生成式 AI 模型,探索以上框架有助于实现性能和效率的优化。
总结
SDV 和生成式 AI 的融合,正在共同开创一个新的汽车创新时代,使得未来的汽车变得更加智能化,更加以用户为中心。文中介绍的车载生成式 AI 应用演示由 Arm KleidiAI 进行优化并由 AWS 所提供的服务进行支持,展示了新兴技术如何帮助解决汽车行业的实际挑战。该解决方案可实现 1 至 3 秒的响应时间并将开发时间缩短数周,证明更高效且离线可用的生成式 AI 应用不仅能够实现,而且非常适合车载部署。
汽车技术的未来在于打造无缝融合边缘计算、物联网功能和 AI 的解决方案。随着汽车不断演变且软件越来越复杂,潜在解决方案(比如本文介绍的解决方案)将成为弥合先进汽车功能与用户理解间差距的关键。
科极网