[Regression] 2026.3.1-gpu hangs with 200% CPU in sched_yield / libopencl-clang on dynamic shape embeddings (working fine in 2026.3-gpu)
メンテナーはふだん 2 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- バグ
- 明瞭さ
- 説明が足りない
- 活発さ
- 活発
- 技術スタック
- cpp, docker, linux
調査の方向性
まず、提供された Docker コマンド、動的 shape の embedding リクエスト、複数の --rest_workers、および 2026.3.1-gpu イメージを使ってハングを再現し、2026.3-gpu と比較します。提供された GDB バックトレースを使って、libigdrcl.so、libopencl-clang2.so.16、および libopenvino_intel_gpu_plugin.so を調査します。並行リクエストが deadlock、sched_yield の持続的な spinning、または応答しないサーバーを発生させずに完了すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
In openvino/model_server:2026.3.1-gpu, serving embedding models on Intel iGPU with multiple workers (--rest_workers > 1, e.g. 4 or 16) causes OVMS to hang indefinitely when handling variable-length texts (or concurrent dynamic shape requests).
The container CPU stays pegged at ~200% indefinitely (two threads busy-spinning at 100% each in sched_yield) and stops responding to HTTP requests.
Attaching GDB to the hanging process reveals a spinlock deadlock between libigdrcl.so (Intel OpenCL runtime) and libopencl-clang2.so.16:
- Thread 8 (LWP 96) is stuck inside
libopencl-clang2.so.16(Compile()). - Worker threads (e.g. Thread 22 LWP 82) are stuck in a busy spinloop in
sched_yield()insidelibigdrcl.so.
To Reproduce
Steps to reproduce the behavior:
- Model:
OpenVINO/Qwen3-Embedding-0.6B-int8-ov(or any dynamic shape embedding model). - Launch OVMS on Intel GPU with multiple workers:
docker run --device /dev/dri/renderD128:/dev/dri/renderD128 \ -p 9200:9200 \ openvino/model_server:2026.3.1-gpu \ --model_repository_path /models \ --source_model OpenVINO/Qwen3-Embedding-0.6B-int8-ov \ --task embeddings \ --pooling LAST \ --target_device GPU \ --rest_workers 4 \ --rest_port 9200 \ --model_name qwen3-embedding-0.6b - Send variable-length text requests in quick succession or concurrently:
curl -X POST http://localhost:9200/v3/embeddings \ -H "Content-Type: application/json" \ -d '{"model": "qwen3-embedding-0.6b", "input": "testing variable length dynamic shape sentence"}' - OVMS hangs, container CPU pins at 200%, and requests never return.
Expected behavior
The server should properly synchronize dynamic shape OpenCL compilation without deadlocking or busy-spinning in sched_yield.
GDB Backtrace
GDB backtrace of the spinning process in 2026.3.1-gpu:
Thread 8 (LWP 96 - Compilation):
#0 0x00007fc... in ... from /usr/local/lib/libopencl-clang2.so.16
#1 0x00007fc... in Compile () from /usr/local/lib/libopencl-clang2.so.16
#2 0x00007fc... in ... from /usr/lib/x86_64-linux-gnu/intel-opencl/libigdrcl.so
Thread 22 (LWP 82 - Worker spinning in sched_yield):
#0 0x00007fc... in sched_yield () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fc... in ... from /usr/lib/x86_64-linux-gnu/intel-opencl/libigdrcl.so
#2 0x00007fc... in ... from /ovms/lib/libopenvino_intel_gpu_plugin.so
Environment & Hardware Configuration
- Host CPU: 12th Gen Intel Core i5-1235U (10 cores, 12 threads)
- GPU: Intel Iris Xe Graphics (Alder Lake-UP3 GT2, 80 EU, PCI ID
[8086:46a8]) - RAM: 64 GB
- Host OS: Linux 6.6.x (Debian 12)
- Model:
OpenVINO/Qwen3-Embedding-0.6B-int8-ov - Docker Image:
openvino/model_server:2026.3.1-gpu(Broken) vsopenvino/model_server:2026.3-gpu(Working)
Root Cause Analysis & Verified Workarounds
The root trigger is that when multiple worker threads (--rest_workers > 1) handle concurrent embedding requests with variable-length text, multiple threads simultaneously call into the Intel OpenCL driver (libigdrcl.so) and trigger JIT compilation in libopencl-clang2.so.16, resulting in a spinlock deadlock (sched_yield). Furthermore, in 2026.3.1-gpu, once dynamic compilation is triggered, background compiler threads can remain permanently spinning at 200% CPU even after HTTP calls complete.
Workarounds:
- Reverting to
openvino/model_server:2026.3-gpuwith--rest_workers 1and--truncate true: requests execute smoothly at ~40ms latency and CPU drops back to 0.07% immediately upon completion. - Under
2026.3.1-gpu, setting--rest_workers 1and--truncate trueserializes requests at the HTTP layer, butlibopencl-clangthreads may still leak CPU loops after JIT compilation.
- 主要言語
- C++
- スター
- 952
- フォーク
- 285
- 平均マージ
- 3日 2時間
- マージ済み PR(30日)
- 44
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
openvinotoolkit/model_server のほかの issue
-
KServe REST parser drops requested outputs except the last対応中かも @YugShah1510 が 5 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 35/100
openvinotoolkit/model_server#4690 ·
メンテナーはふだん 2 日以内に返信
-
KServe REST rejects INT64 and UINT64 values outside 32-bit range対応中かも @YugShah1510 が 5 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 25/100
openvinotoolkit/model_server#4688 ·
メンテナーはふだん 2 日以内に返信
-
Preserve double precision when parsing FP64 REST inputs対応中かも @YugShah1510 が 5 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 35/100
openvinotoolkit/model_server#4686 ·
メンテナーはふだん 2 日以内に返信
-
Rerank with an empty documents array or object documents fails with an internal tokenizer error対応中かも @Daksha1611 が 8 日前に担当しました。 オープン
難易度 4/5 1〜2日 初心者へのやさしさ 24/100
openvinotoolkit/model_server#4671 ·
メンテナーはふだん 2 日以内に返信
-
Downloading an image from a URL has no timeout対応中かも @Daksha1611 が 9 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 35/100
openvinotoolkit/model_server#4669 ·
メンテナーはふだん 2 日以内に返信
openvinotoolkit/model_server の issue をすべて見る
似ている issue
-
Status: Needs confirmation Status: Needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
boykopovar/AnyPS5#12124 ·
メンテナーはふだん 1 日以内に返信
-
bug-unconfirmed
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
A-combat P-low S-ready-to-start task
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
メンテナーはふだん 1 日以内に返信