本文主要是介绍PyTorch Mobile现已支持Android NNAPI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”
作者:David Reiss
编译:ronghuaiyang
导读
Pytorch在移动端的应用变的更加方便。
今天,我们宣布了PyTorch的一个原型功能:支持Android的神经网络API (NNAPI)。PyTorch Mobile旨在为ML开发人员提供一流的体验,并在所有移动硬件上实现高性能的执行。NNAPI的支持对于实现这一目标至关重要,因为它扩展了我们可以用来快速执行模型的硬件集。这个初始版本包含了对一组小而强大的特性和操作的全功能支持,我们将在未来几个月扩大支持。
NNAPI允许Android应用程序在手机芯片最强大、最高效的部件上运行计算密集型神经网络,包括GPU(图形处理单元)和NPU(专门的神经处理单元)。它在Android 8 (Oreo)中被引入,并在Android 10和11中显著扩展,以支持更丰富的AI模型集。虽然NNAPI为各种硬件驱动程序提供了方便的统一接口,但它是一个需要大量集成工作的低级API。像PyTorch这样的高级框架使更多的应用程序开发人员可以获得这些好处。
NNAPI没有本地磁盘模型格式,所以我们选择将模型定义封装在普通的TorchScript模型中。开发人员将在训练后准备好他们的模型,然后在NNAPI上执行。然后,保存的模型可以打包到Android应用程序中(或通过网络交付),然后使用PyTorch Mobile的Java API或libtorch c++ API加载和运行。对于已经使用PyTorch Mobile的应用程序,不需要更改代码。开发人员可以简单地用NNAPI模型替换他们的CPU模型。
对于PyTorch开发者来说,访问和使用Android的NNAPI对随时在线的实时模型(如设备上的计算机视觉)特别有吸引力。这些模型往往是计算密集型的、对延迟敏感的和能耗高的。同时满足这三个要求是一项挑战,这使得这些模型成为利用硬件加速的最佳选择。这也是Facebook对NNAPI感兴趣的原因之一。在门户设备上支持虚拟背景体验的AI模型现在正在Messenger应用程序中使用NNAPI进行测试,以启用沉浸式360度背景功能。
如表1所示,在Pixel 3上为这个模型使用Android的NNAPI,可以在单核CPU和2核CPU之间实现高性能,从而为非ML应用程序代码释放CPU。此外,在像Pixel 4和Pixel 5这样的新设备上,NNAPI支持更高级别的性能,这可以被更复杂的ML模型利用。
表1 — 沉浸式360度背景启用模型基准测试类似地,许多实时音频模型也被引入到移动应用程序中。由于具有类似的并发性、延迟和电源需求,减少背景噪声等特性也将受益于基于NNAPI的硬件加速。
在框架或API之间转换机器学习模型总是很棘手,这次也不例外。虽然PyTorch和NNAPI都是为了运行相同类型的神经网络而开发的,但在从一个转换到另一个时,需要弥合语义上的许多微小差异。例如:
NNAPI使用整数偏置进行量化卷积运算,而PyTorch使用浮点运算。
PyTorch和NNAPI对卷积中的权值张量期望不同的内存排序。
PyTorch之前有一个复杂的上采样操作的内部表示,为了更容易转换到NNAPI,必须对其进行简化。
PyTorch和NNAPI有不同的NHWC张量表示。NNAPI只支持连续张量,因此需要显式的NHWC表示。PyTorch支持大步张量,因此约定总是使用NCHW,但可以选择结合channels-last memory format来获得NHWC行为。
这是PyTorch中NNAPI支持的第一个原型版本,当部署在Android 10及以上设备上时,它支持众所周知的线性卷积和MLP模型。即将发布的PyTorch将添加额外的功能,例如:
支持额外的运算符来解除额外模型类型的阻塞。
支持基于Mask R-CNN架构的加速模型。更多关于移动Mask R-CNN的信息请访问:https://research.fb.com/blog/2018/01/enabling-full-body-ar-with-mask-r-cnn2go/。
支持较早的Android版本,8 (Oreo)和9 (Pie)。
支持利用控制流语义的模型。
当NNAPI可用的时候,模型可以在用户的Android手机上用,否则自动回退到CPU上执行。
使用表1中所示的手机,表2展示了对开源MobileNetV2模型进行基准测试的结果,与使能360度背景模型中看到的结果类似,可以获得类似的CPU负载,甚至更显著的性能优势。
表2 — MobileNetV2模型基准关于如何在你的应用程序中使用PyTorch和Android NNAPI,以及复制相同的基于MobileNet v2的基准测试的更多信息,请看:https://pytorch.org/tutorials/prototype/nnapi_mobilenetv2.html。
—END—
英文原文:https://medium.com/pytorch/pytorch-mobile-now-supports-android-nnapi-e2a2aeb74534
请长按或扫描二维码关注本公众号
喜欢的话,请给我个在看吧!
这篇关于PyTorch Mobile现已支持Android NNAPI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!