INMEMORY_ONNX_MODEL

このプロシージャにより、データベース内の外部イニシャライザがあるONNXモデルについて、イニシャライザのインメモリー共有を制御できます。インメモリー共有を有効にした場合は、データベースによってそのモデルのイニシャライザが共有メモリーに1回ロードされます、それにより、そのモデルを使用するセッションすべてに、総メモリー消費量の減少によるメリットがあります。このプロシージャをコールする前に、そのモデルをロードまたはインポートする必要があります。インポートされていないモデルに対してインメモリー共有を有効にしようとすると、エラーが発生します。

INMEMORY_ONNX_MODELを使用して共有できるのは外部データがあるモデルのみであることに注意してください。外部イニシャライザのないモデルは、インメモリー共有に対して有効にできません。有効にしようとするとエラーが発生します。

構文

DBMS_VECTOR.INMEMORY_ONNX_MODEL(
   model_name IN VARCHAR2,
   enable     IN BOOLEAN DEFAULT TRUE);

パラメータ

表12-7 INMEMORY_ONNX_MODELプロシージャのパラメータ

パラメータ 説明

model_name

[schema_name.]model_nameの形式のモデル名。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。モデルの名前に関する制限事項は、DBMS_DATA_MINING.IMPORT_ONNX_MODELプロシージャを参照してください。

enable

ONNXモデルに対してインメモリー共有を有効または無効にするかどうかを指定します。

使用可能なオプション:

  • TRUE: このパラメータをTRUE (デフォルト)に設定した場合は、データベースによって、モデルのイニシャライザが共有メモリーにロードされ共有されます。それにより、スコアリング中にすべてのプロセスでその同じコピーを使用できるようになります。

  • FALSE: それをFALSEに設定した場合は、すべてのプロセスでそのモデルの使用が終了した後に、データベースによってインメモリー共有が無効化されその共有メモリーが再利用されます。

次の例では、MINILML6という名前のインポートされたONNX埋込みモデルに対してインメモリー共有を有効にする方法を示します。有効にすると、このプロシージャのコール時にモデルのイニシャライザが共有メモリーにロードされ、それらを同時に複数のプロセスで、最小限のメモリー・オーバーヘッドで使用できるようになります。

BEGIN
  DBMS_VECTOR.INMEMORY_ONNX_MODEL(
    model_name => 'MINILML6');
END;
/

このコード・スニペットでは、インメモリー共有を使用するようにモデルMINILML6を設定しています。このプロシージャをコールした後に、そのモデルのインメモリー・ステータスを確認でき、ALL_MINING_MODELSディクショナリ・ビューを問い合せることでその使用状況を追跡できます。INMEMORYYESが返される場合は、そのモデルのイニシャライザが現在共有されており、スコアリング操作のために共有メモリーからアクセスできるようになっています。

使用上の注意

  • このモデルの名前は、その他の機械学習モデルで使用されているのと同じ制限事項に従います。たとえば、スキーマが指定されていない場合は、ご自分のスキーマが使用されます。
  • このプロシージャにより、外部イニシャライザありでインポートした指定したONNXモデル(ALL_MINING_MODELS.EXTERNAL_DATA = YES)のイニシャライザのインメモリー共有を管理します。外部イニシャライザのないモデルは、インメモリー共有に対して有効にできません。有効にしようとするとエラーが発生します。
  • ユーザーに、指定したモデルに対するALTER MINING MODEL権限が必要です。
  • enableTRUE (デフォルト)に設定されている場合は、このプロシージャにより、すぐにそのモデルのイニシャライザが共有メモリーに移入されます。このコールにより、共有メモリーへの完全な移入が成功するか失敗するまでブロックされます。コール後の遅延はありません。有効化に成功すると、そのモデルの共有イニシャライザのステータスがALL_MINING_MODELSビューにINMEMORY = YESとして表示されます。
  • enableFALSEに設定されている場合、そのモデルはインメモリー共有に対して無効になります。このコールにより、共有レジストリとインメモリー・バッファのクリーン・アップが完了するまでブロックされます。そのため、そのモデルは、制御がコール元に戻るときまで完全に無効になります。その共有イニシャライザに割り当てられているメモリーは、すべてのセッションでそのモデルの使用が終了した後に、再利用されます。ディクショナリ・ビューでそのモデルのステータスがINMEMORY = NOに変わります。
  • 非RAC環境では、モデルをインメモリーに移入するための十分なメモリーがない場合は、このプロシージャによってエラーが発生します。データベースによってそのリクエストがキューに入れられることはありません。メモリーを解放した後に、このプロシージャを再度コールする必要があります。
  • Oracle RAC環境では、インメモリー共有に対してモデルを有効にすると、このプロシージャをコールしたインスタンスに対してその操作がトリガーされます。データベースによってそのディクショナリ・ビューが更新され、すぐにそのモデルがメモリーに移入されます。クラスタ内の他のインスタンスでは、データベースによってそのディクショナリ・ビューが更新されますが、各インスタンスで、そのモデルを使用する最初の推論まで、移入が先延ばしにされます。メモリー使用率と移入ステータス(インスタンス固有のエラーの可能性など)は、インスタンスごとに個別に追跡されます。
    • 十分なメモリーがない場合は、その移入(したがって、推論)は失敗します。メモリー不足の問題を示すためにエラーが発生し、そのモデルがMEM_EXHAUSTED状態になります。メモリー使用率と移入ステータス(インスタンス固有のエラーの可能性など)は、インスタンスごとに個別に追跡されます。
  • インメモリー対応のモデルはエクスポートできます。
  • インポート時には、モデルは必ずINMEMORY = NOに設定されるため、明示的に再有効化する必要があります。
  • ディクショナリ・ビューと固定ビュー(ALL_MINING_MODELSV$IM_ONNX_MODELおよびV$IM_ONNX_SEGMENT)を使用して、ONNXモデルについて、インメモリー・ステータス、移入詳細およびメモリー消費を監査します。詳細は、Oracle AI DatabaseリファレンスALL_MINING_MODELSV$IM_ONNX_MODELおよびV$IM_ONNX_SEGMENTを参照してください。
  • 次のシナリオでは、インメモリーONNXモデルを無効にすること(ENABLEFALSEに設定する)を検討できます:
    • セッションの分離が必要な場合。たとえば、複数のセッションの間でメモリー内のモデルの重みを共有するとリスクが生じる可能性がある、マルチテナントまたはセキュリティセンシティブなデプロイメントの場合です。
    • テスト中やトラブルシューティング中など、セッションごとにそのモデルを確実に新規ロードする必要がある場合。
    • メモリーが非常に限られている環境で、必要以上に長く複数のセッションにわたり共有モデル・データを保持しないようにするため。
    • 実行中にモデルが頻繁にリロードまたは更新される場合。共有を無効にすると、各セッションで現在のバージョンが取得されキャッシュ管理の複雑さが軽減されます。

関連項目:

外部イニシャライザの詳細は、Oracle Machine Learning for SQLユーザーズ・ガイド