benjamin wan
benjamin wan
1. 第一次慢,从第二次开始快:应该是硬件从休眠状态warmup,比如cpu从低功耗低频状态提升到正常状态。 2. db适合用gpu,而angle和crnn正好相反、用CPU更快。
linux下使用cuda,除了onnxruntime需要对应的运行库以外, 1. linux可能也要安装特定版本的cuda sdk,具体看使用的onnxruntime是哪个版本,要去官方Release页面找说明。 2. 代码里要启用OrtSessionOptionsAppendExecutionProvider_CUDA(session_options, 0),参考官方的sample,https://github.com/microsoft/onnxruntime/blob/master/samples/c_cxx/imagenet/main.cc。 3. 以上内容没有条件测试,我只有AMD显卡,在win下使用DirectML版测试(另一种GPU加速的onnxruntime版本),加载模型出错op不支持。
> > 我在Linux环境下运行成功了c ++项目,onnxruntime下载了对应的gpu版本。但是在程序加载完模型后,查看gpu使用情况,其中并没有相应的显着占用,请问如何让onnxruntime使用gpu加速? > > 您好,我在linux下运行 报错 找不到libOcrLiteNcnn.so无法打开共享对象文件:没有这样的文件或目录,您遇到这个问题了吗 linux最好自己编译。因为有些底层标准库没法静态链接,而linux发行版太多,库版本不一样,cpu架构不一样,别人机编译的静态库可能你用不了。 找不到libOcrLiteNcnn.so,有几个可能原因: 1. 与windows不同(win只要放到同一个文件夹就行了),linux的so必须配置动态库的搜索路径,参考项目的编译说明里有关[部署的说明](https://github.com/DayBreak-u/chineseocr_lite/tree/onnx/cpp_projects/OcrLiteNcnn#linux部署说明) 2. 可能这个so依赖底层标准库的版本不一样,导致这个so你用不了。 3. 可能平台不同,比如x64的so,不能用在x86的平台上,比如arm的so不能用在pc平台上。 4. ……总之因为提供的信息太少,而其它的可能性也很多,所以这样的问题其实是回答不了。比如使用什么cpu架构,哪个linux发行版,具体哪个系统版本,C标准库的版本多少,ocr的代码来自哪个仓库或分支,都有可能造成问题。
@xl111 1. libOcrLiteNcnn.so如果是来自demo ,demo是ubuntu16.04 lts编译的,先用demo里的脚本验证redhat6.9是否能正常跑。 2. run-test脚本如果能正常得到结果,那么证明so是可以用的,就不需要自己编译so,OcrLiteNcnnJvm.jar只是个最简demo,最好不要直接调用,应该把其中有用的代码集成到自己的项目里,java调用jni也需要配置so搜索路径,自己参考run-test脚本的相关内容。 3. 如果run-test脚本运行出错,那么证明so不能用,得自己从C++源码编译。
@xl111 这个仓库了包含了python,C++,android,C#等项目,之前一直以为你说是C++项目,所以提到了配置LD_LIBRARY_PATH搜索路径。 后来才知道你说的是java项目,是我搞错了,java只需要配置 java.library.path,这个变量百度搜一下就行了,相关文章很多,就不复制粘贴了。
@xl111 1. java不需要配置LD_LIBRARY_PATH,只需要配置java.library.path就行了 2. run-test-java.sh里已经配置了java.library.path,所以你运行这个脚本时,该配置的都已经配置好了,那么还是出现找不到so的问题,基本可以确定这个so不能用于你的系统。 3. 需要注意的是demo提供的这个so是x64的,不能用于32位系统,查看你之前提供的信息,并没有提到你的系统redhat6.9是32位还是64位,所以这里不能判断到底是因为32位系统不能用,还是因为依赖的底层库版本问题。 4. 这样就只能从源码编译了,需要注意的是,源码编译C++项目时,它的依赖库还有opencv和ncnn,也必须从源码编译。
@xl111 x86_64是64位的。
@xl111 ncnn版编译jni要求g++>=6, onnx版编译jni要求g++>=5, 这个是根据测试结果得出的结论,并非各个依赖库或代码有这样明确的要求。 ncnn版用g++5也能编译通过,但运行的时候会报错。
@xl111 操作不了是碰到什么问题? 文档就是我写的。 如果环境是ubuntu 16,直接用群里提供的完整工程代码就行了。 不是ubuntu的话,就得自己从ncnn,opencv开始研究怎么编译,这就得自己去它俩的开源仓库学习编译需要的环境和工具,等你自己把依赖库编译好了,再替换到到C++工程项目里编译本体,大概就是这样的步骤。