我想在手机上运行一个神经网络。目前,我正在探索Mxnet (http://mxnet.io)框架来部署它(仅用于推断)。由于我担心手机的执行时间性能,我想知道它是否运行在移动电话的GPU (Android/iOS)上。文档中提到,它可以使用多个CPU和GPU进行培训,但还不清楚是否可以在移动电话上使用GPU进行推理。它提到了对BLAS的依赖,因为它似乎在移动上使用CPU。有人能告诉我是否可以使用移动GPU和mxnet进行推理吗?如果没有,我的其他选择是什么?
发布于 2016-11-18 17:43:56
更新:神经网络API现在可以从API27(Oreo8.1)开始在安卓设备上使用。API提供了一个较低级别的工具,高级机器学习框架(例如Tensorflow,Caffe)可以用来构建模型。它是一个C语言API,可以通过(NDK)访问。
NNAPI为硬件供应商提供了一个服务提供者接口(,SPI),用于为图形处理单元(GPU)和数字信号处理器(DSP)等计算硬件提供驱动程序。因此,NNAPI为高性能计算提供了一个抽象。在没有硬件加速驱动程序的情况下,会出现CPU回退。
对于那些想要在Android上实现机器学习模型的人来说,现在选择的框架是Tensorflow Lite。Tensorflow Lite for Android是在NNAPI之上实现的,因此Tensorflow模型在可用时将获得硬件加速。Tensorflow Lite还有其他优化,可以从移动平台中挤出更多的性能。
这一过程如下:
tflite模型格式。我使用Deeplearning4j为安卓系统创建了一个神经网络应用程序。因为Deeplearning4j是基于Java的,所以我认为这将是与Android很好的匹配。根据我在这方面的经验,我可以回答你的一些问题。
要回答你最基本的问题:
有人能告诉我是否可以使用移动GPU和mxnet进行推理吗?
答案是:不。对此的解释如下。
它提到了对BLAS的依赖,因为它似乎在移动上使用CPU。
基本线性代数子程序是人工智能计算的核心。由于这些复杂模型所涉及的数字运算量很大,所以必须尽可能地优化数学例程。GPU的计算能力使它们成为AI模型的理想处理器。
看来MXNet可以使用Atlas (libblas)、OpenBLAS和MKL。这些是基于CPU的库。
目前,在GPU上运行BLAS的主要选项(而且--据我所知)是CuBLAS,专门为NVIDIA (CUDA) GPU开发。显然,除了CPU库之外,MXNet还可以使用CuBLAS。
许多移动设备中的GPU是一种低功耗芯片,它与ARM架构一起工作,目前还没有专用的BLAS库。
我还有别的选择吗?
由于您也标记了iOS,如果您试图跨平台的话,使用MXNet这样的基于C++的框架可能是最好的选择。但是,他们创建一个巨大的.cpp文件和提供一个简单的原生界面的方法可能无法为安卓提供足够的灵活性。Deeplearning4j通过使用JavaCPP来很好地解决了这个问题,它将复杂性从JNI中去掉。
https://stackoverflow.com/questions/40678514
复制相似问题