3 Autonomous AI Database Serverlessで使用するためのLinux向けOML4Pyクライアントのインストール

Linux向けOML4Pyクライアントをインストールして使用することで、Serverless Exadataインフラストラクチャ上のOracle Autonomous AI DatabaseでOML4Pyを操作できます。

オンプレミスのOML4Pyは、64ビットのプラットフォームでのみ稼働します。サポートされているプラットフォームについては、OML4Pyのデータベースおよびシステムの要件 を参照してください。

次の手順では、Pythonのダウンロードとインストール、環境の構成、クライアント資格証明のインストールと管理、Oracle Instant ClientのインストールおよびOML4Pyクライアントのインストール方法を説明します。

  1. Python 3.12.0ソースをダウンロードし、それを解凍します:

    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz
    tar xvf Python-3.12.0.tar.xz
  2. OML4Pyには、perl-Envlibffi-developensslopenssl-develtk-develxz-develzlib-develbzip2-develreadline-devellibuuid-develおよびncurses-develの各ライブラリが存在する必要があります。これらのパッケージをsudoまたはrootユーザーとしてインストールします:

    sudo yum install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel
  3. Pythonをビルドするには、次のコマンドを入力します(PREFIXは、Python-3.12.0をインストールしたディレクトリです)。make altinstallを使用して、システム・デフォルトのPythonインストールのオーバーライドを回避します。

    export PREFIX=`pwd`/Python-3.12.0
    cd $PREFIX
    ./configure --prefix=$PREFIX --enable-shared
    
    make clean; make
    make altinstall
  4. 環境変数PYTHONHOMEを設定してPATHに追加し、環境変数LD_LIBRARY_PATHを設定します。

    export PYTHONHOME=$PREFIX
    export PATH=$PYTHONHOME/bin:$PATH
    export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH

    $PYTHONHOME/binディレクトリにシンボリック・リンクを作成します。これをPython 3.12.0実行可能ファイルにリンクする必要があります。これは、次のコマンドを使用して実行できます:

    cd $PYTHONHOME/bin 
    ln -s python3.12 python3

    これで、python3スクリプトを使用してPythonを起動できます。

    python3

    最新バージョンがインストールされていない場合は、パッケージのインストール中にpipから警告が返されます。pipのバージョンをアップグレードしてこのような警告を回避できます。

    python3 -m pip install --upgrade pip
  5. 次のように、Autonomous AI Database用のOracle Instant Clientをインストールします:

    使用しているシステム用のOracle Instant Clientをダウンロードします。「Oracle Instant Client Downloads」ページに移動し、「Instant Client for Linux x86-64」を選択します。詳細は、「オンプレミス・データベース用のOracle Instant Client for Linuxのインストール」を参照してください。

    オンプレミス用のOracle Instant Clientをインストールする手順は、「オンプレミスOracle AI Database用のLinux向けOML4Pyクライアントのインストール」を参照してください。

    クライアント・システムにRPMをインストールするためのrootアクセス権がある場合。あるいは、次の項に従って、zipファイル・インストーラをダウンロードしてファイルを解凍し、解凍したファイルの場所をLD_LIBRARY_PATHに追加することもできます。

    wget https://download.oracle.com/otn_software/linux/instantclient/1914000/oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64.rpm
    rpm -ivh oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64.rpm
    export LD_LIBRARY_PATH=/usr/lib/oracle/19.14/client64/lib:$LD_LIBRARY_PATH

    クライアント・システムにRPMをインストールするためのrootアクセス権がない場合。

    https://download.oracle.com/otn_software/linux/instantclient/2340000/instantclient-basic-linux.x64-23.4.0.24.05dbru.zip
    instantclient-basic-linux.x64-23.4.0.24.05dbru.zip
    export LD_LIBRARY_PATH=/path/to/instantclient_23_4:$LD_LIBRARY_PATH
  6. Autonomous AI Databaseからクライアント資格証明(ウォレット)をダウンロードします。ウォレットの内容のためのディレクトリを作成します。ウォレットのzipファイルを新しく作成したディレクトリに解凍します。

    ノート:

    クライアント・ウォレットを使用したmTLS接続が必要です。TLS接続は現在サポートされていません。
    mkdir -p mywalletdir
    unzip Wallet.name.zip -d mywalletdir
    cd mywalletdir/
    ls
    README       ewallet.p12   ojdbc.properties  tnsnames.ora
    cwallet.sso  keystore.jks  sqlnet.ora        truststore.jks
    
  7. sqlnet.oraをウォレットの場所で更新します。プロキシ・ファイアウォールの内側で作業している場合は、SQLNET.USE_HTTPS_PROXY環境変数をonに設定します。

    
    WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="mywalletdir")))
    SSL_SERVER_DN_MATCH=yes
    SQLNET.USE_HTTPS_PROXY=on
  8. tnsnames.oraですべてのサービス・レベルにプロキシ・アドレス情報を追加し、すべてのサービス・レベルの接続プールを追加します。ファイアウォールの内側にいる場合は、tnsnames.oraですべてのサービス・レベルにプロキシ・アドレスおよびポート番号を入力します。次に示すように、AutoML接続プール用に3つの新しいエントリを追加する必要もあります。

    ノート:

    設定した期間内に接続を終了するファイアウォールがプロキシ・サーバーに含まれている場合、データベース接続も終了します。

    たとえば、myadb_medium_poolは、SERVER=POOLEDmyadb_mediumの対応する別名に追加された接続文字列の別の別名です。

    myadb_low = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    myadb_medium = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    myadb_high = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    myadb_low_pool = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com)(SERVER=POOLED))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    myadb_medium_pool = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com)(SERVER=POOLED))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    myadb_high_pool = (description= (retry_count=20)(retry_delay=3)(address=(https_proxy=your proxy address here)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.us-sanjose-1.oraclecloud.com))(connect_data=(service_name=qtraya2braestch_myadb_medium.adb.oraclecloud.com)(SERVER=POOLED))(security=(ssl_server_cert_dn="CN=adb.us-sanjose-1.oraclecloud.com,OU=Oracle ADB SANJOSE,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

  9. TNS_ADMIN環境変数を、ウォレット・ディレクトリに設定します。

    export TNS_ADMIN=mywalletdir
  10. OML4Pyライブラリの依存関係をインストールします。ここに示すバージョンは、オラクル社でテストおよびサポートしているバージョンです。次のコンテンツを含むrequirements.txtというファイルを作成します:

    oracledb 2.2.0
    matplotlib 3.8.4
    numpy 1.26.4
    pandas 2.1.1
    scikit-learn 1.4.1.post1
    scipy 1.12.0
    six 1.13.0
    
  11. OML4Pyクライアントをインストールします。

    OML4Pyクライアントのインストールzipファイルをダウンロードするには、Oracle Technology Networkの「Oracle Machine Learning for Python Downloads」ページにアクセスします。詳細は、「オンプレミス・データベース用のLinux向けOML4Pyクライアントのインストール」を参照してください。

    unzip oml4py-client-linux-x86_64-2.0.zip
    perl -Iclient client/client.pl
    Oracle Machine Learning for Python 2.0 Client.
    
    Copyright (c) 2018, 2022 Oracle and/or its affiliates. All rights reserved.
    Checking platform .................. Pass
    Checking Python .................... Pass
    Checking dependencies .............. Pass
    Checking OML4P version ............. Pass
    Current configuration
      Python Version ................... 3.12.0
      PYTHONHOME ....................... /opt/Python-3.12.0
      Existing OML4P module version .... None
    
      Operation ........................ Install/Upgrade
    
    Proceed? [yes]
    Processing ./client/oml-2.0-cp312-cp312-linux_x86_64.whl
    Installing collected packages: oml
    Successfully installed oml-2.0
    
    Done
  12. Pythonを起動し、omlライブラリをロードします。

    python3
    import oml
    
  13. データベース接続を作成します。OMLクライアントはウォレットを使用して接続します。dsnおよびautoml引数をウォレットのtnsnamesの別名に設定します。

    oml.connect(user="oml_user", password="oml_user_password", 
    dsn="myadb_medium", automl="myadb_medium_pool")

    Oracle Machine Learningのユーザー資格証明をクリア・テキストで公開せずに接続するために、userおよびpasswordパラメータに空の文字列を指定するには、次のようにします:

    oml.connect(user="", password="", dsn="myadb_medium", automl="myadb_medium_pool")