• 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 工资「喂饱肚子」,副业「养活灵魂」!

避坑指南 – 解决PaddleOCR-VL在GPU上随机概率出现模型推理假死问题

模型部署 发布于2026-04-17 阅读 435次 0次评论 0次点赞 本文共1826个字,阅读需要5分钟。

1 PaddleOCR-VL在GPU上随机出现推理假死问题

之前在一个自己的一个算法管线里面加入了PaddleOCR-VL用于文字识别,我的数据是一连串的图片。

今天突然发现提交的一个任务在PaddleOCR-VL模型调用predict方法推理的时候会卡在那里,既没有爆显存,python也没有捕捉到任何异常和报错信息,它就是单纯的卡在那里,导致整个算法pipeline假死,无法处理新的任务。但是我重新启动算法之后,它又可以推理了,然后又会在某个任务又假死在那里,如此循环往复。

无奈之下上了日志大法,在PaddleOCR-VL推理前和推理后都加上日志:

logger.info(f"paddleocr_vl predict before")
out = self.paddleocr_vl.predict(
        input=input_roi,
        use_doc_orientation_classify=False,
        use_doc_unwarping=False,
        use_layout_detection=False,
        use_chart_recognition=False,
        prompt_label="ocr",
    )
logger.info(f"paddleocr_vl predict after")

在假死的情况下,只会打印“paddleocr_vl predict before”这一句日志,之后推理流程像蒸发一样,就好像从来没有这个推理任务,关键是没有任何报错信息和超时,模型还占着显存,但是显卡利用率为0。

2 问题排查

无奈之下,去paddlepaddle官方仓库看有没有大聪明和我一样遇到了这个问题,发现世界上的大聪明不只我一个,贴下issue链接:

  1. https://github.com/PaddlePaddle/PaddleOCR/issues/17693
  2. https://github.com/PaddlePaddle/PaddleOCR/issues/17640

有佬用strace对卡住的python进程进行跟踪,发现存在同一个ioctl调用的死循环:

ioctl(9, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0x2a, 0x20), 0x7ffd08752fa0) = 0
ioctl(9, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0x2a, 0x20), 0x7ffd08752fa0) = 0
ioctl(9, _IOC(_IOC_READ|_IOC_WRITE, 0x46, 0x2a, 0x20), 0x7ffd08752fa0) = 0
... (repeats forever)

这个ioctl对应NVIDIA的NV_ESC_RM_CONTROL,是PaddlePaddle显存分配器陷入死循环,一直在尝试分配GPU显存,但是一直没成功。

我也用strace查了一下,确实找到了这个输出,这里要感谢下巨佬,原因找到了!

3 解决方法

在python中导入PaddlePaddle之前设置环境变量:

import os
os.environ["FLAGS_allocator_strategy"] = "naive_best_fit"

或者直接设置环境变量

export FLAGS_allocator_strategy=naive_best_fit

这样PaddlePaddle会使用naive_best_fit显存分配器。这里FLAGS_allocator_strategy有两个选项:

  • auto_growth:默认方式,按需分配GPU显存,但可能产生显存碎片
  • naive_best_fit:预先分配GPU显存

通过上述方式设置

FLAGS_allocator_strategy=naive_best_fit

之后,在加载模型时会预先分配GPU显存,而不是按需申请显存,所以就不会进入到ioctl显存申请死循环。

参考链接

  1. https://github.com/PaddlePaddle/PaddleOCR/issues/17693
  2. https://github.com/PaddlePaddle/PaddleOCR/issues/17640
  3. https://docs.alauda.io/container_platform/4.0/hardware_accelerator/application_development/trouble_shooting/paddle_native_best.html

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:避坑指南 – 解决PaddleOCR-VL在GPU上随机概率出现模型推理假死问题

原文链接:https://www.stubbornhuang.com/3229/

发布于:2026年04月17日 16:45:45

修改于:2026年04月17日 16:45:45

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
独立开发出海收款新思路:如何利用 Payhip 实现自动化许可证售卖与海外收款
独立开发
下一篇
大模型推理为什么慢?从 Prefill、Decode 到 KV Cache,一文讲透推理加速全流程
AI
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号