Paddle-Lite icon indicating copy to clipboard operation
Paddle-Lite copied to clipboard

关于paddlelite的咨询

Open levinzhangyd opened this issue 3 years ago • 5 comments

Hi, 有一些基础问题想得到比较官方的解答,麻烦开发大神了。3q 1.paddle-lite兼容了很多gpu or xpu平台,兼容的方法论是咋样的?自己实现算子,还是使用硬件平台提供的算子做封装?或者两者都有?为啥每个平台都要有不同的库文件,不同之处主要在哪里?是不同的算子封装? 2.paddle-lite是不是兼容谷歌NNAPI的,因为目前大部分移动端都是android系统,如果适配过NNAPI,是不是会比较容易推广?如果现在还不支持,后面有没有相应的计划?

levinzhangyd avatar Jul 27 '22 10:07 levinzhangyd

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网文档常见问题历史Issue来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQ and Github Issue to get the answer.Have a nice day!

paddle-bot[bot] avatar Jul 27 '22 10:07 paddle-bot[bot]

Hi, 有一些基础问题想得到比较官方的解答,麻烦开发大神了。3q 1.paddle-lite兼容了很多gpu or xpu平台,兼容的方法论是咋样的?自己实现算子,还是使用硬件平台提供的算子做封装?或者两者都有?为啥每个平台都要有不同的库文件,不同之处主要在哪里?是不同的算子封装? 2.paddle-lite是不是兼容谷歌NNAPI的,因为目前大部分移动端都是android系统,如果适配过NNAPI,是不是会比较容易推广?如果现在还不支持,后面有没有相应的计划?

  1. Paddle Lite 在支持不同硬件有两种方法,一种是基于算子,类似于ARM OpenCL,就是要实现每个算子 kernel,必须基于 lite 源码实现,另一种是图引擎,例如华为HiAi、NNAPI、TensorRT等,由于是基于硬件适配层 NNAdapter,所以每个硬件有自己的 HAL 动态库(.so)。
  2. Paddle Lite 已经支持 NNAPI ,Demo 和详细问题可以查看 https://www.paddlepaddle.org.cn/lite/develop/demo_guides/android_nnapi.html 目前算子支持的不多,不过后面补全。

hong19860320 avatar Jul 27 '22 13:07 hong19860320

非常感谢您的回复,下面看看我的理解是否和您的说法一致。 1.目前的NNAPI只是定义了一些神经网络基本的算子名称,这些算子的具体实现由芯片厂商做固件的人去对接硬件实现。NNAPI到预测框架的这一块,是类似paddle这种框架来做的,主要是对NNAPI做适配。因为每个平台不一样,所以对应的固件/Hal不一样?那是不是一个厂家的,基本就是固定了,可以保持不变.比如我使用MTK平台,就可以都用APU那个实例?只是不同芯片厂之间要生成不同的so 2.从我目前调研的情况来看,各个前向预测框架都宣称支持,但是也还没有做到简单化和通用化。 3.如何判断终端到底是运行在apu还是在cpu里面呢?只能通过时间实测?还是有一些关键log或者其他的查询方法呢?

levinzhangyd avatar Jul 28 '22 07:07 levinzhangyd

Hi, 有一些基础问题想得到比较官方的解答,麻烦开发大神了。3q 1.paddle-lite兼容了很多gpu or xpu平台,兼容的方法论是咋样的?自己实现算子,还是使用硬件平台提供的算子做封装?或者两者都有?为啥每个平台都要有不同的库文件,不同之处主要在哪里?是不同的算子封装? 2.paddle-lite是不是兼容谷歌NNAPI的,因为目前大部分移动端都是android系统,如果适配过NNAPI,是不是会比较容易推广?如果现在还不支持,后面有没有相应的计划?

  1. Paddle Lite 在支持不同硬件有两种方法,一种是基于算子,类似于ARM OpenCL,就是要实现每个算子 kernel,必须基于 lite 源码实现,另一种是图引擎,例如华为HiAi、NNAPI、TensorRT等,由于是基于硬件适配层 NNAdapter,所以每个硬件有自己的 HAL 动态库(.so)。
  2. Paddle Lite 已经支持 NNAPI ,Demo 和详细问题可以查看 https://www.paddlepaddle.org.cn/lite/develop/demo_guides/android_nnapi.html 目前算子支持的不多,不过后面补全。

想请问您,如果我想开发intel_fpgad的kernel,我应该如何入手。

zhigfu avatar Jul 28 '22 07:07 zhigfu

非常感谢您的回复,下面看看我的理解是否和您的说法一致。 1.目前的NNAPI只是定义了一些神经网络基本的算子名称,这些算子的具体实现由芯片厂商做固件的人去对接硬件实现。NNAPI到预测框架的这一块,是类似paddle这种框架来做的,主要是对NNAPI做适配。因为每个平台不一样,所以对应的固件/Hal不一样?那是不是一个厂家的,基本就是固定了,可以保持不变.比如我使用MTK平台,就可以都用APU那个实例?只是不同芯片厂之间要生成不同的so 2.从我目前调研的情况来看,各个前向预测框架都宣称支持,但是也还没有做到简单化和通用化。 3.如何判断终端到底是运行在apu还是在cpu里面呢?只能通过时间实测?还是有一些关键log或者其他的查询方法呢?

  1. 理解的基本正确,调用流程是 Paddle Lite-> Android NNAPI -> 不同硬件厂商 NN HAL,库调用关系 APP->libpaddle_light_api_shared.so->libnnadapter.so->libandroid_nnapi.so->libneuralnetworks.so->厂商 NN HAL 动态连接库,其中 libneuralnetworks.so->厂商 NN HAL 动态连接库 在每台设备的系统里自带的,因此,我们提供的 libpaddle_light_api_shared.so、libnnadapter.so、libandroid_nnapi.so 库是适用于所有 android 设备的,可以查看 https://www.paddlepaddle.org.cn/lite/develop/demo_guides/android_nnapi.html 文档实现一键运行 demo。
  2. 嗯,从我们提供的 demo 来看,我们的目的就是要做到简单、易用,能够让大家用 Paddle 训练后,能够快速完成部署。
  3. 如何确认模型是否跑在加速器上?它是由各家芯片厂商的 NN HAL 决定的,例如 MTK 芯片,fp32 模型会跑在 GPU 上,而 int8 模型则跑在 VPU 上(可以通过 adb logcat 查看,跑之前可以设置下 $ setprop debug.nn.profiler.supported 1 $ setprop debug.nn.partitionext.type OPERATION);华为麒麟芯片,fp32 模型跑在 NPU + fp16 精度上,性能爆棚,但由于 int8 模型跑在 nnapi-reference上,性能比较弱,基本不可用;高通芯片,只有 int8 模型是跑在 DSP 上,性能马马虎虎,高通在支持 NNAPI 上没有投入太多,不过大家可以期待下半年高通发布的 QNN,fp32 和 int8 模型有较大性能上的提升,我们也正在适配它,就等高通正式发布了。

hong19860320 avatar Jul 28 '22 14:07 hong19860320