-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Description
问题描述 Issue Description
🐛 PaddleOCR 3.3.0 + PaddlePaddle 3.0.0 fails in Docker environments (ARM64 & x86_64)
👋 Issue Summary
I'm experiencing critical compatibility issues when running PaddleOCR 3.3.0 with PaddlePaddle 3.0.0 in Docker containerized environments. The issues occur on both ARM64 (Apple Silicon) and x86_64 (AWS Lambda) architectures.
🔴 Problem Details
ARM64 Environment (Apple Silicon M-series)
Symptom: Segmentation Fault during model initialization
FatalError: `Segmentation fault` is detected by the operating system.
[SignalInfo: *** SIGSEGV (@0x0) received by PID 1 (TID 0xffff612341a0) from PID 0 ***]
Steps to Reproduce:
- Build Docker image with PaddlePaddle 3.0.0 + PaddleOCR 3.3.0
- Run basic initialization:
from paddleocr import PaddleOCRocr = PaddleOCR(lang="en") # ❌ Segfault here
x86_64 Environment (AWS Lambda Base Image)
Symptom: Library loading failure
❌ Error: name 'libpaddle' is not defined
Steps to Reproduce:
- Use
public.ecr.aws/lambda/python:3.11base image - Install system dependencies (mesa-libGL, libXext, etc.)
- Install PaddlePaddle 3.0.0 + PaddleOCR 3.3.0
- Import succeeds, but initialization fails with
libpaddleerror
🔧 Environment Details
| Item | Value |
|---|---|
| PaddleOCR Version | 3.3.0 |
| PaddlePaddle Version | 3.0.0 |
| Python Version | 3.11 |
| Base Images | python:3.11-slim (ARM64), public.ecr.aws/lambda/python:3.11 (x86_64) |
🧪 Attempted Solutions
✅ Tried (No Effect)
-
Environment Variables:
FLAGS_use_mkldnn=0 FLAGS_use_xdnn=0 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 -
NumPy Version Pinning:
pip install 'numpy<2.0.0' -
PaddlePaddle Version Downgrade:
3.0.0b2(beta) → Same segfault2.6.1→ API compatibility issues (set_optimization_levelmissing)
-
Lightweight Models:
- Switched to PP-OCRv4_mobile → Failed due to API parameter changes
📋 Reproducible Dockerfiles
ARM64 (Apple Silicon)
FROM python:3.11-slimENV FLAGS_use_mkldnn=0
FLAGS_use_xdnn=0
OMP_NUM_THREADS=1
OPENBLAS_NUM_THREADS=1
MKL_NUM_THREADS=1RUN apt-get update && apt-get install -y
libgl1 libglib2.0-0 libsm6 libxext6
libxrender-dev libgomp1
&& rm -rf /var/lib/apt/lists/*RUN pip install --no-cache-dir
paddlepaddle==3.0.0
paddleocr==3.3.0
'numpy<2.0.0'
opencv-python-headless
Pillow
WORKDIR /app
COPY test_paddleocr.py .
CMD ["python", "test_paddleocr.py"]
Build & Run:
docker build -t paddleocr-test .
docker run --rm paddleocr-test
x86_64 (AWS Lambda)
FROM public.ecr.aws/lambda/python:3.11RUN yum update -y &&
yum install -y mesa-libGL libXext libSM libXrender libgomp &&
yum clean allENV FLAGS_use_mkldnn=0
FLAGS_use_xdnn=0
OMP_NUM_THREADS=1RUN pip install --no-cache-dir
paddlepaddle==3.0.0
paddleocr==3.3.0
'numpy<2.0.0'
opencv-python-headless
Pillow
WORKDIR /var/task
COPY test_paddleocr.py .
CMD ["python", "test_paddleocr.py"]
Build & Run:
docker buildx build --platform linux/amd64 -t paddle-lambda:test .
docker run --rm --platform linux/amd64 paddle-lambda:test
🧪 Test Script
from paddleocr import PaddleOCR import numpy as np import osEnvironment optimization
os.environ["FLAGS_use_mkldnn"] = "0"
os.environ["FLAGS_use_xdnn"] = "0"
os.environ["GOTOBLAS_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"print("✅ PaddleOCR import OK")
try:
print("Initializing PaddleOCR...")
ocr = PaddleOCR(lang="en") # ❌ Fails here
print("✅ PaddleOCR init OK")# Test prediction img = np.ones((128, 512, 3), dtype=np.uint8) * 255 res = ocr.predict(img) print("✅ Prediction OK")
except Exception as e:
print(f"❌ Error: {e}")
import traceback
traceback.print_exc()
🎯 Expected Behavior
PaddleOCR should initialize successfully in Docker containers on both ARM64 and x86_64 architectures without segmentation faults or library loading errors.
版本&环境信息 Version & Environment Information
🔧 Environment Details
| Item | Value |
|---|---|
| PaddleOCR Version | 3.3.0 |
| PaddlePaddle Version | 3.0.0 |
| Python Version | 3.11 |
| Base Images | python:3.11-slim (ARM64), public.ecr.aws/lambda/python:3.11 (x86_64) |