我目前正在评估和比较一些tensorflow模型在不同智能手机上的性能。我正在测试MNIST和CIFAR10数据库。奇怪的是,当我试图用硬件加速来加快推理时间时,它们的表现总是比以前差。例如,这些是我在Galaxy Note 20 Ultra上获得的结果,它肯定有一些功能强大的GPU和NPU(每个推断的结果都是毫秒):
MNIST : 0.040
MNIST GPU: 2.322
MNIST NNAPI: 2.839
CIFAR10 CPU: 0.810
CIFAR10 GPU: 8.120
CIFAR10 NNAPI: 6.608
我在基准测试之前对处理单元进行了热身,并多次执行推理,因此这些都是平均值,不应该是随机的。下面可以看到用于配置TensorFlow-Lite的NNAPI或GPU的代码:
val model = loadModelFile(assetManager, modelPath)
val compatList = CompatibilityList()
var nnApiDelegate: NnApiDelegate? = null
val options = Interpreter.Options().apply{
if (USE_NNAPI && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
nnApiDelegate = NnApiDelegate()
this.addDelegate(nnApiDelegate)
}
else if(USE_GPU && compatList.isDelegateSupportedOnThisDevice){
val delegateOptions = compatList.bestOptionsForThisDevice
this.addDelegate(GpuDelegate(delegateOptions))
} else {
// if the GPU is not supported, run on 4 threads
this.setNumThreads(4)
}
}
val interpreters = Interpreter(model, options)有谁知道这是什么原因或者如何解决的?谢谢你提供任何提示或线索!
编辑:输入大小MNIST: 24 x 24 x 255输入大小CIFAR10: 32 x 32 x 3 x 255
我通过测量在设备上执行一次推理的时间来测量推理次数,然后计算出之后的平均值。
发布于 2022-08-10 00:03:31
这两种模型在CPU上的表现似乎都很好,推理延迟< 1ms。
加速器并不总是比CPU快。通常,当访问加速器时会有一些开销。另外,加速器可以很好地运行某些模型/操作符,但它们可能不支持CPU支持的所有操作符。此外,如果模型的性能是内存绑定的,那么CPU可能会很快甚至更快。
可能值得尝试一些更大的视觉模型,例如mobilenet_v1_1.0_224,看看是否有加速与GPU或其他加速器。
https://stackoverflow.com/questions/73125716
复制相似问题