得益于现有的硬件和加速器,深度学习在 2010 年代初开始兴起,在这种支持下,研究人员和工程师提出了更复杂、更大的模型。然而,内存消耗和执行时间等限制仍然是一个挑战。由于计算资源的限制,这些挑战在工程和商业领域变得更加突出。
近年来,随着更大、更复杂的模型的普及,优化模型以使其能够以最小的资源消耗输出尽可能高的质量已成为一个关键问题。这一主题在深度学习模型的推理阶段的重要性是双重的。这种重要性除了运行时的优化(速度和内存消耗)外,还与模型训练环境和推理环境之间的差异有关。一般来说,在环境中训练和推理模型并不总是可能的。因此,提供将开发和训练过程与部署和推理过程分开的条件一直是机器学习工程师和研究人员关注的问题之一。
在本系列文章中,我们打算通过解决底层细节来研究在 ONNX 和 ONNX Runtime 的帮助下优化神经网络模型所面临的挑战。
在第 1 部分中,我们将回顾模型优化和加速方法的介绍,并解释需要通用中间表示 ONNX 的原因。在第 2 部分中,我们将深入了解 ONNX Runtime 的构建块。
本文为第1部分,接下来,我们将概述推理阶段可用的优化和加速方法:
1、推理加速栈
推理加速栈由不同级别组成,至少应使用其中一个级别才能实现更快的推理。它可以分为三种类型的级别:
1.1 硬件:通过并行化提高计算能力
硬件设备处于加速器的最低级别。CPU、GPU、TPU 等单元执行计算。尽管存在差异,但更快的计算可带来更快的模型推导。然而,由于摩尔定律等原因,硬件加速存在根本限制。