我也有同样的问题,排查了一下可能是如下原因:
相册智能识别 GPU 加速模式下 img2vec 进程崩溃 (err: rpc call failed, code=20150)
设备环境
- 硬件: N5105 (Jasper Lake, Intel UHD Graphics)
- 系统版本: fnOS (当前最新)
- 内存: 8GB
- 相册版本: trim.photos v0.9.7
- OpenVINO 版本: 2024.5.0
- Intel GPU 驱动: intel-opencl-icd 24.31.30508.7, intel-level-zero-gpu 1.3.30508.7, intel-igc-opencl 1.0.17384.11
问题现象
开启相册 AI 设置的 GPU 加速后,智能识别(img2vec)处理若干张照片后报错:
rec error, rec image path: .../thumb/m/xx/xxx, original file: .../xxx.jpg, err: rpc call failed, code=20150
排查过程与证据
1. GPU 本身工作正常,非显存不足问题
通过 i915 debugfs 确认:
- GEM objects: 974 个,约 974MB(两个模型同时在 GPU 上)
- GT awake: yes
- Reset count: 0(无 GPU hang)
clinfo 报告 Intel UHD Graphics 可用,OpenCL 3.0 正常
974 shrinkable [0 free] objects, 974196736 bytes
system: total:0x00000001e692b000 bytes
stolen-system: total:0x0000000003c00000 bytes
Reset count: 0
GT awake: yes
2. 手动用 Python + OpenVINO 直接调用同一模型,GPU 推理 100% 稳定
用系统自带的 OpenVINO 2024.5 Python 包直接加载 /vol1/@sysappmeta/ai-manager/models/img2vec-large-model-1.0.0/img2vec.onnx,在 GPU 上连续推理 30 批次(img2vec + face_det + face_rec 三个模型并发),全部通过,无报错,GEM 对象稳定在 894MB。
说明 OpenVINO GPU plugin 和硬件本身没有问题。
3. strace 跟踪确认:img2vec 进程内部 SIGSEGV 后自杀
安装 strace 后,用 strace -ff -p <ai_manager_pid> -e trace=kill,tgkill,write 跟踪 ai_manager 及其所有子进程。崩溃时的关键 strace 输出:
img2vec 的一个线程触发 SIGSEGV(空指针),被内部 signal handler 捕获:
--- /tmp/amstr.263819 ---
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=NULL} ---
write(1, "Architecture: "..., 3638) = 3638
+++ exited with 0 +++
img2vec 主线程检测到异常,杀掉自己的子进程:
--- /tmp/amstr.263530 ---
kill(263531, SIGTERM) = 0
+++ killed by SIGTERM +++
ai_manager 收到子进程死亡的 SIGCHLD,然后 SIGTERM 杀掉整个 img2vec:
--- /tmp/amstr.263526 ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=263531, si_status=SIGTERM} ---
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1670, si_uid=0} ---
+++ killed by SIGTERM +++
ai_manager 的线程持续对 img2vec 做 kill(pid, 0) 健康检查,确认进程存活后正常工作,说明不是 ai_manager 主动决定杀 img2vec,而是 img2vec 先自杀子进程触发了级联。
4. img2vec 确认使用 OpenVINO GPU 模式
/usr/trim/logs/ai_manager/com.trim.img2vec/stdout.log:
[2026-07-09 20:58:09] img2vec INFO: model_format:OPENVINO
[2026-07-09 20:58:09] img2vec INFO: openvino_model:.../img2vec.xml
[2026-07-09 20:58:09] img2vec INFO: device:GPU
[2026-07-09 20:58:13] img2vec INFO: HTTP RPC socket ready at unix:///run/com.trim.img2vec_internal.sock
进程崩溃时 stdout.log 无任何 traceback 输出(SIGSEGV 被内部 handler 吞掉了)。
结论
这是 img2vec 服务封装层的 bug,不是 OpenVINO 本身或硬件问题。具体表现为 OpenVINO GPU 推理在处理某些特定图片时触发了 null pointer dereference (SIGSEGV, si_addr=NULL),被进程内部 signal handler 捕获后没有输出任何错误信息,而是直接杀掉子进程导致级联退出。