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