11.1 ONNXモデルへの事前トレーニング済モデルの変換: エンドツーエンドの手順

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

これらの手順では、/etc/yum.repos.dにOracle Linux 8リポジトリを構成してあること、Autonomous 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
    mkdir -p $HOME/python
    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
    tar -xvzf Python-3.12.0.tgz --strip-components=1 -C /home/$USER/python
    cd $HOME/python
    ./configure --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.12 python3
    ln -s pip3.12 pip3
  4. Pythonからデータベースに埋込みモデルをエクスポートする場合は、Oracle Instant Clientをインストールします。ファイルにエクスポートする場合は、ステップ4と5をスキップして、ステップ6の環境変数の下のノートを確認します:
    cd $HOME
    wget https://download.oracle.com/otn_software/linux/instantclient/2340000/instantclient-basic-linux.x64-23.4.0.24.05.zip
    unzip instantclient-basic-linux.x64-23.4.0.24.05.zip
  5. 変数LD_LIBRARY_PATHを設定します:
    export LD_LIBRARY_PATH=$HOME/instantclient_23_4:$LD_LIBRARY_PATH
  6. 環境ファイルを作成します(たとえば、env.sh。このファイルでは、PythonおよびOracle Instant Clientの環境変数を定義し、各OML4Pyクライアント・セッションの前にこれらの環境変数をソースにします)。または、環境変数定義を.bashrcに追加して、ユーザーがLinuxマシンにログインしたときにそれらが定義されるようにします。
    # 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がインストールされている場合のみ。LD_LIBRARY_PATH=$HOME/instantclient_23_4:$LD_LIBRARY_PATHをエクスポートします。
  7. 次に示す必要なサードパーティ・パッケージを含む、requirements.txtという名前のファイルを作成します。
    --extra-index-url https://download.pytorch.org/whl/cpu
    pandas==2.1.1
    setuptools==68.0.0
    scipy==1.12.0
    matplotlib==3.8.4
    oracledb==2.2.0
    scikit-learn==1.4.1.post1
    numpy==1.26.4
    onnxruntime==1.17.0
    onnxruntime-extensions==0.10.1
    onnx==1.16.0
    torch==2.2.0+cpu
    transformers==4.38.1
    sentencepiece==0.2.0
  8. pip3をアップグレードし、requirements.txt内にリストされているパッケージをインストールします。
    pip3 install --upgrade pip
    pip3 install -r requirements.txt
  9. OML4Pyクライアントをインストールします。OML4Pyダウンロード・ページからOML4Py 2.0クライアントをダウンロードし、それをLinuxマシンにアップロードします。
    unzip oml4py-client-linux-x86_64-2.0.zip
    pip3 install client/oml-2.0-cp312-cp312-linux_x86_64.whl
  10. すべての事前構成済モデルのリストを取得します。Pythonを起動し、oml.utilsからEmbeddingModelConfigをインポートします。
    python3
    
    from oml.utils import EmbeddingModelConfig
    
    EmbeddingModelConfig.show_preconfigured()
    ['sentence-transformers/all-mpnet-base-v2', 'sentence-transformers/all-MiniLM-L6-v2',
          'sentence-transformers/multi-qa-MiniLM-L6-cos-v1', 'ProsusAI/finbert',
          'medicalai/ClinicalBERT', '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', 'prajjwal1/bert-tiny',
          'thenlper/gte-base', 'thenlper/gte-small', 'TaylorAI/gte-tiny', 'infgrad/stella-base-en-v2',
          'sentence-transformers/paraphrase-multilingual-mpnet-base-v2',
          'intfloat/multilingual-e5-base', 'intfloat/multilingual-e5-small',
          'sentence-transformers/stsb-xlm-r-multilingual']
  11. 次のうちから選択します:
    • DBMS_VECTOR.LOAD_ONNX_MODELを使用してデータベースに手動でアップロード可能な、ONNXファイルを生成するには、SQLクイック・スタートのステップ3を参照し、ステップ12と13をスキップします。
    • モデルをデータベースに直接アップロードするには、このステップをスキップし、ステップ12に進みます。
    事前構成済の埋込みモデルをローカル・ファイルにエクスポートします。oml.utilsからEmbeddingModelをインポートします。
    from oml.utils import EmbeddingModel
    
    # Export to file
    em = EmbeddingModel(model_name="sentence-transformers/all-MiniLM-L6-v2")
    em.export2file("all-MiniLM-L6-v2", output_dir=".")
  12. 事前構成済の埋込みモデルをデータベースにエクスポートします。資格証明およびデータベース環境と一致するように、データベース接続を使用して更新する場合。

    ノート:

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