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形式の事前トレーニング済モデルがない場合、Oracleには、事前トレーニング済モデルをダウンロードし、そのモデルをONNX形式に変換して前処理および後処理操作で拡張し、ONNX形式モデルをOracle DatabaseにインポートするPythonユーティリティ・パッケージが用意されています。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モデルのインポートおよび埋込みの生成」にあります。
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_DOUBLE SQL型に変換されます。
|
分類 | 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概要』を参照してください。