sdcb / PaddleSharp

.NET/C# binding for Baidu paddle inference library and PaddleOCR
Apache License 2.0
1.05k stars 197 forks source link

gpu下rec出问题 #61

Open xlg-go opened 1 year ago

xlg-go commented 1 year ago

大佬您好,最近用您mast分支代码, paddle版本是2.5.0, cuda 11.8.0,cudnn 8.6,trt8.5, rec结果不对, 不知道怎么回事,您有空帮忙看下? PaddleOcrRecognizerResult { Text = Y08&01728308, Score = 0.27904937 } Y08&01728308 不知道是什么,反正正确的结果应该是 15

gpu和trt加速,结果都不对, 只有mkldnn下正常。

sdcb commented 1 year ago

请用nuget包试试,master上是最新版

xlg-go commented 1 year ago

请用nuget包试试,master上是最新版

试了

image image
sdcb commented 1 year ago

需要看看你的代码和图片

xlg-go commented 1 year ago

需要看看你的代码和图片

首先再次感谢大佬,百忙之中抽空。

  1. 环境: ubuntu 20.04, paddle 2.5.1 或者 2.5.0 或者 develop, cuad12.0.1-cudnn8.9.1-trt8.6.1 或者 cuda11.8.0-cudnn8.6-trt8.5, paddleSharp 是您master分支, 全程是在docker容器中运行。

    倘若将paddleSharp版本换成nuget上的最新版(v2.6.05),就会报如下错误:

    image
  2. c# 代码结构如下图:

    image
  3. 以下是识别打印的日志: rlt 既是识别结果,原本TestImgs文件夹下有多张图片,由于github限制,故只留了一张。

    image
  4. 以下是代码zip包: ConsoleApp1.zip

sdcb commented 1 year ago

在Linux上执行的话,你需要卸载Sdcb.PaddleInference.runtime.win64.mkl这个包,同时我也想看看你的dockerfile是怎么写的?

xlg-go commented 1 year ago

在Linux上执行的话,你需要卸载Sdcb.PaddleInference.runtime.win64.mkl这个包,同时我也想看看你的dockerfile是怎么写的?

我是用vs studio发布的,如下图:

image

去掉Sdcb.PaddleInference.runtime.win64.mkl,也不行哦!

下面是我的dockerfile: dockerfile-ubuntu2004-cuda-cudnn-trt-cvsharp-pd-dotnetruntime.txt

ldd libpaddle_inference_c.so 和 ldd libOpenCvSharpExtern.so,都不缺少依赖。

基于官方镜像 paddlepaddle/paddle:2.5.1-gpu-cuda12.0-cudnn8.9-trt8.6,也是不行的!

当然,如果是 paddle 2.4,在 ubuntu2004-cuda11.8.0-cudnn8.6.0-trt8.5.1-cvsharp4.7.0-pd2.4.2-dotnetruntime6.0.14 环境下,就没问题,运行的很好。很棒!!!

我估计就是到 paddle 2.5,是不是有什么新特性啥的。最后,感谢大佬,万分感谢,社区有您,丰富多彩!!!

sdcb commented 1 year ago

呃,我重新看了一下,我说错了,用linux你并不需要卸载Sdcb.PaddleInference.runtime.win64.mkl

sdcb commented 1 year ago

我看到了你的dockerfile,写得非常好,其实2.4和2.5在使用GPU模式下有一点区别,见这里: 这是2.5的: https://github.com/sdcb/PaddleSharp/blob/af04f4f97b48be9349f576906c4d249f70e72909/src/Sdcb.PaddleInference/Native/PaddleNative.g.cs#L92

这是2.4的: https://github.com/sdcb/PaddleSharp/blob/229a89880411c7a35492099db9eb53fb8e60a6e4/src/Sdcb.PaddleInference/Native/PaddleNative.g.cs#L84

可见2.5相比2.4的C API多了一个参数,因此使用2.4的Sdcb.PaddleInference必须配套2.4的动态库,2.5的也必需相应配套,会不会是跟这个有关?

xlg-go commented 1 year ago

您master分支就是配套 paddle 2.5的 libpaddle_inference_c.so 吧?我是用您master分支生成的dll,然后配套2.5的libpaddle_inference_c.so

还有就是,精度是Float32的,和您这里默认的是一致的:

image

最后,感谢大佬夸奖~~~哈哈!!!

sdcb commented 1 year ago

对,master分支对应的是2.5版本,新加了这一参数,如果它与配套运行的GPU版本号不一致,则肯定会有问题,你的问题算得到解决了吗?

xlg-go commented 1 year ago

对,master分支对应的是2.5版本,新加了这一参数,如果它与配套运行的GPU版本号不一致,则肯定会有问题,你的问题算得到解决了吗?

算是没解决吧~ cuda,cudnn,trt版本严格对标paddle官方的,问题依旧; 就连用官方的镜像,依旧是有问题的; 不知道怎么解决了,反正现在用 paddle 2.4.2,配合您的2.6.05版本,也能用,现就这样吧。

image
xlg-go commented 1 year ago

对,master分支对应的是2.5版本,新加了这一参数,如果它与配套运行的GPU版本号不一致,则肯定会有问题,你的问题算得到解决了吗?

对了,您说的GPU版本号是什么意思?这是什么?这还认GPU吗?

sdcb commented 1 year ago

看到了,你是使用的这个版本的包对吧:paddlepaddle/paddle:2.5.1-gpu-cuda12.0-cudnn8.9-trt8.6 基于这个包,你使用这个版本:2.6.0.6-preview.8能不能用呢?

xlg-go commented 1 year ago

大佬,有没有考虑基于c++ lib?而不是c lib?感觉还是c lib底层有问题,当然这都是我的猜测哈!

paddlesharp是您的master最新代码。当然即使是用您nuget包Sdcb.PaddleOCR 2.7.0,也是如此。 环境是 ubuntu2204-cuda12.0.0-cudnn8.9.1-trt8.6.1-cvsharp4.7.0-pd2.5.1-dotnetruntime6.0.14

sdcb commented 1 year ago

你的问题可以持续关注,只是C++的lib很能直接被C#调用,必须要走C

sdcb commented 1 year ago

会不会是cuda12兼容不佳?要不要换成cuda11.8或者10.2试试?你是什么显卡?

xlg-go commented 1 year ago

会不会是cuda12兼容不佳?要不要换成cuda11.8或者10.2试试?你是什么显卡?

我还怀疑是不是2.5.1版本的paddle,它是用gcc12.2编译的有关?但我用cuda11.8和2.5.1的环境,也是不行的。当然gcc8.2编译的2.5.1也同样不行! 综上,我怀疑可能是和底层c lib有关。毕竟最近用飞将,确实有很多问题,其中不乏一些都是官方的bug!兼容性还是不如pytorch这些!

我在2080ti,3090这些卡,都是不行的!

xlg-go commented 1 year ago

你的问题可以持续关注,只是C++的lib很能直接被C#调用,必须要走C

我有关注到,Python的包,里面用的好像就是c++ lib吧?毕竟Python用的人多,所以感觉会不会c++方面bug是不是少一点!愚见!!!

sdcb commented 1 year ago

会不会是cuda12兼容不佳?要不要换成cuda11.8或者10.2试试?你是什么显卡?

我还怀疑是不是2.5.1版本的paddle,它是用gcc12.2编译的有关?但我用cuda11.8和2.5.1的环境,也是不行的。当然gcc8.2编译的2.5.1也同样不行! 综上,我怀疑可能是和底层c lib有关。毕竟最近用飞将,确实有很多问题,其中不乏一些都是官方的bug!兼容性还是不如pytorch这些!

我在2080ti,3090这些卡,都是不行的!

Linux上没试过,但Windows上3080TI用GPU是没问题的

xlg-go commented 1 year ago

会不会是cuda12兼容不佳?要不要换成cuda11.8或者10.2试试?你是什么显卡?

我还怀疑是不是2.5.1版本的paddle,它是用gcc12.2编译的有关?但我用cuda11.8和2.5.1的环境,也是不行的。当然gcc8.2编译的2.5.1也同样不行! 综上,我怀疑可能是和底层c lib有关。毕竟最近用飞将,确实有很多问题,其中不乏一些都是官方的bug!兼容性还是不如pytorch这些!

我在2080ti,3090这些卡,都是不行的!

Linux上没试过,但Windows上3080TI用GPU是没问题的

感觉对Windows友好一些,我再想想办法

BigerPatax commented 9 months ago

兄弟们 有结果吗 我这边是用gpu和trt得不到结果或者乱码

xlg-go commented 8 months ago

兄弟们 有结果吗 我这边是用gpu和trt得不到结果或者乱码

近期比较忙,paddle只是后备方案,主选还是pytorch转onnx转trt。 近期又有一个新方案,基于paddle c++版本,外面再包一层c++,貌似没什么问题,后期有时间了再测试一下。

BigerPatax commented 8 months ago

兄弟们 有结果吗 我这边是用gpu和trt得不到结果或者乱码

近期比较忙,paddle只是后备方案,主选还是pytorch转onnx转trt。 近期又有一个新方案,基于paddle c++版本,外面再包一层c++,貌似没什么问题,后期有时间了再测试一下。

我这边用了openvino C#版的部署 CPU推理效果还可以 文字框不多的基本都在100ms以内

xlg-go commented 8 months ago

兄弟们 有结果吗 我这边是用gpu和trt得不到结果或者乱码

近期比较忙,paddle只是后备方案,主选还是pytorch转onnx转trt。 近期又有一个新方案,基于paddle c++版本,外面再包一层c++,貌似没什么问题,后期有时间了再测试一下。

我这边用了openvino C#版的部署 CPU推理效果还可以 文字框不多的基本都在100ms以内

gpu总归是个问题,我严重怀疑是paddle本身的问题。毕竟是百度