11 事前トレーニング済モデルからONNX形式への変換

OML4Pyでは、Hugging Faceからのテキスト・トランスフォーマを、ONNX形式のモデルに変換することで使用できるようになります。OML4Pyにより、必要なトークン化および後処理も追加されます。結果となるONNXパイプラインは、その後、データベースにインポートされます。また、AIベクトル検索用の埋込みの生成に使用できます。

ノート:

この機能は、OML4Pyクライアントでのみ動作します。OML4Pyサーバーではサポートされていません。

データの埋込みを生成するONNX形式の事前トレーニング済モデルがない場合は、Oracleが提供しているPythonユーティリティ・パッケージで、外部ソースから事前トレーニング済モデルをダウンロードし、そのモデルを前処理ステップおよび後処理ステップで拡張されたONNX形式に変換し、それをOracle Databaseにファイルとしてインポートできます。DBMS_VECTOR.LOAD_ONNX_MODELプロシージャまたはOML4Pyのexport2db()関数を使用して、ファイルをマイニング・モデルとしてインポートします。次に、データベース内ONNX RuntimeをONNXモデルとともに利用して、ベクトル埋込みを生成します。

Pythonユーティリティ・パッケージでは、大まかに次のタスクを実行します。
  • 事前トレーニング済モデルを外部ソースからシステムにダウンロードします
  • 前処理および後処理ステップを使用してモデルを拡張し、新しいONNXモデルを作成します
  • 拡張したONNXモデルを検証します
  • マイニング・モデルとしてデータベースにロードするか、オプションで、ファイルにエクスポートします

Pythonユーティリティは、事前構成済リストの任意のモデルを入力として受け取ることができます。または、特定のモデル・グループ(テキストベース・モデルなど)の共通構成を含む組込みテンプレートを使用することもできます。事前構成済リストとは何か、組込みテンプレートとは何か、それらをどのように使用するかを理解するには、以降の説明をお読みください。

制限事項

この表では、Pythonユーティリティ・パッケージの制限事項について説明します。

ノート:

この機能は、OML4Pyクライアントでのみ使用できます。
パラメータ 説明
トランスフォーマ・モデル・タイプ 現在、テキスト・トランスフォーマでのみサポートされています。
モデル・サイズ モデル・サイズは1GB未満にする必要があります。量子化はサイズを小さくするのに役立ちます。
トークン化機能 BERTGPT2SENTENCEPIECEまたはROBERTAのどれかである必要があります。

モデルの事前構成済リスト

モデルの事前構成済リストは、Pythonユーティリティで提供される外部リソース・リポジトリの共通モデルです。事前構成済モデルには既存の仕様があります。ユーザーは、開始点としてテキスト・テンプレートを使用して独自の仕様を作成できます。事前構成済リストのすべてのモデル名のリストを取得するには、show_preconfigured関数を使用します。

テンプレート

Pythonユーティリティ・パッケージには、前処理操作と後処理操作を使用して事前トレーニング済モデルを構成するための組込みテキスト・テンプレートが用意されています。このテンプレートには、事前トレーニング済モデルのデフォルト仕様が含まれています。この仕様を変更または拡張してカスタム構成を作成できます。テキスト・テンプレートでは、デフォルトで後処理操作として平均プーリングと正規化が使用されます。

Pythonユーティリティ・パッケージには、次のクラスが用意されています。
  • EmbeddingModelConfig

  • EmbeddingModel

Pythonクラスとそのプロパティについて確認し、プロパティを構成するには、「事前トレーニング済モデルをONNXモデルに変換するPythonクラス」を参照してください。

Pythonユーティリティを使用するには、次のものがあることを確認します:
  • オンプレミス・データベース用にLinux X64で実行されているOML4Pyクライアント

  • Python 3.12 (以前のバージョンは互換性がありません)

.
  1. 作業ディレクトリでPythonを起動します。
    python3
    Python 3.12.2 | (main, Feb 27 2024, 17:35:02) [GCC 11.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
  2. OML4Pyクライアントで、Pythonクラスをロードします:
    from oml.utils import EmbeddingModel, EmbeddingModelConfig
  3. 次のことを実行して、事前構成済モデルすべてのリストを取得できます:
    EmbeddingModelConfig.show_preconfigured()
  4. 使用可能テンプレートのリストを取得するには:
    EmbeddingModelConfig.show_templates()
  5. 次のうちから選択します:
    • 事前構成済モデル"sentence-transformers/all-MiniLM-L6-v2"からONNXファイルを生成します:

      
      #generate from preconfigureded model "sentence-transformers/all-MiniLM-L6-v2"
      em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")
      em.export2file("your_preconfig_file_name",output_dir=".")
    • データベース内の事前構成済モデル"sentence-transformers/all-MiniLM-L6-v2"からONNXモデルを生成します:

      
      #generate from preconfigureded model "sentence-transformers/all-MiniLM-L6-v2"
      em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")
      em.export2db("your_preconfig_model_name")
    • 提供されているテキスト・テンプレートを使用してONNXファイルを生成します:

      #generate using the "text" template
      config = EmbeddingModelConfig.from_template("text",max_seq_length=512)
      em = EmbeddingModel(model_name="intfloat/e5-small-v2",config=config)
      em.export2file("your_template_file_name",output_dir=".")

    このコードについて説明します。

    from oml.utils import EmbeddingModel, EmbeddingModelConfig

    この行により、EmbeddingModelEmbeddingModelConfigという2つのクラスがインポートされます。

    事前構成済モデルの最初の例では:
    • em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")は、EmbeddingModelクラスのインスタンスを作成し、model_nameパラメータで指定された事前トレーニング済モデルをロードしています。emは埋込みモデル・オブジェクトです。sentence-transformers/all-MiniLM-L6-v2は、文の埋込みを計算するためのモデル名です。これはHugging Faceのモデル名です。Oracleでは、Hugging Faceのモデルをサポートしています。

    • export2fileコマンドでは、ユーザー指定のモデル名が付いたONNX形式のモデルがデータベースに作成されます。your_preconfig_file_nameは、ユーザー定義のONNXモデル・ファイル名です。

    • output_dir="."は、ファイルが保存される出力ディレクトリを指定しています。"."は、現在のディレクトリ(スクリプトが実行されているディレクトリ)を示します。

    事前構成済モデルの2番目の例では:
    • em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")は、EmbeddingModelクラスのインスタンスを作成し、model_nameパラメータで指定された事前トレーニング済モデルをロードしています。emは埋込みモデル・オブジェクトです。sentence-transformers/all-MiniLM-L6-v2は、文の埋込みを計算するためのモデル名です。これはHugging Faceのモデル名です。Oracleでは、Hugging Faceのモデルをサポートしています。

    • export2dbコマンドでは、ユーザー定義のモデル名が付いたONNX形式のモデルがデータベースに作成されます。your_preconfig_model_nameは、ユーザー定義のONNXモデル名です。
    テンプレートの例で:
    • config = EmbeddingModelConfig.from_template("text", max_seq_length=512): この行では、from_templateというメソッドを使用して埋込みモデルの構成オブジェクトを作成しています。"text"引数により、テンプレートの名前を示しています。max_seq_length=512パラメータにより、トークン数としてモデルへの入力の最大長を指定しています。デフォルト値はありません。この値は事前構成されていないモデルに対して指定します。

    • em = EmbeddingModel(model_name="intfloat/e5-small-v2", config=config)は、特定のモデルおよび以前に定義した構成を使用してEmbeddingModelインスタンスを初期化しています。model_name="intfloat/e5-small-v2"引数は、ロードする事前トレーニング済モデルの名前または識別子を指定しています。

    • export2fileコマンドでは、ユーザー定義のモデル名が付いたONNX形式のモデルがデータベースに作成されます。your_template_file_nameは、ユーザー定義のONNXモデル名です。

    • output_dir="."は、ファイルが保存される出力ディレクトリを指定しています。"."は、現在のディレクトリ(スクリプトが実行されているディレクトリ)を示します。

    ノート:

    • モデルのサイズは1GBに制限されます。400MBより大きいモデルの場合、Oracleでは量子化することをお薦めします。

      量子化により、モデルの重みを高精度表現から低精度形式に変換することでモデル・サイズが小さくなります。量子化オプションにより、重みがINT8に変換されます。モデルのサイズを小さくすると、共有メモリーにモデルをキャッシュできるため、パフォーマンスがさらに向上します。

    • .onnxファイルは、opsetバージョン17およびirバージョン8で作成されます。これらのバージョン番号の詳細は、https://onnxruntime.ai/docs/reference/compatibility.html#onnx-opset-supportを参照してください。

  6. Pythonを終了します。
    exit()
  7. 変換されたモデルがディレクトリに存在するかどうかを確認します。

    ノート:

    ONNXファイルは、export2fileが使用されているときのみ作成されます。export2dbを使用すると、ローカルのONNXファイルは生成されず、モデルはデータベースに保存されます。

    拡張子がonnxの、現行ディレクトリ内のすべてのファイルをリストします。

    ls -ltr *.onnx

    Pythonユーティリティ・パッケージでは、ONNX Runtimeを使用して実行する前に、埋込みテキスト・モデルが検証されます。Oracleでは、stringの入力およびfloat32 [<vector dimension>]の出力に準拠するONNX埋込みモデルがサポートされています。

    モデルの入力または出力がこの説明に準拠していない場合は、インポート中にエラーが表示されます。

  8. そのモデルがデータベースにあることを確認します。
    オペレーティング・システムのプロンプトで、SQL*Plusを起動し、それに接続します:
    sqlplus OML_USER/password@pdbname_medium;
    
    SQL*Plus: Release 23.0.0.0.0 - Production on Wed May 1 15:33:29 2024
    Version 23.4.0.24.05
    
    Copyright (c) 1982, 2024, Oracle. All rights reserved.
    
    Last Successful login time: Wed May 01 2024 15:27:06 -07:00
    
    Connected to:
    Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
    Version 23.4.0.24.05
    データベース内にあるすべてのONNXモデルをリストするには:
    SQL> select MODEL_NAME, ALGORITHM from user_mining_models WHERE MODEL_NAME='YOUR_PRECONFIG_MODEL_NAME';
    MODEL_NAME ALGORITHM
    -------------------------------------
    YOUR_PRECONFIG_MODEL_NAME ONNX
DBMS_VECTOR.LOAD_ONNX_MODELは、モデルをデータベースに保存するためにexport2dbを使用するのではなくONNXモデル・ファイルをローカル・システムに保存するためにexport2fileを使用した場合のみ必要です。DBMS_VECTOR.LOAD_ONNX_MODELでは、ONNX形式のモデルがOracle Databaseにインポートされて、データベース内ONNX Runtimeが利用され、VECTOR_EMBEDDING SQL演算子によってベクトル埋込みが生成されます。

関連項目: