Skip to content

AI: Intel GPU と CUDA を常駐プロセスで共存させるプロバイダ別推論ルーティング #686

Description

@hmjn023

概要

solid-imager 側で、推論プロバイダごとに常駐 worker process を起動し、通常のインタラクティブ推論とバッチ推論を別の ONNX Runtime へルーティングできるようにする。

想定する利用形態:

  • 通常の画面操作・単発推論: 内蔵 Intel GPU / OpenVINO
  • バッチタグ付け・大量の CCIP 抽出: NVIDIA GPU / CUDA

背景

現在は server プロセス内で一つの RustAiClientdghs-imgutils-rs を共有している。

  • apps/server/src/infrastructure/ai/rust-ai-client.ts:54
  • apps/server/src/infrastructure/bootstrap.ts:85
  • packages/core/src/domain/interfaces/ai-client.ts:8
  • apps/server/src/infrastructure/jobs/tagging-jobs.ts:50
  • apps/server/src/infrastructure/jobs/job-worker.ts:50

ONNX Runtime の core library はプロセス内でグローバル状態を持つため、OpenVINO 用と CUDA 用の異なる libonnxruntime.so を同じ Bun プロセスへ読み込む構成は安全にサポートできない。

一方、Bun.spawn で別 OS process として起動すれば、worker ごとに異なる ORT_DYLIB_PATH / LD_LIBRARY_PATH を設定できる。統合 ONNX Runtime をビルドしなくても、アプリケーションレベルではプロバイダを切り替えられる。

この Issue の対象は solid-imager 側のプロセス管理・ルーティングであり、dghs-imgutils-rs の API 変更や統合 ONNX Runtime のビルドは対象外とする。

実装方針

  • プロバイダごとの常駐 worker manager / pool を追加する
  • worker は推論リクエストごとではなく、必要時に一度だけ Bun.spawn する
  • IPC で request id、操作種別、ファイルパス、device 情報を送受信する
  • 画像本体は IPC で毎回コピーせず、既存の path API と一時ファイルを利用する
  • タグ結果・CCIP embedding などの結果だけを IPC で返す
  • worker ごとに専用の Runtime path と環境変数を設定する
    • Intel/OpenVINO worker
    • CUDA worker
  • 通常の AI API と batch job が異なる worker を選択できるよう、現在の単一 IAiClient 共有構造に provider/profile routing を追加する
  • worker 単位でキューと concurrency を管理し、バッチ処理が画面操作を待たせないようにする
  • timeout、キャンセル、server shutdown、worker の異常終了を処理する
  • native crash で worker が終了した場合は、in-flight request を失敗させて worker を再起動可能にする
  • Runtime が見つからない場合は、選択した provider と探索済みパスを含む診断可能なエラーを返す

受け入れ条件

  • Intel GPU worker と CUDA worker を同時に起動できる
  • Intel GPU を使う単発推論中に CUDA の batch tagging を実行できる
  • batch tagging の provider を明示的に CUDA へ指定できる
  • 推論ごとに process を spawn せず、worker とモデルを再利用する
  • IPC で大きな画像バッファを常時複製しない
  • CUDA/OpenVINO worker の片方が native crash しても server 本体は終了しない
  • worker の再起動後、後続ジョブを処理できる
  • worker 未設定・Runtime 未導入時に既存の単一プロセス構成または明確なエラーへフォールバックできる
  • unit test で routing、queue、timeout、再起動を検証する
  • 実環境で Intel GPU の単発推論と NVIDIA GPU の batch tagging を確認する

非対象

  • OpenVINO と CUDA を含む統合 ONNX Runtime のビルド
  • 一つの process に複数の ONNX Runtime core をロードする実装
  • 推論一回ごとの process 起動
  • CUDA/OpenVINO の共有ライブラリそのものの配布パッケージ作成

備考

CUDA 用と OpenVINO 用の Runtime は、同一の /usr/lib/libonnxruntime.so を上書きしないよう、別 prefix またはアプリケーション管理ディレクトリへ配置されている必要がある。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions