解决 PaddleOCR 运行中出现的 FatalError: Process abort signal 问题

【免费下载链接】PaddleOCR 飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) 【免费下载链接】PaddleOCR 项目地址: https://gitcode.com/paddlepaddle/PaddleOCR

在使用 PaddleOCR 进行光学字符识别任务时,部分用户可能会遇到一个较为棘手的错误:FatalError: Process abort signal is detected by the operating system。这个错误通常伴随着操作系统发送的 SIGABRT 信号,导致程序异常终止,退出码为 134。本文将深入分析该问题的成因,并提供有效的解决方案。

问题现象与背景

当用户尝试运行 PaddleOCR 的官方示例代码时,程序可能会突然崩溃,并在控制台输出以下错误信息:

C++ Traceback (most recent call last):
--------------------------------------
0   phi::OneDNNContextThreadLocals::Body::~Body()
1   phi::OneDNNContext::Impl::ResetBlobMap(void*)

----------------------
Error Message Summary:
----------------------
FatalError: `Process abort signal` is detected by the operating system.
  [TimeInfo: *** Aborted at 1748479789 (unix time) try "date -d @1748479789" if you are using GNU date ***]
  [SignalInfo: *** SIGABRT (@0x3e80019ced9) received by PID 1691353 (TID 0x7f1eb315e600) from PID 1691353 ***]

从错误堆栈可以看出,问题出现在 PaddlePaddle 底层库的 OneDNN 模块中,特别是在线程本地存储(Thread Local Storage, TLS)的清理过程中。OneDNN(前身为 Intel MKL-DNN)是 Intel 开发的高性能深度学习原语库,PaddlePaddle 使用它来加速计算。

根本原因分析

SIGABRT 信号通常表示程序检测到了严重错误而主动中止。在这种情况下,错误发生在 OneDNN 上下文管理相关的析构过程中。具体来说,是在 phi::OneDNNContextThreadLocals::Body 的析构函数和 phi::OneDNNContext::Impl::ResetBlobMap 方法中。

可能的原因包括:

  1. 内存管理问题:在多线程环境下,线程本地存储的清理顺序可能出现问题,导致访问了已经释放的内存。
  2. 资源竞争:在程序退出时,多个线程可能同时尝试清理 OneDNN 相关的资源,引发竞态条件。
  3. 版本兼容性问题:PaddlePaddle 与底层 OneDNN 库的特定版本组合可能存在已知的缺陷。

这个问题在 PaddleOCR 的 3.0.0 版本中被报告,并在 3.0.1 版本中得到修复。

解决方案

对于遇到此问题的用户,推荐采取以下解决方案:

升级 PaddleOCR 版本

最直接的解决方法是升级到 PaddleOCR 3.0.1 或更高版本。开发团队已经在这个版本中修复了相关的底层错误。

可以通过以下命令升级 PaddleOCR:

pip install --upgrade paddleocr

确保环境一致性

在升级后,如果问题仍然存在,建议检查整个深度学习环境的一致性:

  1. 验证 CUDA 和 cuDNN 版本:确保 CUDA 11.8 和对应的 cuDNN 版本正确安装且与 PaddlePaddle 版本兼容。
  2. 检查 PaddlePaddle 版本:PaddleOCR 依赖于 PaddlePaddle 框架,建议使用官方推荐的版本组合。

临时规避措施

如果由于某些原因无法立即升级,可以考虑以下临时措施:

  1. 简化代码结构:避免在复杂的多线程环境中使用 PaddleOCR,特别是在程序退出阶段。
  2. 显式释放资源:在程序结束前,尝试显式调用相关的清理函数(如果API提供)。

预防措施

为了避免类似问题的发生,建议用户在开发过程中:

  1. 保持版本更新:定期更新 PaddleOCR 和 PaddlePaddle 到最新稳定版本,以获取错误修复和安全更新。
  2. 遵循最佳实践:在使用多线程时,确保线程安全地管理和释放共享资源。
  3. 监控官方渠道:关注 PaddleOCR 的官方发布说明和问题跟踪系统,及时了解已知问题和解决方案。

总结

FatalError: Process abort signal 错误是 PaddleOCR 使用过程中一个较为底层的系统级错误,主要与 OneDNN 库的多线程资源管理有关。通过升级到 3.0.1 或更高版本,用户可以彻底解决这个问题。同时,保持良好的版本管理习惯和环境配置 practices,可以有效预防类似问题的发生。

对于深度学习框架的使用者来说,理解这类底层错误的含义和解决方法,不仅能够快速解决当前问题,还能提高对系统整体运行机制的认识,为后续的问题排查和技术选型提供 valuable 的经验。

【免费下载链接】PaddleOCR 飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) 【免费下载链接】PaddleOCR 项目地址: https://gitcode.com/paddlepaddle/PaddleOCR

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐