gpt4 book ai didi

android - 移动 GPU 上的 Mxnet

转载 作者:行者123 更新时间:2023-11-29 19:28:44 26 4
gpt4 key购买 nike

我想在移动设备上运行神经网络。目前,我正在探索用于部署它的 Mxnet ( http://mxnet.io) 框架(仅用于推理)。由于我担心移动设备上的执行时间性能,我想知道它是否在手机(Android/iOS)的 GPU 上运行。文档中提到它可以使用多个 CPU 以及 GPU 进行训练,但目前还不清楚是否可以使用手机的 GPU 在移动设备上进行推理。它提到了对 BLAS 的依赖,因此它似乎在移动设备上使用 CPU。谁能告诉我是否可以将移动 GPU 与 mxnet 一起用于推理?如果没有,我的其他选择是什么?

最佳答案

更新:Neural Networks API现在可在从 API 27 (Oreo 8.1) 开始的 Android 设备上使用。 API 提供了一个较低级别的工具,较高级别的机器学习框架(例如 Tensorflow、Caffe)可以使用它来构建模型。它是一种 C 语言 API,可以通过 Android Native Development Kit (NDK) 访问。

NNAPI 为硬件供应商提供服务提供商接口(interface) (SPI),为图形处理单元 (GPU) 和数字信号处理器 (DSP) 等计算硬件提供驱动程序。因此,NNAPI 为高性能计算提供了抽象。如果不存在硬件加速驱动程序,则有 CPU 回退。

对于那些想要在 Android 上实现机器学习模型的人,现在选择的框架是 Tensorflow Lite . Tensorflow Lite for Android 是在 NNAPI 之上实现的,因此 Tensorflow 模型将在可用时获得硬件加速。 Tensorflow Lite 还进行了其他优化,以从移动平台中获得更多性能。

流程如下:

  • 在 Keras 上开发和训练您的模型(使用 Tensorflow 后端)
  • 或者使用预训练模型
  • 以 Tensorflow protobuf 格式保存“卡住”模型
  • 使用 Tensorflow 优化转换器将 protobuf 转换为“预解析”tflite 模型格式

参见 Tensorflow Lite Developer Guide


我完成了使用 Deeplearning4j 为 Android 创建神经网络应用程序的练习.因为 Deeplearning4j 是基于 Java 的,所以我认为它会很适合 Android。根据我的经验,我可以回答你的一些问题。

回答您最基本的问题:

Could anyone please tell me if I can use mobile GPU with mxnet for inference?

答案是:否。对此的解释如下。

It mentions about dependency on BLAS, because of which it seems it uses CPU on mobile.

BLAS (Basic Linear Algebraic Subprograms)是人工智能计算的核心。由于这些复杂模型中涉及大量的数字运算,因此必须尽可能优化数学例程。 GPU 的计算能力使其成为 AI 模型的理想处理器。

看来 MXNet 可以使用 Atlas (libblas)、OpenBLAS 和 MKL。这些是基于 CPU 的库。

目前,在 GPU 上运行 BLAS 的主要(而且——据我所知——唯一的)选项是 CuBLAS,它专门为 NVIDIA (CUDA) GPU 开发。显然,除了 CPU 库之外,MXNet 还可以使用 CuBLAS。

许多移动设备中的 GPU 是一种低功耗芯片,适用于还没有专用 BLAS 库的 ARM 架构。

what are my other options?

  • 只需使用 CPU。由于这是计算量极大的训练,因此使用 CPU 进行推理并不像您认为的那样。在 OpenBLAS 中,例程是用汇编语言编写的,并针对它可以运行的每个 CPU 进行了手动优化。这包括 ARM。

  • 在服务器端进行识别。在开发了另一个演示应用程序,该应用程序将图像发送到执行识别的服务器并将结果返回到设备后,我认为这种方法对用户有一些好处,例如更好的整体响应时间,并且不必寻找空间来安装 100MB (!) 申请。

由于您还标记了 iOS,如果您尝试跨平台,使用基于 C++ 的框架(如 MXNet)可能是最佳选择。但是他们创建一个巨大的 .cpp 文件并提供简单的 native 界面的方法可能无法为您提供足够的 Android 灵 active 。 Deeplearning4j 通过使用 JavaCPP 非常优雅地解决了这个问题。这消除了 JNI 的复杂性。

关于android - 移动 GPU 上的 Mxnet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com