-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[GPU适配] 适配进行中 #13
Comments
然后如果我想的不错的话,可能编译出来GPU版本可以直接拿来替换掉CPU版本,只要models正确的话 |
|
刚刚重新测试了一下 |
尝试进行了RapidOcrOnnx编译,仍然出现此提示,已经转发到RapidOcr的交流群 |
依据RapidOCR交流群提供的消息,onnxruntime 对cuda和cudnn的版本有特定的要求。针对不同的cuda和cudnn,很可能需要提供不同的编译版本。 |
另外依据群内消息,根据此篇博文,也有可能是编译的时候产生的动态库链接错误。如果是这样的话只需要替换一次动态库即可解决问题,我测试一下 |
也就是说,必须客户机先安装CUDA,才能使用GPU版的RapidOcrOnnx吗? 有没有可能将特定版本的CUDA核心库(几个dll)放置到RapidOcrOnnx的路径下,让它优先使用我们提供的cuda(而不是系统安装的)? 类似: https://blog.csdn.net/zhangfuliang123/article/details/71757961 |
不,现在定位的问题很有可能是windows在system32下内置一个旧版本的onnxruntime.dll导致的。
我正在尝试修复这个问题,但是我没有无cuda的gpu机器能对其进行无cuda环境测试,至于这个cuda要不要安装可能要延后测试。 |
windows的dll查找优先级应该是先同级目录再system32的,不过我这里产生了很奇怪的情况,把正常运行的onnx从RapidOCR范例拷贝到我自己编译的OCR还是不能正确链接,我再想想 Edit:正在使用windbg进一步检查 |
依据RapidOCR开发者提供的消息,需要使用到的cuda和cuddn DLL依赖高达1G,并且不开源。并不是几个DLL就能解决的问题,必须要整体安装。 我会优先解决onnxruntime的问题,确保编译的RapidOCR-json能正常运作,至于依赖问题我可以先尝试一下您给出的博文,如果不可行就只能安装了。 |
补充:经过测试,无CUDA机不能够正常启动此程序,会无提示闪退。 |
你可以在你仓库里写个GPU版构建说明,各个工具、库的版本都罗列清楚。过阵子我也会参考试试。 |
我成功把onnx库的版本(包括onnx-static和onnx-gpu)提升到了1.16,然后意识到第一次的运行失败很有可能源自我没有搞明白文件夹结构。 |
Update:发现一个非常严重的问题 |
经过几轮排查和在RapidOCR群的询问,可以做出的猜测为onnx runtime的gpu版本与cuda兼容性呈现相关。 https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html 我没有很接触过cuda类编程,也没有查询到具体哪一个版本号的cuda支持哪一代GPU,可能需要再找点材料才能明确这个问题。 GPU的构建指南今天就写出来 |
折腾了两周无果,不知道为何还是只有我的电脑能运行 |
好我刚发完没多久 |
嗯嗯,辛苦了~ GPU版的兼容性和适配难度我是有预料的。编译和构建只是最初的一步,在各种机器上确保兼容性才是最麻烦的工作。 我目前在忙着Umi v2.1.0的补充工作,暂时没有时间顾及这边。不过你有什么进展,可以将最新编译的包扔到你的release,我有空会测试测试。 我还有一个想法:既然CUDA的安装本身需要一定门槛,且兼容性问题真的难以解决。并且,假设需要用GPU加速的都是有一定动手能力的用户。则我们可以只提供docker版本GPU-OCR引擎(让docker去解决不同系统的适配问题)。用户可以在linux上,或者windows+WSL上安装它,然后Umi的插件通过端口调用该引擎。 进一步的,或许可以将Umi-OCR项目分裂为桌面版本和服务器版本( hiroi-sora/Umi-OCR#351 (comment) ),桌面版只提供基础的CPU-OCR插件,服务器版则支持GPU插件;桌面版Umi可以调用服务器版提交OCR任务。 |
收到了,docker那边我没有研究过,可能等着过段时间专门找点时间去看看 |
Docker版本进展非常顺利,原项目RapidOCR-Onnx已经能够正常跑起来,下面开始着手测试RapidOCR-json |
RapidOCR-json 这边我没有写多平台适配的代码,PaddleOCR-json 那边写了。 你可以参考一下这些文件,它们可以实现复用大部分共通代码,而独立使用不同平台的独特代码: https://github.com/hiroi-sora/PaddleOCR-json/blob/main/cpp/src/task.cpp 不过这部分的工作量可能不小。我想了想,如果真的要走docker这条路的话,也许没有必要抓着我的 -json 魔改版不放(这个项目的意义就是简化在桌面平台的部署难度)。PaddleOCR官方本身也提供了比较方便的docker部署方案,用现成的也不错。 参考: 值得调查的是:
总之,只要能实现目标(让Umi能用上GPU,且用户友好)的方法就是好方法,而不必纠结于实现方式。 |
明确了,这样我先去研究一下PaddleOCR-json的GPU复用,现在已经可以确认docker版本部署两个原项目问题不大 |
· 使用环境为VS 2022,nvcc参数如下
· CPU版本编译成功
· GPU版本在CPU版本的基础上按照GPU编译指南下载了GPU对应库,并且在generate vs project里更改了生成参数重定向到cuda参数
· vs编译未出现异常
· 编译后尝试运行,出现以下提示
不是很清楚这个given version是哪里来的,于是就卡死了(
初步怀疑是models的问题,但是我又不能确定,我一会去找找低版本的models试试看
The text was updated successfully, but these errors were encountered: