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

pronblem on the arm 73

Open 2050airobert opened this issue 3 years ago • 18 comments
trafficstars

1、 num_threads 的设置不一定在其他平台上也适用吧? 这个取决于main 主程序里 对于相应cpu的多线程功能启动的配置是否生效吧? 我看了下,程序运行的时候确实只有1个core在使用,这说明num_threads没有生效,根本原因需要修改main主程序对吧?也就是 src 文件夹里的main.cc等文件,对吗?

问题背景请参考: https://github.com/PaddlePaddle/PaddleDetection/issues/5181 2、 tinypose支持在 支持opengl2.0的mali gpu t系列或者g系列上运行吗? 目前有跑通的case分享吗?

2050airobert avatar Feb 11 '22 05:02 2050airobert

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网文档常见问题历史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-old[bot] avatar Feb 11 '22 05:02 paddle-bot-old[bot]

v7-clang 不支持多线程,原因是NDK 版本遗留问题,不知道open mp 其他包是支持多线程的,选中 大核(A73)即power_mode=0, 设置线程数 thread_num (1,2,4); 如果用的小核(A53),最多跑两线程。建议选大核

chenjiaoAngel avatar Feb 11 '22 07:02 chenjiaoAngel

关于问题 2,由于 Paddle Lite 的 GPU 后端只有 OpenCL,因此无法使用 OpenGL 来运行。如果您想试着将 tinypose 模型运行在 GPU 上,可以用 Paddle Lite 的 OpenCL 后端。

Mali GPU可以分为不同的架构(Utgard, Midgard, Bifrost, Valhall), 其中后三个架构支持OpenCL,Utgard架构不支持OpenCL。由于我们Paddle-Lite GPU后端是使用OpenCL编写,因此支持 Midgard, Bifrost, Valhall 下的所有 Mali GPU。

由于Mali T系列GPU家族中同时含有Utgard和Midgard这两种架构的产品,因此需要查询对应型号的产品手册后,才能确定Paddle-Lite是否支持。

比如 麒麟910手机上的 Mali GPU T450MP4 型号是Utgard架构,因此我们不支持;麒麟920手机上的Mali GPU T624MP4 型号是Midgard架构,因此我们支持。

zhaoyang-star avatar Feb 11 '22 07:02 zhaoyang-star

1、“v7-clang 不支持多线程,原因是NDK 版本遗留问题,不知道open mp” 由于系统原因,我这边只能选择armv7的编译方式 ,armv8试过无法在手机上运行。因此,我只能选择v7-gcc 这个版本,也只剩下这唯一的选择了吧? 2、目前的gpu是比较新的mali G52 MP4 GPU型号,不知道是否可以顺利支持? 3、我尝试过将tinypose 这种ppdetection官方发布的模型,在mali gpu上跑,也就是用opencl 选项编译,并且用cl的opt工具链转换,都成功了。但是运行的时候,在手机上执行main函数后 没有任何打印信息?这个情况是不是说明了两个问题。 (1) 我们pplite 目前已经支持了tinypose模型在mali gpu with opencl 平台上运行 (2) 具体到每个模型,尤其是比较新的模型,如果pp 官网没有发布demo,那么必须手写main函数 调用具体的模型,以及相应的测例,才能在gpu上运行出正确结果? 4、vulkan未来是不是在移动端并行计算上会逐步超过opencl? 我们不选择vulkan而坚持opencl的原因是? 5、大部分情况下mali gpu上的性能会比该平台上arm 多核用起来的性能好多少呢? (我看到你们回复过的帖子,有提到过大部分时候gpu的性能并不比arm 上好,有时候还会差) 6、 the file mobilenetv1_light_api.cc 里有: const std::string bin_name = "lite_opencl_kernel.bin"; 这里的lite_opencl_kernel.bin 从哪里获得的呢,仓库里面好像没有啊,有专门介绍这部分的吗? 我想参考gpu上的mobilenetv1_light demo,然后改写一个tinypose model在mali gpu上跑的主程序,然后调用tinypose模型,打印结果,这样做有什么问题吗?

BR

2050airobert avatar Feb 11 '22 08:02 2050airobert

7, 实际上我在编译tinypose android cpu v7版本的时候,应该采用的是预编译库gcc 相关的tool,这个问题我再确认下。但现在假设我采用的gcc 编译,那还有什么可能导致多线程设置不生效呢? (运行的配置是:arm a73X4+ A55X2 ) 有木有可能硬件平台还有限制,set_threads函数需要修改匹配才行? 8, 在我编译opencl版本的时候,推荐我用的是clang tool编译,确实转换成功了。但opencl并没有tinypose的demo 主程序,这个需要用户自己写吗?还是可以合作完成呢? 9,在我的opencl版本的跑在gpu的时候,如何把数据从arm传到gpu,gpu上计算结束后,如何传回到arm 上,是用类似Place (注源码 : #if defined(LITE_WITH_OPENCL) place = Place(TARGET(kOpenCL)); ) 这种函数完成的吗?

2050airobert avatar Feb 11 '22 09:02 2050airobert

v7-gcc 多线程支持的,另外看下编译时open mp 是否打开,线程数是否设置正确

chenjiaoAngel avatar Feb 11 '22 11:02 chenjiaoAngel

这是我follow opencl教程的demo做的结果,具体case如下: 企业微信截图_1644580288713 结果是这样的: 企业微信截图_16445804478842 这说明这个case在手机上mali gpu用opencl执行成功了,确定吗?

2050airobert avatar Feb 11 '22 11:02 2050airobert

看源码这,这个没有执行成功

chenjiaoAngel avatar Feb 11 '22 12:02 chenjiaoAngel

https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/lite/kernels/opencl/layout_image_compute_test.cc#L62

chenjiaoAngel avatar Feb 11 '22 12:02 chenjiaoAngel

1,我看了下log里面出错的文件,感觉log不全,而且如果有错误,应该log会报错啊?麻烦帮忙看下是哪里的bug呢? 2,有木有查看手机gpu是否可用,是否支持opencl的方法,有log提示吗?

2050airobert avatar Feb 11 '22 12:02 2050airobert

v7-gcc 多线程支持的,另外看下编译时open mp 是否打开,线程数是否设置正确

CPU信息:2个A75+6个A55

1.老哥 我也遇到这个问题,开始我是用的clang编译的,设置线程和模型都没有作用,模式设置成LITE_POWER_HIGH和LITE_POWER_NO_BIND、LITE_POWER_RAND_LOW推理耗时都在260ms左右,LITE_POWER_FULL和LITE_POWER_RAND_HIGH都会在1000ms左右

2.因为想降低耗时,就想着设置下多线程,发现设置了之后都没有作用,就找到了这个帖子,然后就去paddle lite网站下了个gcc版本的,下载下来后,就把原来的clang版本的libc++_shared.so和libpaddle_light_api_shared.so替换成了gcc版本的,因为是用的cmake来进行编译的,cmake的脚本里面的参数由clang改为了gcc,设置成4线程测了LITE_POWER_HIGH和LITE_POWER_FULL,发现耗时没有变化,请问是哪里操作有问题吗?蟹蟹!

3.还有就是,我是使用的cmake来进行编译的,怎么看open mp有没有打开呢?

下面的是make.sh编译脚本(用的是cmake来进行编译的,自己写的main函数来加载图片然后输入到检测模型和关键点检测模型,测得耗时):

export BASE_PATH=/data/liyy/PoseDemoProject
export NDK_PATH=${BASE_PATH}/android-ndk-r15c
#export NDK_PATH=${SDK_PATH}
export cmake=${NDK_PATH}/build/cmake/cmake-3.22.1/bin/cmake
export LD_LIBRARY_PATH=${NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=/data/liyy/PoseDemoProject/pose_demo_android/app/src/main/cpp/build:${LD_LIBRARY_PATH}

mkdir build
cd build
 
${cmake} -DANDROID_NDK=${NDK_PATH}/build \
         -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
         -DANDROID_PLATFORM=android-21 \
	 -DANDROID_TOOLCHAIN=gcc \ # 这里以前是clang
	 -DANDROID_STL=c++_shared \
         -DANDROID_ABI="armeabi-v7a with NEON" ..

make -j4

liyuyuan6969 avatar Feb 15 '22 01:02 liyuyuan6969

     事实上,arm对于openmp加速效果并不理想。另外pp官网上的demo 确定是在多个arm核上运行的结果吗?

------------------ 原始邮件 ------------------ 发件人: "PaddlePaddle/Paddle-Lite" @.>; 发送时间: 2022年2月15日(星期二) 上午9:24 @.>; @.@.>; 主题: Re: [PaddlePaddle/Paddle-Lite] tinypose在arm 73X4 + A53X2 num_threads不生效! (Issue #8432)

v7-gcc 多线程支持的,另外看下编译时open mp 是否打开,线程数是否设置正确

1.老哥 我也遇到这个问题,开始我是用的clang编译的,设置线程和模型都没有作用,模式设置成LITE_POWER_HIGH和LITE_POWER_NO_BIND、LITE_POWER_RAND_LOW推理耗时都在260ms左右,LITE_POWER_FULL和LITE_POWER_RAND_HIGH都会在1000ms左右

2.因为想降低耗时,就想着设置下多线程,发现设置了之后都没有作用,就找到了这个帖子,然后就去paddle lite网站下了个gcc版本的,下载下来后,就把原来的clang版本的libc++_shared.so和libpaddle_light_api_shared.so替换成了gcc版本的,因为是用的cmake来进行编译的,cmake的脚本里面的参数由clang改为了gcc,设置成4线程测了LITE_POWER_HIGH和LITE_POWER_FULL,发现耗时没有变化,请问是哪里操作有问题吗?蟹蟹!

下面的是make.sh编译脚本(用的是cmake来进行编译的,自己写的main函数来加载图片然后输入到检测模型和关键点检测模型,测得耗时): export BASE_PATH=/data/liyy/PoseDemoProject export NDK_PATH=${BASE_PATH}/android-ndk-r15c #export NDK_PATH=${SDK_PATH} export cmake=${NDK_PATH}/build/cmake/cmake-3.22.1/bin/cmake export LD_LIBRARY_PATH=${NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH=/data/liyy/PoseDemoProject/pose_demo_android/app/src/main/cpp/build:${LD_LIBRARY_PATH} mkdir build cd build ${cmake} -DANDROID_NDK=${NDK_PATH}/build \ -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \ -DANDROID_PLATFORM=android-21 \ -DANDROID_TOOLCHAIN=gcc \ # 这里以前是clang -DANDROID_STL=c++_shared \ -DANDROID_ABI="armeabi-v7a with NEON" .. make -j4
— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you authored the thread.Message ID: @.***>

2050airobert avatar Feb 15 '22 02:02 2050airobert

请问是用的paddle-lite-demo(https://github.com/PaddlePaddle/Paddle-Lite-Demo)仓库的demo吗?这个里面的demo 有我们QA测试验证,多线程是生效的 另外,cmake 编译时,可以cmake_flag 中是否有openmp 相关关键字,可以确认是否打开openmp 您可以把demo 链接给我们,我们看看

chenjiaoAngel avatar Feb 15 '22 03:02 chenjiaoAngel

1,我看了下log里面出错的文件,感觉log不全,而且如果有错误,应该log会报错啊?麻烦帮忙看下是哪里的bug呢? 2,有木有查看手机gpu是否可用,是否支持opencl的方法,有log提示吗?

老哥,请问你的tiny-pose多线程问题解决了吗?

liyuyuan6969 avatar Feb 16 '22 07:02 liyuyuan6969

1)这个建议先在shell下验证多线程是否生效,已排除APP壳的影响 shell-demo: 可以参考readme.md 文档完成模型和输入预/后处理更新进行验证 2)如果shell下多线程生效,然后可以参考paddle-lite-demo APP壳,完成你的模型和输入/输出处理更新,以验证是否有问题

3)如果在这个APP 工程没有问题,说明你参考的APP-demo 应该在多线程上处理有问题,线程数可能没有生效

chenjiaoAngel avatar Feb 16 '22 08:02 chenjiaoAngel

说明你参考的APP-demo 应该在多线程上处理有问题 ”cmake 编译时,可以cmake_flag 中是否有openmp 相关关键字,可以确认是否打开openmp“ 不好意思,请问下另外,您这里提到的 openmp 选项,貌似官网文档没有一个地方提到过啊?在哪里出现这个词的能否发下链接,多谢

2050airobert avatar Feb 17 '22 07:02 2050airobert

hi, 1 我又查看了下,不管是编译demo 应用程序,下图可见 makeflie里面没有任何跟openmp相关的配置 image 2 还是从编译paddle full /light api 动态库来看, 下图的编译android armv7的脚本并没有任何提到openmp相关的部分 image 结论是: 目前发布的版本从paddle库和app来看都不支持 vim3 arm 上的openmp多核加速 所以,是否可以帮忙分享下这部分该如何配置,有链接吗? 多谢

2050airobert avatar Jun 30 '22 08:06 2050airobert

hello,any one could help ?

2050airobert avatar Jun 30 '22 13:06 2050airobert