作者:Arm 工程部首席软件工程师 Gian Marco Iodice,以及亚马逊云科技 (AWS) Srini Raghavan 和Stefano Marzani
随着人工智能 (AI) ,尤其是生成式 AI 的引入,汽车行业正迎来变革性转变。麦肯锡最近对汽车和制造业高管开展的一项调查[1]表明,超过 40% 的受访者对生成式 AI 研发的投资额高达 500 万欧元,超过 10% 受访者的投资额超过 2,000 万欧元。
随着行业向软件定义汽车 (SDV) 不断发展,到 2030 年,汽车中的代码行数预计将从每辆车 1 亿行增加至约 3 亿行。面向汽车的生成式 AI 与 SDV 相结合,可共同实现性能和舒适性方面的车载用例,以帮助提升驾乘体验。
本文将介绍一项由 Arm 与亚马逊云科技 (AWS) 合作开发的车载生成式 AI 用例及其实现详情。
用例介绍
随着汽车愈发精密,车主已经能在交车后持续接收诸如停车辅助或车道保持等功能更新,伴随而来的挑战是,如何让车主及时了解新增的更新和新功能?过往通过纸质或在线手册等传统方法的更新方式已证明存在不足,导致车主无法充分了解汽车的潜能。
为了应对这一挑战,AWS 将生成式 AI、边缘计算和物联网 (IoT) 的强大功能相结合,开发了一项车载生成式 AI 的演示。这项演示所展现的解决方案是由小语言模型 (SLM) 所支持的车载应用,旨在使驾驶员能够通过自然语音交互获取最新的车辆信息。该演示应用能够在部署后离线运行,确保驾驶员在没有互联网连接的情况下,也能访问有关车辆的重要信息。
该解决方案集成了多项先进技术,为用户打造出更无缝、更高效的产品体验。这项演示的应用部署在车内本地的小语言模型,该模型利用经 Arm KleidiAI 优化的例程对性能进行提升。未经 KleidiAI 优化的系统的响应时间为 8 至 19 秒左右,相比之下,经 KleidiAI 优化的小语言模型的推理响应时间为 1 至 3 秒。通过使用 KleidiAI,应用开发时间缩短了 6 周,而且开发者在开发期间无需关注底层软件的优化。
Arm 虚拟硬件 (Arm Virtual Hardware) 支持访问许多 AWS 上的热门物联网开发套件。当物理设备不可用,或者全球各地的团队无法访问物理设备时,在 Arm 虚拟硬件上进行开发和测试可节省嵌入式应用的开发时间。AWS 在汽车虚拟平台上成功测试了该演示应用,在演示中,Arm 虚拟硬件提供了树莓派设备的虚拟实例。同样的 KleidiAI 优化也可用于 Arm 虚拟硬件。
这个在边缘侧设备上运行的生成式 AI 应用所具备的关键特性之一是,它能够接收 OTA 无线更新,其中部分更新使用 AWS IoT Greengrass Lite 接收,从而确保始终向驾驶员提供最新信息。AWS IoT Greengrass Lite 在边缘侧设备上仅占用 5 MB 的 RAM,因此具有很高的内存效率。此外,该解决方案包含自动质量监控和反馈循环,用于持续评估小语言模型响应的相关性和准确性。其中采用了一个比较系统,对超出预期质量阈值的响应进行标记,以进行审核。然后,通过 AWS 上的仪表板,以近乎实时的速度对收集到的反馈数据进行可视化,使整车厂的质保团队能够审核和确定需要改进的方面,并根据需要发起更新。
这个由生成式 AI 提供支持的解决方案,所具备的优势不仅仅在于为驾驶员提供准确的信息。它还体现了 SDV 生命周期管理的范式转变,实现了更持续的改进周期,整车厂可以根据用户交互来添加新内容,而小语言模型可以使用通过无线网络无缝部署的更新信息进行微调。这样一来,通过保证最新的车辆信息,用户体验得以提升,此外整车厂也有机会向用户介绍和指导新特性或可购买的附加功能。通过利用生成式 AI、物联网和边缘计算的强大功能,这个生成式 AI 应用可以起到汽车用户向导的作用,其中展示的方法有助于在 SDV 时代实现更具连接性、信息化和适应性的驾驶体验。
端到端的上层实现方案
下图所示的解决方案架构用于对模型进行微调、在 Arm 虚拟硬件上测试模型,以及将小语言模型部署到边缘侧设备,并且其中包含反馈收集机制。
图:基于生成式 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 的解决方案。随着汽车不断演变且软件越来越复杂,潜在解决方案(比如本文介绍的解决方案)将成为弥合先进汽车功能与用户理解间差距的关键。
* Arm 原创文章