Linux 下 PaddleOCR 初始化崩溃:Illegal instruction (SIGILL) 问题排查与解决全过程

问题现象

最近在将 代码从 Windows 移植到 Ubuntu Linux 时,程序启动后初始化 PaddleOCR 直接崩溃。

测试代码如下:

from paddleocr import PaddleOCR

print("start")

ocr = PaddleOCR(
    use_angle_cls=False,
    lang="ch",
    use_gpu=False
)

print("ok")

运行结果:

start
[2026/06/09 15:52:35] ppocr DEBUG: Namespace(...)

随后程序退出:

--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
0   paddle_infer::Predictor::Predictor(...)
1   paddle::CreatePaddlePredictor(...)
2   paddle::AnalysisPredictor::Init(...)
3   paddle::AnalysisPredictor::PrepareProgram(...)
4   paddle::AnalysisPredictor::OptimizeInferenceProgram()
5   paddle::inference::analysis::Analyzer::RunAnalysis(...)
6   paddle::inference::analysis::IrAnalysisPass::RunImpl(...)
7   paddle::inference::analysis::IRPassManager::Apply(...)
8   paddle::framework::ir::Pass::Apply(...)
9   paddle::framework::ir::SelfAttentionFusePass::ApplyImpl(...)
10  paddle::framework::ir::GraphPatternDetector::operator()(...)

----------------------
Error Message Summary:
----------------------
FatalError: `Illegal instruction` is detected by the operating system.

Process finished with exit code 132 (interrupted by signal 4:SIGILL)

一、什么是 Illegal instruction?

Linux 中:

SIGILL

表示:

CPU 执行到了当前处理器不支持的指令。

简单来说就是:

软件编译时使用了某些 CPU 指令集,而运行机器无法执行这些指令。

例如:

AVX512
VNNI
AMX
MKLDNN 优化指令

都会导致这个问题。


二、首先确认 CPU 是否支持

执行:

lscpu

我的机器:

型号名称:
13th Gen Intel(R) Core(TM) i5-13490F

CPU Flags:

avx
avx2
avx_vnni
fma

说明:

AVX 支持
AVX2 支持
VNNI 支持

理论上 Paddle CPU 推理应该没问题。


三、为什么 Windows 正常,Linux 崩溃?

Windows:

PaddleOCR 正常运行

Linux:

PaddleOCR 初始化即 SIGILL

原因在于:

PaddleOCR 实际依赖 Paddle Inference。

初始化过程:

PaddleOCR
↓
PaddlePaddle
↓
Paddle Inference
↓
MKLDNN/IR优化
↓
CPU指令

崩溃发生在:

SelfAttentionFusePass

即:

IR 图优化阶段

还没真正开始 OCR。


四、为什么英文模型正常,中文模型崩溃?

测试英文:

ocr = PaddleOCR(
    lang="en",
    use_gpu=False
)

结果:

ok

正常。


测试中文:

ocr = PaddleOCR(
    lang="ch",
    use_gpu=False
)

结果:

SIGILL

崩溃。


进一步测试:

中文 PP-OCRv3:

ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv3",
    use_gpu=False
)

结果:

ok

正常。


中文 PP-OCRv4:

ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv4",
    use_gpu=False
)

结果:

SIGILL

崩溃。


最终定位:

问题不是 PaddleOCR 本身。

而是 PP-OCRv4 中文模型在当前 Paddle Inference 下触发了非法 CPU 指令。

五、过程中踩过的坑

1、NumPy 版本冲突

最开始报错:

ImportError:
numpy.core.multiarray failed to import

原因:

opencv 编译时基于 numpy 1.x

环境升级成 numpy 2.x

解决:

pip install numpy==1.26.4

2、OpenCV 冲突

安装:

pip install opencv-python==4.10

结果:

paddleocr requires opencv-python<=4.6.0.66

解决:

pip uninstall opencv-python -y

pip install opencv-python==4.6.0.66

3、Paddle 未安装

报错:

ModuleNotFoundError:
No module named 'paddle'

安装:

pip install paddlepaddle==2.6.2

4、show_log 参数失效

报错:

ValueError:
Unknown argument: show_log

原因:

PaddleOCR 新版本移除了该参数。

删除即可。


六、最终解决方案

方案一(推荐)

使用 PP-OCRv3 中文模型:

ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv3",
    use_angle_cls=False,
    use_gpu=False
)

结果:

ok

稳定运行。


方案二

关闭 MKLDNN:

ocr = PaddleOCR(
    lang="ch",
    use_gpu=False,
    enable_mkldnn=False
)

部分机器有效。


方案三

降低 Paddle 版本。

例如:

PaddleOCR 2.7.0.3

PaddlePaddle 2.6.2

匹配较稳定。


方案四

使用 ONNX 推理。

完全绕开 Paddle Inference。

适用于:

跨平台部署
ARM部署
CPU部署

七、最终验证结果

环境:

Ubuntu 24.04

Python 3.10

Intel i5-13490F

版本:

numpy          1.26.4
opencv-python  4.6.0.66
paddleocr      2.7.0.3
paddlepaddle   2.6.2

测试结果:

模型 结果
英文 PP-OCRv4 ✅ 正常
中文 PP-OCRv4 ❌ SIGILL
中文 PP-OCRv3 ✅ 正常

八、总结

这次问题看起来像:

PaddleOCR 崩溃

实际上是:

PP-OCRv4 中文模型
+
Paddle Inference
+
Linux CPU优化

三者组合触发的非法指令问题。

因此遇到:

FatalError: Illegal instruction

不要第一时间怀疑:

CPU坏了
系统坏了
模型下载错了

正确排查顺序应该是:

① 测 CPU 指令集

↓

② 测 Paddle 是否正常

↓

③ 测英文模型

↓

④ 测中文 PP-OCRv3

↓

⑤ 确认是否 PP-OCRv4 特有问题

如果你的场景只是:

字符识别
标签识别

那么:

PP-OCRv3 完全够用,而且稳定性比 PP-OCRv4 更高。


参考环境

Ubuntu 24.04
Python 3.10
PaddleOCR 2.7.0.3
PaddlePaddle 2.6.2
NumPy 1.26.4
OpenCV 4.6.0.66
Intel i5-13490F

如果你在 Linux 下也遇到:

SIGILL
Illegal instruction
SelfAttentionFusePass

大概率就是本文遇到的同类问题。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐