8

我所拥有的:Tensorflow 中经过训练的循环神经网络。

我想要的:一个可以尽可能快地运行这个网络的移动应用程序(仅限推理模式,无需训练)。

我相信有多种方法可以实现我的目标,但我希望您提供反馈/更正和补充,因为我以前从未这样做过。

  1. 张量流精简版。Pro:直截了当,可在 Android 和 iOS 上使用。魂斗罗:可能不是最快的方法,对吧?
  2. 张量RT。Pro:非常快 + 我可以编写自定义 C 代码以使其更快。魂斗罗:用于 Nvidia 设备,所以在 Android 和 iOS 上运行并不容易,对吧?
  3. 自定义代码 + 库,如 openBLAS。Pro:可能非常快,并且有可能在 iOS 上的 Android 上链接到它(如果我没记错的话)。对比:循环神经网络有多大用处?它真的在 Android + iOS 上运行良好吗?
  4. 重新实现 Everything。我还可以用 C/C++ 重写整个计算,这对于循环神经网络来说应该不会太难。Pro:可能是最快的方法,因为我可以优化所有内容。反对:需要很长时间,如果网络发生变化,我也必须更新我的代码(尽管如果它真的是最快的,我愿意这样做)。另外,在 Android 上调用库 (C/C++) 的速度有多快?我是否受到 Java 接口的限制?

有关移动应用程序的一些详细信息。该应用程序将记录用户的声音,进行一些处理(如 Speech2Text)并输出文本。我不想找到“足够快”的解决方案,而是最快的选择,因为这将发生在非常大的声音文件上。所以几乎每一次速度改进都很重要。你有什么建议,我应该如何解决这个问题?

最后一个问题:如果我想雇人来帮助我,我应该寻找 Android/iOS-、Embedded- 或 Tensorflow- 类型的人吗?

4

1 回答 1

4

1.TensorflowLite

优点:它在 Android 上使用 GPU 优化;相当容易融入Swift/Objective-C 应用程序,并且非常容易融入 Java/Android(只需在 gradle.build 中添加一行);您可以将 TF 模型转换为CoreML

缺点:如果您使用 C++ 库 - 将 TFLite 作为库添加到您的 Android/Java-JNI 时会遇到一些问题(没有 JNI 就无法构建此类库的本地方法);iOS 上不支持 GPU(社区在MPS集成上工作)

这里也是对 TFLite 语音到文本演示应用程序的参考,它可能很有用。

2.张量RT

它使用 TensorRT 使用使用 CUDA 库的 cuDNN。有CUDA for Android,不确定它是否支持整个功能。

3.自定义代码+库

我建议您使用Android NNet 库CoreML;如果您需要更深入 - 您可以使用Eigen库进行线性代数。但是,从长远来看,编写自己的自定义代码并没有好处,您需要支持/测试/改进它——这是一件大事,比性能更重要。

重新实现一切

这个选项与上一个选项非常相似,实现自己的 RNN(LSTM) 应该没问题,只要你知道自己在做什么,只需使用其中一个线性代数库(例如 Eigen)。

总体建议是:**

  • 尝试在服务器端进行:使用一些有损压缩和服务器端 Speech2text;
  • 尝试使用 TensorFlow Lite;衡量性能,发现瓶颈,尝试优化
  • 如果 TFLite 的某些部分太慢 - 在自定义操作中重新实现它们;(并对 Tensorflow 进行 PR)
  • 如果瓶颈在硬件级别 - 转到第一个建议
于 2018-03-23T23:54:33.460 回答