39.1 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がサポートされています。

39.1.1 ONNX Runtimeでサポートされている機械学習機能

事前トレーニング済モデルをインポートしてスコアリングを実行するためにサポートされている機械学習機能について説明します。

サポートされている機械学習機能は次のとおりです。

  • 分類
  • クラスタリング
  • 埋込み
  • 回帰

39.1.2 サポートされている属性データ型

SQLデータ型にマップされている、サポートされているONNX入力データ型を示します。

データ型 SQL型 サポートされているONNXデータ型

量的

BINARY_DOUBLE

NUMBER

floatint8int16int32int64uint8uint16uint32uint64

質的

VARCHAR

VARCHAR型の場合: string

テキスト

VARCHAR2

CLOB

string
ベクトル

VECTOR(float32,<dimension>)

float

次のデータ型はサポートされていません。

  • complex64complex128

  • float16bfloat16

  • fp8

  • int4uint4

39.1.3 サポートされているターゲット・データ型

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ターゲット出力

回帰

PREDICTION

BINARY_DOUBLE regressionOutput

分類

PREDICTION

VARCHAR2

classificationLabelOutput

分類

PREDICTION

NUMBER

classificationLabelOutput

分類

PREDICTION_PROBABILITY

BINARY_DOUBLE

classificationProbOutput

分類

PREDICTION_SET

set of ( NUMBER , BINARY_DOUBLE )

set of (target_type, BINARY_DOUBLE)

該当なし

クラスタリング

CLUSTER_PROBABILITY

BINARY_DOUBLE

clusteringProbOutput

クラスタリング

CLUSTER_DISTANCE

BINARY_DOUBLE

clusteringDistanceOutput

クラスタリング

CLUSTER_SET

set of ( NUMBER , BINARY_DOUBLE ) 該当なし

埋込み

VECTOR_EMBEDDING

VECTOR( float32, n) embeddingOutput

39.1.4 カスタムONNX Runtime操作

前処理および後処理操作で拡張して、事前トレーニング済埋込みモデルをカスタマイズする場合、Oracleでは埋込みモデルのトークン化を前処理操作として、プーリングと正規化を後処理のバージョン1.15.1のカスタムONNX Runtime操作としてサポートしています。

Oracleには、トークン化、プーリングおよび正規化を使用して事前トレーニング済モデルを拡張するメカニズムを提供するPythonユーティリティが用意されています。Pythonユーティリティでは、前処理および後処理操作でモデルを拡張し、事前トレーニング済モデルをONNX形式に変換できます。その他のカスタム操作を使用するモデルは、インポート時に失敗します。Pythonユーティリティの使用方法の詳細は、「事前トレーニング済モデルからONNX形式への変換」を参照してください。

39.1.5 PL/SQLパッケージを使用したモデルのインポート

ONNX形式のモデルをインポートするには、DBMS_DATA_MINING.IMPORT_ONNX_MODELプロシージャまたはDBMS_VECTOR.LOAD_ONNX_MODELプロシージャを使用します。その後、データベース内のONNX Runtimeによって実行されるスコアリング関数を介して、インポートされたONNX形式のモデルを使用できます。

DBMS_DATA_MINING.RENAME_MODELプロシージャもサポートされています。

既存のOracle Machine Learning for SQL APIのほとんどは、ONNXモデルで使用できます。パーティション化は外部の事前トレーニング済モデルには適用されないため、ONNXモデルでは次の手順はサポートされません。

  • ADD_PARTITION
  • DROP_PARTITION
  • ADD_COST_MATRIX
  • REMOVE_COST_MATRIX

39.1.6 サポートされているSQLスコアリング関数

ONNX形式でインポートされた機械学習モデルのデータベース内スコアリングでサポートされるスコアリング関数は次のとおりです。

機械学習手法 演算子 サポート対象 戻り型
埋込み VECTOR_EMBEDDING 常時 VECTOR(<dimensions , FLOAT32>)

VECTOR_EMBEDDING演算子の出力ベクトルの次元数は、埋込みモデルによって定義されます。

回帰 PREDICTION 常時 ターゲットのデータ型。回帰の場合、データ型はBINARY_DOUBLE SQL型に変換されます。
分類 PREDICTION 常時 ターゲットのデータ型。
分類 PREDICTION_PROBABILITY 常時 BINARY_DOUBLE
分類 PREDICTION_SET 常時 ( t, NUMBER , BINARY_DOUBLE )のセット(tはターゲットのデータ型)
クラスタリング CLUSTER_ID

clusteringProbOutputが指定されている場合のみ

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概要を参照してください。