如何高效的将智驾AI大模型软件模块部署到SOC芯片上?

文摘   2025-01-01 11:15   河南  

点击下方卡片,关注“自动驾驶之星

这里有一群奋斗在自动驾驶量产第一线的小伙伴等你加入Introduction
作者 | Jessie
出品 | 焉知


在自动驾驶行业发展的如火如荼地今天,开发大模型对于其在各种通用场景和关键场景的应用都显得非常的必要了。大模型的开发不仅可以很好的助力以数据驱动为核心的端到端的应用,也可以在后续芯片算力大幅度提升后实现更好的识别效果。然而,考虑到当前应用于车端的智驾域控芯片仍然普及于中低算力芯片,因此,考虑如何采取一定的方法策略将类似transformer这样的AI大模型要素高效的部署到SoC芯片上,这不仅可以显著提升系统的响应速度、功耗效率和安全性,同时也可以很好的满足实时性强、资源受限环境下的应用需求。


在自动驾驶软件设计中,将Transformer模型部署到集中式SoC芯片上涉及到多个关键步骤。以下是具体的示例和说明:


1
ONE

模型优化+剪枝


1、量化(Quantization)


例如,将用于感知系统的Transformer模型从32位浮点数量化到8位整数,以减少计算资源占用和内存需求。这可以在不显著降低精度的情况下,加快自动驾驶中物体检测和识别的速度。



首先在模型准备阶段,确保Transformer模型已经经过充分的预训练,在32位浮点数精度下能够达到预期的精度和性能,该模型将作为量化的基础模型。而在数据收集阶段,收集足够的感知数据,如自动驾驶中的图像、点云数据,用于量化过程中模型的校准和微调。在后续的量化感知系统的Transformer模型阶段,分为静态量化(Post-Training Quantization)和动态量化(Dynamic Quantization)。确保在量化过程中,模型输入的动态范围被充分考虑,特别是在感知系统中,输入数据(如图像)通常具有较大的动态范围。在梯度消失问题上,在模型量化后,有时会遇到梯度消失的问题,特别是在深度Transformer模型中。可以通过微调和量化感知(Quantization-Aware Training)技术来减轻这一问题。



在量化感知训练(Quantization-Aware Training, QAT)阶段中,模型在训练时模拟8位整数的计算过程。通过在训练中引入量化噪声,模型逐渐适应量化后的精度变化。具体操作是在训练过程中,将32位浮点数转换为8位整数进行前向传播,而反向传播仍在32位浮点数下进行。这种做法的优势是量化感知训练时可以显著提高量化后的模型精度,特别是在自动驾驶感知任务中,需要精细检测和分类的情况下。


当然,在量化后模型验证阶段,通过精度评估,使用感知数据集评估量化前后的模型精度差异,确保量化后的模型能够在实际场景中保持足够的检测和识别精度。在性能评估阶段, 在车载SoC上部署量化后的Transformer模型,测试其推理速度和计算资源消耗,以验证量化的效果。


2、剪枝(Pruning)


对自动驾驶中的Transformer模型进行剪枝(Pruning)是一种减少模型规模和计算复杂度的有效方法。尤其在资源受限的环境中,如车载SoC芯片上使用感知算法进行车道线检测时,对自动驾驶中的Transformer模型进行剪枝,去除对车道线检测影响较小的权重。这样可以减少模型大小,使其更容易部署在SoC上。



假设在自动驾驶系统中,使用了一个Transformer模型来进行车道线检测和障碍物识别。模型中包含8个注意力头。经过分析发现,某些注意力头对特定场景的贡献较小(例如,一些头对远距离的车道线关注较少,而此时车速较低)。可以选择将这些注意力头进行剪枝,从而减少计算复杂度,同时通过微调保持整体模型的检测能力。剪枝后重新训练模型,以确保在各类驾驶场景中的准确性。这种方法有助于在维持高性能的前提下,降低模型在自动驾驶场景中的计算开销,适应车载SoC的限制。


1)剪枝原理分析


首先,是基于自动驾驶场景确定剪枝目标。这一目标包括剪枝率(Pruning Rate)和剪枝策略。剪枝率决定模型中要移除的参数比例,对于自动驾驶场景,通常需要在精度和效率之间取得平衡,因此剪枝率需要根据具体应用场景进行调整。而在剪枝策略方面,选择剪枝的对象,如剪掉部分神经元、注意力头、层或特定权重连接,可以去除对最终推理结果影响较小的部分。


在剪枝对象选择上,主要采用层级剪枝(Layer-wise Pruning)。针对Transformer模型的不同层次进行剪枝。例如,移除在特定自动驾驶场景(如简单的车道保持任务)中不常用的注意力头(Attention Head)或多余的全连接层(Feedforward Network)。根据权重进行剪枝(Weight Pruning),移除权重值接近于零的连接。通过分析Transformer模型的权重分布,选择那些对输出影响较小的权重进行剪枝。比如基于注意力头剪枝(Head Pruning)过程中,需要充分考虑Transformer中的多头注意力机制允许模型关注不同的特征。通过评估每个头的贡献,可以移除那些在自动驾驶场景中作用较小的头。


2)剪枝策略


基于以上剪枝方法论,剪枝方法可以分为全局剪枝(Global Pruning)、层级剪枝(Layer-wise Pruning)和结构化剪枝(Structured Pruning)。


全局剪枝在整个模型范围内根据权重的绝对值大小进行剪枝。比如,移除所有低于某一阈值的权重,无论其所在的层或模块。层级剪枝是针对特定层或模块进行剪枝。这种方法可以更好地控制每一层的剪枝率,确保不会过度削弱某些关键层的能力。通过移除整个神经元或通道,而不是单个权重,这种方法更适合硬件加速器。比如,在自动驾驶的Transformer模型中,移除对交通标志检测贡献较小的某一层的整组神经元(如动态车辆检测,因为其与交通标志的检测存在明显的差别区分)。


3)剪枝后微调(Fine-Tuning)


剪枝后,模型可能会出现性能下降。通过重新训练,模型可以重新学习并适应被剪枝后的结构,这个过程有助于恢复剪枝前的精度水平。这一过程可以采用逐步剪枝和微调相结合的策略,每次剪去一小部分权重后立即进行微调,而不是一次性剪去大量权重。


在典型的自动驾驶任务中(如障碍物检测、车道线识别)评估剪枝后模型的性能。确保剪枝后的模型在关键任务中的精度和响应时间满足要求。在资源评估过程中,比较剪枝前后模型的计算资源占用,包括推理时间、内存占用和功耗,以确定剪枝的有效性。


4)部署与监控


将剪枝后的Transformer模型部署到车载SoC上,再在实际驾驶场景中进行部署测试,可以确保模型的实时性和稳定性。实时监控剪枝后模型的运行表现,根据实际需求动态调整模型结构或进一步进行剪枝和优化。在自动驾驶中,可以使用一个训练好的大规模Transformer模型(如BERT)来训练一个更小的模型(如TinyBERT),用于车内低功耗的SoC芯片上,以实现车内实时场景理解,该过程一般称之为知识蒸馏(Knowledge Distillation)。


3
ONE

硬件加速与内存管理


1、硬件加速


使用专用加速器(Accelerators),在自动驾驶的集中式SoC上,通常会有NPU(神经网络处理单元)来加速Transformer模型的推理。例如,在处理前方车辆的动态分析时,使用NPU可以大幅提升Transformer模型的处理速度。


针对神经网络优化的架构,由于采用了专门的硬件设计,比如NPU专为深度学习模型设计,包含大量并行处理单元,能够高效处理神经网络中的矩阵乘法、卷积等运算。Transformer模型中,大量的矩阵运算(如多头注意力机制中的点积操作)是计算的主要瓶颈。NPU能够通过并行处理这些操作,大幅加快计算速度。同时,NPU通常集成有高带宽的片上存储器,用于快速存取模型参数和中间结果,产生低延迟和高带宽存储的效能。相比于传统的CPU或GPU,NPU的存储器延迟更低,能够减少数据传输瓶颈,提高Transformer模型的处理效率。


在并行计算能力方面,基于Transformer的AI大模型中的多头注意力机制需要并行计算多个注意力头的权重和输出。Transformer模型可以在SoC上的多核架构中并行运行,如将多头注意力机制中的各个头分配到不同的核上,以加快处理车道检测和障碍物识别的速度。在NPU上,将这些计算任务分配到多个处理单元并行执行,可以显著加快整体计算速度。由于NPU可以同时处理Transformer模型的不同层级,通过流水线或分层处理的方式可以有效的减少推理延迟。在处理前方车辆的动态分析时,NPU可以在同时处理多个输入帧的情况下保持高吞吐量。


在加速矩阵运算方面,Transformer模型中,关键的计算如注意力机制和前馈神经网络(Feedforward Neural Network)都依赖于大规模的矩阵乘法运算。NPU在矩阵运算上具有极高的效率,能够大幅度缩短这些计算的执行时间。许多NPUs配备了专用的深度学习指令集,这些指令集可以在硬件层面优化矩阵运算,使得计算资源得以最大化利用。


在减少数据移动的开销上,Transformer模型在计算过程中需要频繁地进行内存访问。如果在传统的计算架构中,数据的频繁移动会引发较大的延迟,而NPU通过在片上存储器中存储更多的数据并优化访问模式,可以减少内存带宽的瓶颈,从而提高处理速度。同时,NPU可以将计算和存储进行有效结合。通过将计算单元和存储单元紧密集成的方式,减少数据在计算单元和存储单元之间传输的延迟。这对于处理前方车辆的实时动态分析至关重要,因为系统可以在短时间内完成大量数据的处理和决策。


最后,NPU可以实现芯片异构计算和任务分离,将复杂运算卸载给NPU。在自动驾驶系统中,NPU可以专门用于处理复杂的深度学习任务,如Transformer模型的推理,而将其他任务(如系统控制、传感器数据预处理)分配给CPU或DSP。同时,动态分析前方车辆需要系统在极短的时间内做出决策,高效处理实时性要求高的任务。据统计,NPU可以在毫秒级别完成对多帧图像或点云数据的推理,确保系统能够及时响应外部环境的变化。这种任务分离和异构计算能够更好地利用系统资源,提高整体性能。


2、内存中Transformer架构优化


自动驾驶中,Transformer模型处理的图像数据量大,需要优化内存管理。例如,使用内存池技术复用内存空间,从而减少因多次加载数据导致的带宽占用。


如下图表示内存中的Transformer 网络架构,iMTransformer (In-Memory Transformer)以 Bank、Tile 和 Mat 的分层模式进行组织。这种分层模式遵循现有的内存分层结构和 Transformer 网络的分层模式。iMTransformer (A) 由编码器 (B) 和解码器 (C) 组组成。编码器组由编码器 MHA 瓦片 (D) 和 FF 瓦片以及归一化单元组成。解码器组由两个解码器 MHA 瓦片 (E)、一个 FF 瓦片和一个归一化单元组成。编码器 (D) 和解码器 (E) MHA 瓦片由 AH Mats (F) 和聚合器单元组成。


iMTransformer 遵循分层内存结构


这里举例说明一下要如何利用内存池技术进行优化设计。在自动驾驶SoC中,将常用的神经网络参数缓存在片上内存中,加快模型推理过程,假设在自动驾驶系统中,使用Transformer模型对前方车辆进行动态分析。每次处理一帧图像或点云数据时,模型需要加载新的数据,并存储计算过程中的中间结果。每帧数据处理完成后,这些存储空间可以立即被释放和复用。


整个操作过程中,需要在模型的每个处理步骤中,首先尝试从内存池中分配内存。如果内存池中有合适的空闲块,则直接使用,否则申请新的内存块。当这一步计算完成并且中间结果不再需要时,将内存块返回到内存池中,以供下一步使用。通过使用内存池技术,可以显著减少因频繁的数据加载和内存分配导致的内存带宽占用。在实际系统中,可以通过监控内存使用情况和带宽利用率,评估内存池技术的效果。由于减少了内存分配和释放的开销,系统整体的响应速度将得到提高,特别是在处理连续数据流时(如视频帧或点云序列),内存池的优势更加明显。


4
ONE

软件框架/库支持与能耗优化


基于transformer这类并行运算的大模型深度学习框架中,可以使用如TensorFlow Lite的嵌入式版本来加载和运行Transformer模型,专门针对自动驾驶SoC的优化,减少延迟和功耗。例如,使用TensorFlow Lite来运行一个针对交通标志识别的Transformer模型。在图编译器(Graph Compiler)时,使用TVM等工具将模型编译成优化的二进制代码,以便在SoC上高效执行。比如,将Transformer模型用于实时行人检测的推理。


假设你正在自动驾驶感知系统中使用 Transformer 模型进行车辆识别和动态分析。首先需要将已经训练好的 Transformer 模型(用于识别前方车辆)转换为 TensorFlow Lite 格式,并进行量化,将模型权重从 32 位浮点数量化为 8 位整数。如下图表示全整数量化(Full Integer Quantization)的代码示意图。



将模型部署到自动驾驶 SoC 上时,可以使用 SoC 的 NPU 或 DSP 进行硬件加速,确保模型推理时在毫秒级别内完成。通过剪枝和批处理优化,进一步减少模型在推理过程中所需的内存和计算资源,从而降低 SoC 的功耗。


在能耗优化方面,动态调节电压和频率(DVFS)。根据自动驾驶场景的复杂性调整SoC的电压和频率。例如,在高速公路上进行自动驾驶时,由于环境较简单,可以降低SoC运行处理频率来节省能耗。而在复杂城市路况时,提高频率可以保证模型的实时性。在低功耗设计中,在设计自动驾驶Transformer模型时,采用更少的计算资源和高效的算法,如使用轻量级Transformer结构进行车辆跟踪。


5
ONE

测试验证与部署维护


最后,使用自动驾驶仿真平台(如CARLA)来模拟Transformer模型在各种驾驶场景中的表现,验证其在SoC上的性能是否符合实时要求。根据仿真结果,调整Transformer模型的结构,优化SoC的运行参数,如在检测夜间行人时,提升模型的注意力机制,以提高识别精度。在车辆的OTA更新中,推送新的优化后的Transformer模型,使其在SoC上运行时能更好地应对最新的路况和场景。


在远程监控与调优过程中,通过车载系统实时监控部署在SoC上的Transformer模型的性能,如检测模型在不同天气条件下的表现,并根据需要远程进行调优或更新。

6
ONE

以实例讲解如何做好最后化软件部署


以下将以实例完整的说明如何将Transformer模型转换、优化并部署到自动驾驶SoC上,从而在资源受限的环境中实现高效、实时的感知和决策。


步骤一:准备和训练原始Transformer模型


选择合适的模型架构,确定自动驾驶中要解决的具体任务。例如物体检测是识别和定位道路上的车辆、行人、交通标志等。车道检测是识别道路车道线。场景理解是分析整体驾驶环境。根据任务选择适合的Transformer模型架构,例如Vision Transformer(ViT) 适用于图像分类和物体检测。DETR(Detection Transformer)专为物体检测设计。Swin Transformer适用于高效图像识别。


在数据集准备和模型训练阶段,收集大量高质量的自动驾驶相关数据,并进行准确的标注。在模型训练阶段,使用TensorFlow框架在高性能计算环境中训练模型,确保模型达到预期的准确度和性能。


步骤二:将模型转换为TensorFlow Lite格式


通过安装必要的工具和库,便可以编写转换脚本进行基本模型转换,应用模型进行必要的量化(比如动态范围量化、整数量化、全整数量化),并在训练过程中应用剪枝实现稀疏化。


如下图表示了一种使用现代 Ampere GPU 和不同的 FPGA 来加速基于 N:M 稀疏 Transformer 的模型。通过生成一系列 N:M 稀疏 Transformer 以及专用加速器,可以实现高效的模型部署。



步骤三:针对自动驾驶SoC进行特定优化


过程中需要确定SoC的硬件特性和支持的量化格式,主要是通过了解SoC支持的指令集和加速器。确认SoC是否支持INT8运算,以及是否有专门的硬件支持。


  • DSP(数字信号处理器):适合处理信号和图像数据。


  • NPU(神经网络处理单元):专为深度学习推理加速设计。


  • GPU(图形处理单元):适合并行处理大量数据。


TensorFlow Lite提供了多种Delegate用于不同硬件加速,包括GPU Delegate、Edge TPU Delegate、自定义硬件Delegate(针对特定SoC厂商提供的Delegate,例如NVIDIA、Qualcomm等,使用对应的SDK和库)。配置多线程和缓存优化,确保模型和必要的数据加载到高速缓存中,减少内存访问延迟。使用SoC提供的内存管理API,将模型参数预加载到片上存储器。


步骤四:部署和集成到自动驾驶系统


在集成到感知模块阶段,通过数据预处理,在摄像头或传感器获取的数据上进行必要的预处理,如归一化、尺寸调整等,确保与模型输入格式匹配。在模型推理完成后,将模型输出结果转换为实际的检测、分类或定位信息。


在实时性能测试与优化阶段,需要充分测试模型在SoC上的推理时间、内存占用和功耗。使用SoC提供的性能监控工具,实时监测系统状态。识别影响性能的关键因素,如数据I/O、计算密集部分进行瓶颈分析。根据测试结果,调整模型结构、量化策略、线程数等参数。甚至可能需要回到模型训练和转换阶段,重新调整和优化。


在模型加载和推理过程中,可以添加异常捕获机制,确保系统在异常情况下能够安全降级或恢复。在各种驾驶场景和环境下长时间运行,测试系统的稳定性和可靠性。最后,通过支持OTA更新,能够远程更新模型和软件,以适应新场景和改进性能

知识星球,新年优惠券重磅来来袭!,结识一群志同道合的小伙伴一起成长。









知识星球,新人优惠券来袭,结识一群志同道合的小伙伴一起成长。


下一个风口会不会是生成式AI 与具身智能的时代,我们特意创建了生成式AI与具身智能交流社区,关于大模型,机器人的相关业界动态,学术方向,技术解读等等都会在社区与大家交流,欢迎感兴趣的同学加入我们(备注具身智能)!   

自动驾驶之星知识星球主打自动驾驶量产全技术栈学习,并包括: 学习板块,求职面试,有问必答,论文速递,行业动态五大板块!星球内部包括端到端大模型,VLM大模型,BEV 障碍物/车道线/Occ 等的学习资料!

生成式AI与具身智能知识星球,我们相信生成式AI 与具身智能会碰撞出出乎我们意料的内容,本知识形象并包括: 学习板块,求职面试,有问必答,论文速递,行业动态五大板块!星球内部包括生成式AI大模型,具身智能,业界资料整理等的学习资料!


自动驾驶之星是面向自动驾驶&智能座舱量产向相关的交流社区,欢迎大家添加小助手加入我们的交流群里,这里有一批奋斗在量产第一线的小伙伴等你的加入!

👇点个“赞”和“在看”吧


自动驾驶之星
自动驾驶之星,是一个以自动驾驶\x26amp;智能座舱量产交流为主的社区。这里有自动驾驶\x26amp;智能座舱量产第一线的前沿动态,有一群奋斗在自动驾驶\x26amp;智能座舱量产第一线的小伙伴在分享他们的量产经历。期待你的加入!希望每个人在这个浪潮中都能成为自动驾驶之星!
 最新文章