使用 TFLite 分析 XNNPACK
2022 年 6 月 15 日

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 位)浮点格式,XNNPACK 也可以执行半精度浮点格式的推理,并且 IEEE16 推理支持模型中的每个浮点运算符,并且模型的 `reduced_precision_support` 元数据表明它与 FP16 推理兼容。FP16 推理也可以强制执行。有关更多信息,请访问 这里。如果使用了半精度,则 Name 列中将显示 F16。

使用了 FP16 推理。

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

QU8 表明使用了无符号量化推理。

最后,使用了稀疏推理。稀疏运算符要求数据布局从 NHWC 更改为 NCHW,因为这更高效。这可以在运算符名称中看到。

SPMM 微内核表明运算符是通过 SParse 矩阵 - 稠密矩阵乘法进行评估的。请注意,稀疏推理对运算符使用 NCHW 布局(而不是典型的 NHWC)。

请注意,当某些运算符委托给 XNNPACK,而其他运算符没有委托时,将显示两组分析信息。当模型中并非所有运算符都受 XNNPACK 支持时,就会发生这种情况。该项目接下来的步骤是将 XNNPACK 运算符和 TensorFlow Lite 的分析信息合并到一个分析信息中。

下一步

您可以通过访问此 指南,了解有关 TensorFlow Lite 中的性能测量和分析的更多信息。感谢您的阅读!


下一篇文章
Profiling XNNPACK with TFLite

Alan Kelly,软件工程师撰写 我们很高兴地宣布,从 TensorFlow 2.9.1 版本开始,XNNPACK 的详细 分析信息 现已可用。 XNNPACK 是一个针对 ARM、WebAssembly 和 x86 平台的高度优化的浮点神经网络推理运算符库,是浮点模型默认的 TensorFlow Lite CPU 推理引擎。最常见且成本最高的…