ONNXについて
ONNXは、機械学習モデル用に設計されたオープンソース形式です。プラットフォーム間の互換性が確保されます。この形式では、主要な言語およびフレームワークもサポートされ、効率的なモデル交換が容易になります。
ONNX形式では、モデルをシリアライズできます。これにより、様々なプラットフォーム間でのモデルの交換が簡略化されます。これらのプラットフォームには、Microsoft Windows、Linux、Mac、iOS、Androidでのクラウド、Web、エッジおよびモバイルのエクスペリエンスが含まれます。また、ONNXモデルには、Python、C++、C#、Javaなどの多くの言語でモデルをエクスポートおよびインポートする柔軟性もあります。ONNX形式は、機械学習モデルのトレーニングや、トレーニング済モデルを頻繁に使用するデータ処理など、計算負荷の高いタスクで役立ちます。TensorFlow、Pytorch、Scikit-learnなどの多くの主要な機械学習開発フレームワークでは、モデルをONNX形式に変換する機能が提供されています。
ONNX形式でモデルを表すと、ONNX Runtimeで実行できます。ONNX Runtimeのアーキテクチャは適応性があり、プロバイダは、GPU (グラフィック・プロセッシング・ユニット)、SIMD (Single Instruction Multiple Data)命令セット、専用ライブラリなどの特定のハードウェアをより適切に利用するために、一部の操作の実装方法を変更または拡張できます。ONNX Runtimeの詳細は、https://onnxruntime.ai/docs/を参照してください。
ONNX RuntimeとOracle Databaseの統合により、ONNX形式のモデル(埋込みモデルなど)をインポートできるようになります。埋込みモデルをサポートするために、Oracle Machine Learningでは埋込みと呼ばれる新しい機械学習手法が導入されました。ONNX形式の事前トレーニング済モデルがない場合、オラクルは変換を自動化するPythonユーティリティ・パッケージを提供しています。これは、事前トレーニング済モデルをダウンロードし、モデルを前処理および後処理操作で拡張してONNX形式に変換し、そのONNX形式モデルをOracle Databaseにインポートします。Pythonユーティリティ・ツールの詳細は、事前トレーニング済モデルからONNX形式への変換を参照してください。
Oracleでは、ONNX Runtimeバージョン1.15.1がサポートされています。
ONNX Runtimeでサポートされている機械学習機能
事前トレーニング済モデルをインポートしてスコアリングを実行するためにサポートされている機械学習機能について説明します。
サポートされている機械学習機能は次のとおりです。
- 分類
- クラスタリング
- 埋込み
- 回帰
サポートされている属性データ型
SQLデータ型にマップされている、サポートされているONNX入力データ型を示します。
| データ・タイプ | SQL型 | サポートされているONNXデータ型 | 
|---|---|---|
| 量的 | 
 
 | float、int8、int16、int32、int64、uint8、uint16、uint32、uint64 | 
| 質的 | 
 | 
 | 
| テキスト | 
 
 | string | 
| ベクトル | 
 | 
 | 
次のデータ型はサポートされていません。
- 
                           
                           complex64、complex128
- 
                           
                           float16、bfloat16
- 
                           
                           fp8
- 
                           
                           int4、uint4
サポートされているターゲット・データ型
SQLデータ型にマップされている、サポートされているONNXターゲット・データ型を示します。
機械学習機能に応じて、様々なスコアリング機能が使用されます。同じ機械学習機能に対して異なるスコアリング関数を使用すると、異なるデータ型を生成できます。次の点に注意してください。
- 
                           
                           分類モデルには、使用する PREDICTION関数の型を判断するための様々なルールがあります。PREDICTION_PROBABILITYを使用している場合は、BINARY_DOUBLEが返されます。ONNXモデルのJSONメタデータ・パラメータのlabelsを参照してください。
- 
                           
                           埋込みモデルの場合、 VECTOR_EMBEDDING関数ではVECTOR型が返されます。
- 
                           
                           回帰モデルの場合、 VARCHARは有効なターゲット型ではなく、BINARY_DOUBLEが返されます。
- 
                           
                           クラスタリング・モデルで CLUSTERING_PROBABILITYおよびCLUSTER_DISTANCEを使用している場合は、BINARY_DOUBLEが返されます。
詳細は、ONNXモデルのJSONメタデータ・パラメータを参照してください
| 機械学習機能 | SQL関数 | SQL型 | サポートされているONNXターゲット出力 | 
|---|---|---|---|
| 回帰 | 
 | BINARY_DOUBLE | regressionOutput | 
| 分類 | 
 | 
 | 
 | 
| 分類 | 
 | NUMBER | 
 | 
| 分類 | 
 | BINARY_DOUBLE | 
 | 
| 分類 | 
 | set of ( NUMBER , BINARY_DOUBLE )
 | 該当なし | 
| クラスタリング | 
 | BINARY_DOUBLE | 
 | 
| クラスタリング | 
 | BINARY_DOUBLE | 
 | 
| クラスタリング | 
 | set of ( NUMBER , BINARY_DOUBLE ) | 該当なし | 
| 埋込み | 
 | VECTOR( float32, n) | embeddingOutput | 
カスタムONNX Runtime操作
前処理および後処理操作で拡張して、事前トレーニング済埋込みモデルをカスタマイズする場合、Oracleでは埋込みモデルのトークン化を前処理操作として、プーリングと正規化を後処理のバージョン1.15.1のカスタムONNX Runtime操作としてサポートしています。
Oracleには、トークン化、プーリングおよび正規化を使用して事前トレーニング済モデルを拡張するメカニズムを提供するPythonユーティリティが用意されています。Pythonユーティリティでは、前処理および後処理操作でモデルを拡張し、事前トレーニング済モデルをONNX形式に変換できます。その他のカスタム操作を使用するモデルは、インポート時に失敗します。Pythonユーティリティの使用方法の詳細は、「事前トレーニング済モデルからONNX形式への変換」を参照してください。
PL/SQLパッケージを使用したモデルのインポート
ONNX形式のモデルをインポートするには、DBMS_DATA_MINING.IMPORT_ONNX_MODELプロシージャまたはDBMS_VECTOR.LOAD_ONNX_MODELプロシージャを使用します。その後、データベース内のONNX Runtimeによって実行されるスコアリング関数を介して、インポートされたONNX形式のモデルを使用できます。
                  
- 事前トレーニング済のONNX形式のモデルをインポートするには、IMPORT_ONNX_MODELプロシージャまたはLOAD_ONNX_MODELプロシージャを使用します。
- ONNXモデルを削除するには、DROP_ONNX_MODELを使用します。DROP_MODELプロシージャも参照してください。
- これらのプロシージャを説明するステップバイステップの完全な例は、「ONNXモデルのインポートおよび埋込みの生成」にあります。
ノート:
データベース内埋込みモデルには、トークン化と後処理を含める必要があります。トークン化を外部で処理し、テンソルをSQL演算子に渡し、出力テンソルをベクトルに変換する必要があるため、コアONNXモデルのみを提供するのでは不十分です。
DBMS_DATA_MINING.RENAME_MODELプロシージャもサポートされています。
                  既存のOracle Machine Learning for SQL APIのほとんどは、ONNXモデルで使用できます。パーティション化は外部の事前トレーニング済モデルには適用されないため、ONNXモデルでは次の手順はサポートされません。
- ADD_PARTITION
- DROP_PARTITION
- ADD_COST_MATRIX
- REMOVE_COST_MATRIX
関連トピック
サポートされているSQLスコアリング関数
ONNX形式でインポートされた機械学習モデルのデータベース内スコアリングでサポートされるスコアリング関数は次のとおりです。
| 機械学習手法 | 演算子 | サポート対象 | 戻り型 | 
|---|---|---|---|
| 埋込み | VECTOR_EMBEDDING | 常時 | VECTOR(<dimensions , FLOAT32>)
 | 
| 回帰 | PREDICTION | 常時 | ターゲットのデータ型。回帰の場合、データ型は BINARY_DOUBLESQL型に変換されます。 | 
| 分類 | PREDICTION | 常時 | ターゲットのデータ型。 | 
| 分類 | PREDICTION_PROBABILITY | 常時 | BINARY_DOUBLE  | 
| 分類 | PREDICTION_SET | 常時 | ( t, NUMBER , BINARY_DOUBLE )のセット(tはターゲットのデータ型) | 
| クラスタリング | CLUSTER_ID | 
 | NUMBER | 
| クラスタリング | CLUSTER_PROBABILITY | clusteringProbOutputが指定されている場合のみ | BINARY_DOUBLE  | 
| クラスタリング | CLUSTER_SET | clusteringProbOutputが指定されている場合のみ | ( NUMBER, BINARY_DOUBLE )のセット | 
| クラスタリング | CLUSTER_DISTANCE | clusteringDistanceOutputが指定されている場合のみ | BINARY_DOUBLE | 
ノート:
出力はメタデータで明示的に定義するか、暗黙的に定義することができます。
- 
                              
                              一部のSQLスコアリング関数では、モデル出力での結果の検索方法をメタデータで明示的に指定する必要があります。たとえば、 CLUSTER_PROBABILITYは、メタデータにclusteringProbOutputが指定されている場合にのみサポートされます。
- 
                              
                              メタデータに出力を指定しない場合、モデルの出力は1つのみと自動的に想定されます。 
- 
                              
                              スコアリング関数が指定された記述に準拠していない場合、データに対するスコアリング操作の実行時にORA-40290エラーが発生します。また、サポートされていないスコアリング関数の場合は、ORA-40290エラーが発生します。 
返される分類データ型の詳細は、ONNXモデルのJSONメタデータ・パラメータのlabelsおよびclassificationLabelOutputを参照してください。
                     
コスト・マトリックス句
コスト・マトリックスは、PREDICTIONおよびPREDICTION_SETスコアリング関数内で直接指定します。コスト・マトリックスの詳細は、『Oracle Machine Learning for SQL概要』を参照してください。