TensorRT概述里我们提到实际部署一个深度学习模型时,可能会有五个目标:throughput、latency、efficiency、memory usage、accuracy等。

在某些场景下,latency和accuracy是非常看重的指标,诸如工业流水线、无人驾驶、门禁系统等等。那么设计一个低时延的计算机视觉模型,需要考虑哪些因素呢?

一个计算机视觉模型的时延不仅与float-point operations(浮点运算次数)相关,还与memory access cost(内存访问代价)、degree of parallelism(可并行程度)相关。

此外承载模型的硬件(比如是GPU还是CPU,如果是GPU的话,具体是什么型号等等)、软件(具体是如何实现的,比如CUDA、cuDNN的具体版本,有没有对模型的图进行优化等等)对模型时延的影响也极大。任何两个模型时延的对比,只有在特定硬件和软件给定的情况下才有意义。

即我们可以把设计一个低时延计算机视觉模型建模为一个最优化问题:目标是时延尽可能低,约束是给定任务的accuracy、部署的软硬件环境。

每个具体的部署软硬件环境有它的脾性,我们得摸清楚这个具体部署环境的优势、劣势,在设计网络的时候充分利用它的优势,尽量避开它的劣势。

那么如何摸清具体部署环境的优势、劣势呢?假设我们部署环境使用的是英伟达的AGX Jetson Xavier,我们可以写几个典型的结构,然后在部署环境下用TensorRT进行优化,并在部署环境下测时延,根据部署环境上典型结构的时延,再辅以部署环境软硬件的开发文档、性能指标,我们大概就能知道当前部署环境的优势、劣势。

摸清部署环境的特点之后,就可以开始设计(或者挑选)网络了,如果是挑选网络的话,那就很简单,直接在部署环境中测一下业界流行的网络结构时延,选其中时延最低的。如果要设计网络的话,就会稍微麻烦一些,当然收益也会更大,因为业界流行的网络结构在设计时的约束与我们不同,任务不同、部署的软硬件环境大概率也不同,不同的约束情况下最优解大概率不同。

深度学习高效网络结构设计给出了一些高效网络设计的思路,里面很重要的一点是网络结构本身就是先验,也就说不同任务、软硬件情况下的最优网络结构会不一样,即如果要追求时延的极致,网络结构重新设计是必要的。

除此之外,还有一点比较重要,影响时延的各个因素(比如网络输入图片分辨率、网络宽度、深度等等)不是独立的,要想达到时延、准确率的一个较好的tradeoff,我们应该平衡影响时延的各个因素,或者说同时优化各个因素。