对于任何注定要在批量生产中部署的嵌入式软件,一旦完成并验证了其核心功能的实现,就会在代码中投入大量精力。这个优化阶段是关于最小化所需的内存、CPU 和其他资源,以便尽可能多地保留软件功能,同时将执行它所需的资源减少到绝对最低限度。这种从基于实验室的算法创建嵌入式软件的过程使嵌入式开发人员能够将软件功能成本工程化为大规模生产就绪形式,与用于开发它的大规模计算数据中心相比,需要更便宜、功能更弱的芯片和硬件。

然而,它通常需要从一开始就冻结功能,修改代码只是为了改进算法本身的执行方式。对于大多数软件来说,这很好:实际上,它可以使用严格的验证方法来确保嵌入过程保留所有所需的功能。

然而,当嵌入基于 NN 的 AI 算法时,这可能是一个主要问题。为什么?因为通过从一开始就冻结功能,您正在删除可以优化执行的主要方式之一。

问题是什么?

有两种根本不同的方法可以解决将复杂的神经网络从实验室中不受约束,资源丰富的神经网络训练环境移植到受严格约束的嵌入式硬件平台的任务:

优化执行神经网络的代码

优化神经网络本身

当嵌入式开发人员发现内存带宽瓶颈或底层嵌入式硬件平台利用率低等性能问题时,传统的嵌入式软件技术会鼓励您深入挖掘底层代码并找到问题所在。

这反映在当今可用于嵌入式 MCU 和 DSP 的许多先进和复杂的工具中。它们使您能够深入了解软件中正在发生的事情,并识别和改进软件本身的执行——希望不会改变其功能。

对于神经网络,优化与传统的嵌入式软件完全不同——至少如果你想用可用的硬件资源获得最好的结果。使用 NN,通过改变拓扑 NN 本身(NN 的各个层如何连接,以及每层的作用)和使用更新的约束和输入重新训练它的某种组合来实现改进。这是因为功能不是由神经网络“软件”定义的,而是由训练期间应用的目标和约束来创建定义神经网络最终行为的权重。

因此,在进行 NN 的嵌入过程时,您需要冻结 NN 的目标性能,而不是它是如何实现的。如果您从嵌入式开发过程的开始就约束 NN 拓扑,那么您正在移除生产工程师提高性能所需的工具。

这意味着您需要新的和不同的工具来完成将 NN 从实验室移植到嵌入式平台的任务。而低级软件工程师无法完成这项工作——您需要 AI 工程师根据工具为您提供的性能信息来调整 NN 及其训练。这是新的:当研发工程师将训练有素的神经网络交给生产工程师时,他们再也不能说“工作完成了”!

另一种方法:

通过采用将人工智能研发工程师置于嵌入式软件移植任务中心的开发工作流程,任何芯片都可以取得卓越的成果。使用以层为中心的分析,并在几分钟内快速完成从编译修改后的卷积神经网络 (CNN) 到查看目标神经处理器单元 (NPU) 的准确性能结果,嵌入式开发人员可以使用相同的底层硬件实现 100% 或更多的收益.这是因为修改 CNN 本身,而不是只修改用于执行相同 CNN 的代码,可以让 AI 工程师更灵活地识别和实施性能改进。

在开发我们的 aiWare NPU 时,AImotive 使用了我们自己的 AI 工程师将过程移植到具有广泛 NPU 功能的多个不同芯片的经验。 我们想找到更好的方法来帮助我们自己的 AI 工程师完成这项任务,因此在开发我们对 aiWare NPU 本身和支持它的 aiWare Studio 工具的要求时,我们发现了一些在我们过去使用过的硬件平台上没有看到的理想特性:

高度确定性的 NPU 架构,让时序非常可预测

准确的基于层(不是基于时序或低级代码)的性能估计,以便任何 AI 研发工程师都可以快速地看到更改其训练标准(例如添加或更改使用的场景,或修改目标 KPI)和 / 或 NN 拓扑的影响。

准确的离线性能估算,使所有的 NN 优化都可以在第一个硬件可用之前进行(因为第一个原型总是稀缺的!)

最后检查

当然,当芯片和硬件原型可用时,测量最终硬件是至关重要的。这种嵌入式开发环境中实时硬件分析功能的可用性使工程师可以访问由此类工具支持的 NPU 内的一系列深度嵌入式硬件寄存器和计数器。 虽然芯片开销很小(因为许多 NPU 由内存而非逻辑主导),但这些功能可以在执行期间实现前所未有的、非侵入性的实时性能测量。 然后,这可用于直接与离线性能估计器结果进行比较,以确认准确性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部