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

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

问题现象

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

测试代码如下:

python 复制代码
from paddleocr import PaddleOCR

print("start")

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

print("ok")

运行结果:

bash 复制代码
start
[2026/06/09 15:52:35] ppocr DEBUG: Namespace(...)

随后程序退出:

text 复制代码
--------------------------------------
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 中:

text 复制代码
SIGILL

表示:

text 复制代码
CPU 执行到了当前处理器不支持的指令。

简单来说就是:

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

例如:

复制代码
AVX512
VNNI
AMX
MKLDNN 优化指令

都会导致这个问题。


二、首先确认 CPU 是否支持

执行:

bash 复制代码
lscpu

我的机器:

text 复制代码
型号名称:
13th Gen Intel(R) Core(TM) i5-13490F

CPU Flags:

text 复制代码
avx
avx2
avx_vnni
fma

说明:

text 复制代码
AVX 支持
AVX2 支持
VNNI 支持

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


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

Windows:

text 复制代码
PaddleOCR 正常运行

Linux:

text 复制代码
PaddleOCR 初始化即 SIGILL

原因在于:

PaddleOCR 实际依赖 Paddle Inference。

初始化过程:

复制代码
PaddleOCR
↓
PaddlePaddle
↓
Paddle Inference
↓
MKLDNN/IR优化
↓
CPU指令

崩溃发生在:

text 复制代码
SelfAttentionFusePass

即:

text 复制代码
IR 图优化阶段

还没真正开始 OCR。


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

测试英文:

python 复制代码
ocr = PaddleOCR(
    lang="en",
    use_gpu=False
)

结果:

text 复制代码
ok

正常。


测试中文:

python 复制代码
ocr = PaddleOCR(
    lang="ch",
    use_gpu=False
)

结果:

text 复制代码
SIGILL

崩溃。


进一步测试:

中文 PP-OCRv3:

python 复制代码
ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv3",
    use_gpu=False
)

结果:

text 复制代码
ok

正常。


中文 PP-OCRv4:

python 复制代码
ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv4",
    use_gpu=False
)

结果:

text 复制代码
SIGILL

崩溃。


最终定位:

text 复制代码
问题不是 PaddleOCR 本身。

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

五、过程中踩过的坑

1、NumPy 版本冲突

最开始报错:

text 复制代码
ImportError:
numpy.core.multiarray failed to import

原因:

text 复制代码
opencv 编译时基于 numpy 1.x

环境升级成 numpy 2.x

解决:

bash 复制代码
pip install numpy==1.26.4

2、OpenCV 冲突

安装:

bash 复制代码
pip install opencv-python==4.10

结果:

text 复制代码
paddleocr requires opencv-python<=4.6.0.66

解决:

bash 复制代码
pip uninstall opencv-python -y

pip install opencv-python==4.6.0.66

3、Paddle 未安装

报错:

text 复制代码
ModuleNotFoundError:
No module named 'paddle'

安装:

bash 复制代码
pip install paddlepaddle==2.6.2

4、show_log 参数失效

报错:

text 复制代码
ValueError:
Unknown argument: show_log

原因:

text 复制代码
PaddleOCR 新版本移除了该参数。

删除即可。


六、最终解决方案

方案一(推荐)

使用 PP-OCRv3 中文模型:

python 复制代码
ocr = PaddleOCR(
    lang="ch",
    ocr_version="PP-OCRv3",
    use_angle_cls=False,
    use_gpu=False
)

结果:

text 复制代码
ok

稳定运行。


方案二

关闭 MKLDNN:

python 复制代码
ocr = PaddleOCR(
    lang="ch",
    use_gpu=False,
    enable_mkldnn=False
)

部分机器有效。


方案三

降低 Paddle 版本。

例如:

text 复制代码
PaddleOCR 2.7.0.3

PaddlePaddle 2.6.2

匹配较稳定。


方案四

使用 ONNX 推理。

完全绕开 Paddle Inference。

适用于:

text 复制代码
跨平台部署
ARM部署
CPU部署

七、最终验证结果

环境:

text 复制代码
Ubuntu 24.04

Python 3.10

Intel i5-13490F

版本:

text 复制代码
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 ✅ 正常

八、总结

这次问题看起来像:

text 复制代码
PaddleOCR 崩溃

实际上是:

text 复制代码
PP-OCRv4 中文模型
+
Paddle Inference
+
Linux CPU优化

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

因此遇到:

text 复制代码
FatalError: Illegal instruction

不要第一时间怀疑:

text 复制代码
CPU坏了
系统坏了
模型下载错了

正确排查顺序应该是:

text 复制代码
① 测 CPU 指令集

↓

② 测 Paddle 是否正常

↓

③ 测英文模型

↓

④ 测中文 PP-OCRv3

↓

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

如果你的场景只是:

text 复制代码
字符识别
标签识别

那么:

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


参考环境

text 复制代码
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 下也遇到:

text 复制代码
SIGILL
Illegal instruction
SelfAttentionFusePass

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

相关推荐
iRayCheung3 小时前
virtualbox安装的ubuntu系统跑numpy报错
linux·ubuntu·numpy
snow@li3 小时前
DevOps:深入理解 DevOps(2026版)
运维·devops
Safeploy安策数据3 小时前
等保测评总卡壳?PCI加密卡如何破解政务云与金融合规难题
运维·网络·安全
Dlrb12113 小时前
Linux系统编程-信号量(线程同步机制)
linux·条件变量·互斥锁·信号量·线程同步
Mr -老鬼3 小时前
2026移动端自动化平台横向对比指南:15+主流平台深度评测,开发者选型必备
运维·自动化·easyclick·移动测试
无限进步_3 小时前
Linux进程等待——wait、waitpid与僵尸进程
linux·运维·服务器·开发语言
2401_834636993 小时前
Linux集群技术-高可用与负载均衡实战解析
linux·运维·负载均衡
吠品3 小时前
处理 Python 类继承中那些变来变去的初始化参数
linux·前端·python
会Tk矩阵群控的小木3 小时前
小红书矩阵软件:基于Python+ADB的多设备批量管理自动化脚本实战
运维·python·adb·矩阵·自动化·新媒体运营·个人开发
NetInside_3 小时前
某市级水利单位全流量监测与可视化交付实践
运维·网络