本技术公开了一种多加速器异构SoC平台上深度学习负载映射优化方法及系统,涉及计算机性能能耗协同优化技术领域,用以提高深度学习推理应用的性能同时降低能耗。本发明的技术要点包括:首先提取有性能或能耗优化潜力的子网络;接着测量融合节点和子网络的性能和能耗数据;再建立解析的性能和能耗预测模型,以预测不同映射配置下推理引擎的运行时间和能耗;之后使用基于变长滑动窗口的映射优化算法搜索性能‑能耗更优的映射配置;最后生成推理引擎并遍历搜索最优的CUDA stream数量。本发明无需用户干预,可以全自动地找到性能‑能耗更优的映射配置并生成推理引擎。与现有的JEDI等方法相比,本发明性能提升更多,能耗节省也更多,同时优化过程所需时间也更短。
背景技术
深度学习应用已在异构SoC(System on a Chip)平台上普遍存在。目前众多的异构SoC平台配备了GPU(Graph Processing Unit)和NPU(Neural Processing Unit,NPU)等多种加速器来加速深度学习应用。例如,广泛使用的英伟达Jetson系列平台就包含了CPU、GPU、DLA(deep learning accelerator),Jetson系列异构SoC平台是英伟达公司发布的专为机器人和嵌入式边缘AI应用打造的计算平台,DLA是英伟达公司开发的一种针对深度学习操作的硬件加速器。DLA旨在对卷积神经网络进行全硬件加速。DLA支持卷积、反卷积、全连接、激活、池化、批量归一化等神经网络层。英伟达提供了TensorRT开发工具来帮助用户在Jetson平台上部署深度学习推理应用,其可以从深度学习模型生成能在Jetson平台上运行的推理引擎。TensorRT主要关注在单一加速器(GPU或DLA)上优化深度学习应用的性能,不能自动地将神经网络的不同层映射到最适合的加速器上。TensorRT默认只支持两种映射策略:①仅使用GPU,即将所有深度学习网络层映射到GPU;②尽量使用DLA,即将尽可能多的神经网络层映射到DLA。TensorRT提供了Python和C++API接口,支持用户按照自定义的策略,将深度学习网络层映射到GPU和DLA,以生成GPU-DLA混合引擎。
GPU和DLA都是较为适合处理深度学习负载的加速器。通常来说,GPU绝对性能更强,通用性更好,能运行几乎所有种类的神经网络层。一般而言,对于高计算密集的神经网络层,可能GPU能效更好(例如性能延迟积指标更低EDP=Energy·Time),同时对于追求低延迟的场景,也应该使用GPU。DLA专为运行特定种类神经网络层而设计,其在部分神经网络层上有更好的能效,但是其绝对延迟不一定低于GPU,另外其也不能运行设计范围之外的神经网络层。还需要考虑的是,深度学习负载在GPU和DLA之间切换时会有额外开销,且不能忽略。因此,相对于仅使用GPU或尽量使用DLA的映射策略,如果在GPU和DLA间合理地映射深度学习负载,有机会提高性能(即提高单位时间推理次数或降低延迟)同时降低能耗。
近年来,许多研究优化了深度学习负载到多加速器的映射,以提高性能并降低能耗。早期的方法手动遍历映射搜索空间,无法自动优化,优化过程繁琐且耗时极长。一些半自动方法人工建立经验模型以指导映射优化过程。这些方法需要用户在异构计算和深度学习方面具有大量专业知识,经验模型建立也需要大量时间和数据。而且这些经验模型只适用于特定应用或特定平台,通用性较差。
目前较先进的方法使用进化算法或启发式算法寻找最优的层映射配置。由于进化算法和启发式算法的特性,以及没有性能和能耗模型指导优化过程,这些自动化方法必须反复在不同层映射配置下生成深度学习推理引擎,并测量性能和能耗表现。因此,这些自动方法通常需要花费十几个小时甚至数天才能找到最优配置。例如,目前优化效果较好的JEDI方法[1]
就基于遗传算法和启发式算法。
综上所述,现有深度学习负载映射优化方法效率不高。另外,现有方法没有充分考虑深度神经网络的拓扑结构,可能错过许多优化机会。
实现思路