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

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

相关推荐
上海云盾-小余1 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠1 小时前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件2 小时前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d
闲云野鹤在人间2 小时前
OpenStack架构介绍和安装流程
linux·网络·架构·openstack
我命由我123453 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
姚不倒3 小时前
Nginx 反向代理:5 种负载均衡策略与实战
运维·nginx·负载均衡
xx~t3 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
Uncertainty!!4 小时前
Linux 主机无法完成校园网认证排查记录:从 DHCP、ARP 到 Portal 认证流程分析
linux·运维·服务器
神威难绷泪4 小时前
Linux消息队列 & 共享内存 笔记
linux·消息队列·共享内存
其实防守也摸鱼4 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透