用TFLite对XNNPACK进行分析

639 阅读3分钟

发布者:Alan Kelly,软件工程师

我们很高兴与大家分享,在TensorFlow 2.9.1及以后的版本中,XNNPACK的详细剖析信息现在已经可以使用。XNNPACK是一个高度优化的浮点神经网络推理算子库,适用于ARM、WebAssembly和x86平台,它是TensorFlow Lite CPU默认的浮点模型推理引擎。

最常见和最昂贵的神经网络运算符,如全连接层和卷积,是由XNNPACK执行的,这样你就可以从你的模型中获得最佳性能。历史上,剖析器会测量整个委托图部分的运行时间,这意味着所有委托运算符的运行时间都累积在一个结果中,因此很难识别缓慢的单个操作。

以前使用XNNPACK时的TFLite剖析结果。所有委托运算符的运行时间都累积在一行中。

如果你使用TensorFlow Lite 2.9.1或更高版本,它甚至对委托给XNNPACK的部分给出了每个运算符的剖析,这样你就不再需要在快速推理和详细的性能信息之间做出决定。计算器名称、数据布局(例如NHWC)、数据类型(FP32)和微内核类型(如果适用)都被显示出来。

现在显示新的详细的每个运算器剖析信息。操作员名称、数据布局、数据类型和微内核类型都可以看到。

现在,你可以得到很多有用的信息,比如每个操作者的运行时间和它占总运行时间的百分比。每个节点的运行时间是按照它们被执行的顺序给出的。最昂贵的运算符也被列出。

最昂贵的运算符被列出。在这个例子中,你可以看到去卷积占了总运行时间的33.91%。

如果硬件原生支持半精度(16位)浮点运算,并且模型中的每个浮点运算符都支持IEEE16推理,并且模型的`reduced_precision_support`元数据表明它与FP16推理兼容,那么XNNPACK也可以用半精度(16位)浮点格式执行推理。FP16推理也可以被强制执行。这里有更多信息。如果使用了半精度,那么F16将出现在名称栏中。

已经使用了FP16推理。

这里,使用了无符号量化推理(QU8)。

QU8表示已经使用了无符号量化推理

最后,使用了稀疏推理。稀疏运算符要求数据布局从NHWC变为NCHW,因为这更有效率。这可以从运算符的名称中看出。

SPMM微内核表示运算符是通过SParse matrix-dense Matrix Multiplication进行评估的。注意,稀疏推理使用NCHW布局(与典型的NHWC相比)的运算符。

注意,当一些运算符被委托给XNNPACK,而另一些没有被委托时,会显示两组配置文件信息。这发生在模型中并非所有的操作者都被XNNPACK支持的时候。这个项目的下一步是将XNNPACK操作符和TensorFlow Lite的配置文件信息合并到一个配置文件中。

接下来的步骤

你可以通过访问本指南了解更多关于TensorFlow Lite的性能测量和剖析。谢谢你的阅读!