PaddleOCR icon indicating copy to clipboard operation
PaddleOCR copied to clipboard

CPU推理,开启mkldnn报错 RuntimeError: could not execute a primitive

Open pengfeidip opened this issue 2 years ago • 1 comments

执行环境:ubuntu 20.04 + cpu + mkldnn

错误信息:

File "/usr/src/app.py", line 160, in invoke
ocr_result = ocr_inference(disk_im_fullpath) File "/usr/src/app.py", line 87, in ocr_inference result = ocr.ocr(im, cls=False) File "/usr/local/lib/python3.8/dist-packages/paddleocr/paddleocr.py", line 524, in ocr dt_boxes, rec_res, _ = self.call(img, cls) File "/usr/local/lib/python3.8/dist-packages/paddleocr/tools/infer/predict_system.py", line 71, in call dt_boxes, elapse = self.text_detector(img) File "/usr/local/lib/python3.8/dist-packages/paddleocr/tools/infer/predict_det.py", line 234, in call self.predictor.run()

RuntimeError: could not execute a primitive

这个似乎和 #3313 是同一个问题,但是一直没有修复吗?

pengfeidip avatar Oct 31 '22 01:10 pengfeidip

mkldnn需要在intel的支持mkldnn计算的CPU上才能生效,你的CPU是?

LDOUBLEV avatar Nov 04 '22 07:11 LDOUBLEV

我也遇到了这个问题。在Win11下直接安装的Python环境中没遇到这个问题。但是使用Linux虚拟机内的Ubuntu20.04容器部署全部程序后发现识别图片的时候第一次好像没问题,后面就大概率会提示“RuntimeError: could not execute a primitive”。 我发现这个问题与PaddleOCR初始化有关系,如果ocr = PaddleOCR(……)之后,反复使用ocr.ocr(……),就容易出问题。如果每次都重新使用PaddleOCR(……)生成新的ocr对象,再使用ocr.ocr(……)就不会遇到问题。但这样系统效率会降低一些吧?

gongjimin avatar Dec 06 '22 02:12 gongjimin

@LDOUBLEV 跑在云服务上,虚拟化的CPU,打印出来的信息是。 2 Intel(R) Xeon(R) Processor @ 2.50GHz

应该就是正常的intel 服务器CPU。并且这个现象不是每次必现,偶尔出现

pengfeidip avatar Dec 15 '22 03:12 pengfeidip

我也遇到了这个问题。在Win11下直接安装的Python环境中没遇到这个问题。但是使用Linux虚拟机内的Ubuntu20.04容器部署全部程序后发现识别图片的时候第一次好像没问题,后面就大概率会提示“RuntimeError: could not execute a primitive”。 我发现这个问题与PaddleOCR初始化有关系,如果ocr = PaddleOCR(……)之后,反复使用ocr.ocr(……),就容易出问题。如果每次都重新使用PaddleOCR(……)生成新的ocr对象,再使用ocr.ocr(……)就不会遇到问题。但这样系统效率会降低一些吧?

我就是初始化一次,然后反复使用的.

pengfeidip avatar Dec 15 '22 03:12 pengfeidip

我就是初始化一次,然后反复使用的.

那么我们遇到的似乎是一样的问题。如果初始化一次,使用后等一段时间再用好像就不会报这个错。

gongjimin avatar Dec 15 '22 12:12 gongjimin

@LDOUBLEV
我在本地的服务器上,for循环去跑同样的代码,也是intel的CPU就不会出现这样的问题...

pengfeidip avatar Dec 26 '22 08:12 pengfeidip

同步一下我的相关进展

最初的现象

在云服务上,全局初始化一次,进行多次推理,然后出现了错误:RuntimeError: could not execute a primitive

后续尝试

  1. 在本地的服务器上,同样的docker镜像,同样的代码,完全没问题,intel和amd型号的CPU都试了,都是新型号的家用CPU。
  2. 最后在云服务上,每次前向都重新进行模型的初始化,然后就解决了这个问题。

pengfeidip avatar Jan 04 '23 02:01 pengfeidip

同步一下我的相关进展

最初的现象

在云服务上,全局初始化一次,进行多次推理,然后出现了错误:RuntimeError: could not execute a primitive

后续尝试

  1. 在本地的服务器上,同样的docker镜像,同样的代码,完全没问题,intel和amd型号的CPU都试了,都是新型号的家用CPU。
  2. 最后在云服务上,每次前向都重新进行模型的初始化,然后就解决了这个问题。

这样耗时不会增加吗?有评估过影响多大吗?

bigmover avatar Jan 10 '24 09:01 bigmover

thanks to @pengfeidip , following the solution that new object for every request , resolved present issue ;

pengpengno avatar Jul 16 '24 07:07 pengpengno