ONNXモデルへの事前トレーニング済モデルの変換: テキスト埋込みのエンドツーエンドの手順

この項では、OML4Pyクライアントのインストールから、Oracleが提供するPythonユーティリティ・パッケージを使用したONNX形式での事前トレーニング済埋込みモデルのダウンロードまでのエンドツーエンドの手順について説明します。

ノート:

この例では、事前トレーニング済テキスト・モデルをONNXモデルに変換するためのエンドツーエンドの手順を示します。ステップ1から9は、イメージ・モデルマルチモーダルで同一です。対応するトピックに記載されている適切なコード/構文を使用して、イメージ・モデルおよびマルチ・モデルをONNXパイプライン・モデルに変換できます。
これらの手順では、/etc/yum.repos.dにOracle Linux 8リポジトリを構成してあること、Autonomous AI Databaseを使用している場合はウォレットを構成してあること、必要な場合はプロキシを設定してあることが前提となっています。
  1. Pythonのインストール:
    sudo yum install libffi-devel openssl openssl-devel tk-devel xz-devel \
    zlib-devel bzip2-devel readline-devel libuuid-devel \
    ncurses-devel libaio tcl-devel openblas libsqlite3-dev
    wget https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tgz
    mkdir -p $HOME/python
    tar -xvzf Python-3.13.5.tgz --strip-components=1 -C $HOME/python
    cd $HOME/python
    ./configure --enable-shared --prefix=$HOME/python
    make clean; make
    make altinstall
  2. 変数PYTHONHOMEPATHおよびLD_LIBRARY_PATHを設定します:
    export PYTHONHOME=$HOME/python
    export PATH=$PYTHONHOME/bin:$PATH
    export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH
  3. python3およびpip3のシンボリックリンクを作成します:
    cd $HOME/python/bin
    ln -s python3.13 python3
    ln -s pip3.13 pip3
  4. 埋込みモデルをPythonからデータベースに直接ロードする予定の場合は、Oracle Instant Clientをインストールします。モデルをファイルにエクスポートしている場合は、このステップをスキップできます。詳細は、ステップ5の、環境変数に関するノートを参照してください。
    sudo yum install -y oracle-instantclient-release-el8 oracle-instantclient-basic
  5. PythonおよびOracle Instantクライアントの環境変数を定義し、各OML4Pyクライアント・セッションの前にこれらの環境変数をソースとするenv.shなどの環境ファイルを作成します。または、ユーザーがLinuxマシンにログインしたときに定義されるように、環境変数定義を.bashrcに追加します。
    # Environment variables for Python
    export PYTHONHOME=$HOME/python
    export PATH=$PYTHONHOME/bin:$PATH
    export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH

    ノート:

    Oracle Instant Clientの環境変数 - モデルをデータベースにエクスポートするためにOracle Instant Clientがインストールされている場合のみ。

    export LD_LIBRARY_PATH=$HOME/instantclient_23_26:$LD_LIBRARY_PATH

  6. 次に示す必要なサードパーティ・パッケージを含むrequirements.txtという名前のファイルを作成します。
    --extra-index-url https://download.pytorch.org/whl/cpu
    pandas==2.2.3
    setuptools==80.8.0
    scipy==1.14.1
    matplotlib==3.10.0
    oracledb==3.3.0
    scikit-learn==1.6.1
    numpy==2.1.0
    pyarrow==19.0.0
    onnxruntime==1.20.0
    onnxruntime-extensions==0.14.0
    onnx==1.18.0
    torch==2.9.0
    transformers==4.56.1
    sentencepiece==0.2.1

    ノート:

    別の方法としては、サポート・パッケージ・バンドルoml4py-supporting-linux-x86_64-2.1.1.zipをダウンロードし使用することで、必要なサポート・パッケージをインストールできます。詳細は、「オンプレミス・データベース用のLinuxに必要なサポート・パッケージのインストール」を参照してください。
  7. pip3をアップグレードし、requirements.txtにリストされているパッケージをインストールします。
    pip3 install --upgrade pip  
    pip3 install -r requirements.txt
  8. OML4Pyクライアントをインストールするには、OML4Pyダウンロード・ページからOML4Py 2.1.1クライアントをダウンロードします。Oracleライセンス契約に同意し、oml4py-client-linux-x86_64-2.1.1.zipをクリックしてそのZIPファイルをダウンロードします。ダウンロード後、ご使用のLinuxマシンにそのZIPファイルをアップロードします。
    unzip oml4py-client-linux-x86_64-2.1.1.zip 
    pip3 install client/oml-2.1.1-cp313-cp313-linux_x86_64.whl

    ノート:

    ONNXモデル変換機能にのみアクセスする必要がある場合は、OML4Pyスリム・クライアント・モジュールをインストールします。この軽量クライアントは、OML4Py機能すべてのセットではなくONNXモデル変換が必要な状況に最適です。詳細は、OML4Pyスリム・クライアントのインストールを参照してください。

  9. 事前構成済モデルすべてのリストを取得するには、Pythonを起動し、oml.utilsからONNXPipelineConfigをインポートします。
    python3
    from oml.utils import ONNXPipelineConfig
    ONNXPipelineConfig.show_preconfigured()
    ['sentence-transformers/all-mpnet-base-v2',
    'sentence-transformers/all-MiniLM-L6-v2',
    'sentence-transformers/multi-qa-MiniLM-L6-cos-v1',
    'sentence-transformers/distiluse-base-multilingual-cased-v2',
    'sentence-transformers/all-MiniLM-L12-v2',
    'BAAI/bge-small-en-v1.5',
    'BAAI/bge-base-en-v1.5',
    'taylorAI/bge-micro-v2',
    'intfloat/e5-small-v2',
    'intfloat/e5-base-v2',
    'thenlper/gte-base',
    'thenlper/gte-small',
    'TaylorAI/gte-tiny',
    'sentence-transformers/paraphrase-multilingual-mpnet-base-v2',
    'intfloat/multilingual-e5-base',
    'intfloat/multilingual-e5-small',
    'sentence-transformers/stsb-xlm-r-multilingual',
    'Snowflake/snowflake-arctic-embed-xs',
    'Snowflake/snowflake-arctic-embed-s',
    'Snowflake/snowflake-arctic-embed-m',
    'mixedbread-ai/mxbai-embed-large-v1',
    'openai/clip-vit-large-patch14',
    'google/vit-base-patch16-224',
    'microsoft/resnet-18',
    'microsoft/resnet-50',
    'WinKawaks/vit-tiny-patch16-224',
    'Falconsai/nsfw_image_detection',
    'WinKawaks/vit-small-patch16-224',
    'nateraw/vit-age-classifier',
    'rizvandwiki/gender-classification',
    'AdamCodd/vit-base-nsfw-detector',
    'trpakov/vit-face-expression',
    'BAAI/bge-reranker-base',
    'BAAI/bge-large-en-v1.5',
    'ibm-granite/granite-embedding-278m-multilingual',
    'thenlper/gte-large',
    'Snowflake/snowflake-arctic-embed-l',
    'WhereIsAI/UAE-Large-V1']
  10. 次のいずれかを選択します。
    • DBMS_VECTOR.LOAD_ONNX_MODELを使用してデータベースに手動でアップロード可能な、ONNXファイルを生成するには、「SQLクイック・スタート」のステップ3を参照し、ステップ10をスキップします。
    • OML4Pyクライアントの完全バージョンを使用してそのモデルをデータベースに直接アップロードするには、このステップをスキップし、ステップ11に進みます。
    事前構成済の埋込みモデルをローカル・ファイルにエクスポートします。oml.utilsからONNXPipelineおよびONNXPipelineConfigをインポートします。これにより、ONNX形式モデルがローカル・ファイル・システムにエクスポートされます。
    from oml.utils import ONNXPipeline, ONNXPipelineConfig
    
    # Export to file
    pipeline = ONNXPipeline(model_name="sentence-transformers/all-MiniLM-L6-v2")
    pipeline.export2file("your_preconfig_file_name",output_dir=".")

    ONNXファイルをデータベース・サーバー上のディレクトリに移動し、ファイル・システムおよびデータベースにインポート用のディレクトリを作成します。

    mkdir -p /tmp/models
    sqlplus / as sysdba
    alter session set container=<name of pluggable database>;

    必要な権限を適用します。

    -- directory to store ONNX files for import
    CREATE DIRECTORY ONNX_IMPORT AS '/tmp/models';
    -- grant your OML user read and write permissions on the directory
    GRANT READ, WRITE ON DIRECTORY ONNX_IMPORT to OMLUSER;
    -- grant to allow user to import the model
    GRANT CREATE MINING MODEL TO OMLUSER;

    DBMS_VECTOR.LOAD_ONNX_MODELプロシージャを使用して、OMLユーザー・スキーマにモデルをロードします。この例では、プロシージャは、all-MiniLM-L6.onnxという名前のONNXモデル・ファイルをONNX_IMPORTディレクトリからALL_MINILM_L6という名前のモデルとしてデータベースにロードします。

    BEGIN
       DBMS_VECTOR.LOAD_ONNX_MODEL(
         directory => 'ONNX_IMPORT',
         file_name => 'all-MiniLM-L6-v2.onnx',
         model_name => 'ALL_MINILM_L6',
         metadata => JSON('{"function" : "embedding", "embeddingOutput" : "embedding", "input": {"input": ["DATA"]}}'));
    END;
  11. 事前構成済の埋込みモデルをデータベースにエクスポートします。データベース接続を使用している場合は、資格証明およびデータベース環境と一致するように接続詳細を更新してください。

    ノート:

    ステップ11が適切に機能するように、まずステップ4を完了します。
    # Import oml library and EmbeddingModel from oml.utils
    import oml
    from oml.utils import ONNXPipeline, ONNXPipelineConfig
    
    # Set embedded mode to false for Oracle AI Database on premises. This is not supported or required for Oracle Autonomous AI Database.
    oml.core.methods.__embed__ = False
    
    # Create a database connection. 
    
    # Oracle AI Database on-premises
    oml.connect("<user>", "<password>", port=<port number> host="<hostname>", service_name="<service name>")
    
    # Oracle Autonomous AI Database
    oml.connect(user="<user>", password="<password>", dsn="myadb_low")
    pipeline = ONNXPipeline(model_name="sentence-transformers/all-MiniLM-L6-v2")
    pipeline.export2db("ALL_MINILM_L6")

    モデルとそのビューを問い合せて、PythonまたはSQLから埋込みを生成します。

    import oracledb
    cr = oml.cursor()
    data = cr.execute("select vector_embedding(ALL_MINILM_L6 using 'RES' as DATA)AS embedding from dual")
    data.fetchall()
    [(array('f', [-0.11642304062843323, 0.015433191321790218, -0.04692629724740982, 0.007167273201048374,
    0.035023435950279236, -0.04029884934425354, 0.018412720412015915, 0.0648672804236412, 0.014992560259997845, 
    0.012053844518959522, -0.03542192652821541, -0.09510122984647751, -0.020823240280151367, 0.049922555685043335, 
    -0.01863112859427929, -0.026279663667082787, -0.03260187804698944, 0.05227319151163101, -0.09848847985267639, 
    0.0009467907948419452, 0.04395370930433273, 0.01060416642576456, 0.029333725571632385, -0.04252052679657936, 
    -0.025767622515559196, -0.03291202709078789, -0.053170595318078995, 0.07415973395109177, 0.0082617262378335, 
    ...
    ...
    SELECT VECTOR_EMBEDDING(ALL_MINILM_L6 USING 'RES' as DATA) AS embedding;
    EMBEDDING
    --------------------------------------------------------------------------------
    [-1.16423041E-001,1.54331913E-002,-4.69262972E-002,7.1672732E-003,3.5023436E-002
    ,-4.02988493E-002,1.84127204E-002,6.48672804E-002,1.49925603E-002,1.20538445E-00
    2,-3.54219265E-002,-9.51012298E-002,-2.08232403E-002,4.99225557E-002,-1.86311286
    E-002,-2.62796637E-002,-3.2601878E-002,5.22731915E-002,-9.84884799E-002,9.467907
    95E-004,4.39537093E-002,1.06041664E-002,2.93337256E-002,-4.25205268E-002,-2.5767
    ...
    ...

    ノート:

    Torchの警告を抑制するには、次のコードを使用します:
    import warnings 
    import torch warnings.filterwarnings("ignore", category=DeprecationWarning) 
    warnings.filterwarnings("ignore", category=torch.jit.TracerWarning)
  12. SQLを使用してモデルが存在することを確認します。
    sqlplus $USER/pass@PDBNAME;
    select model_name, algorithm, mining_function from user_mining_models where  model_name='ALL_MINILM_L6';
    
    ---------------------------------------------------------------------------
    MODEL_NAME                 ALGORITHM                      MINING_FUNCTION
    ------------------------------ -------------------------------------------
    ALL_MINILM_L6              ONNX                           EMBEDDING