6.4 Embedded Python ExecutionでのConda環境の使用

このトピックでは、Embedded Python Execution用のSQLおよびREST APIでユーザー定義関数(UDF)を実行することによるconda環境の使用について説明します。

Embedded Python Execution用のSQLおよびREST APIでのUDFの実行

conda環境は、OML4Py Python、SQLおよびREST APIで使用できます。Embedded Python Execution用のSQLおよびREST APIを使用するには、次の情報が必要です。

  1. Autonomous DatabaseのOMLサービス・コンソールからのトークンURL。トークンURLを取得し、アクセス・トークンを設定する方法の詳細は、「アクセスおよび認可のプロシージャと関数」(Autonomous Database)を参照してください。

  2. Oracle Machine Learning for Python (OML4Py)スクリプト・リポジトリのユーザー定義Python関数が含まれるスクリプト。スクリプトを作成してスクリプト・リポジトリに保存する方法の詳細は、Embedded Python Executionおよびスクリプト・リポジトリについてを参照してください。

ノート:

OML4Pyスクリプト実行エンドポイントをコールする際にconda環境を使用するには、SQLを使用する場合はenv_nameフィールドに、RESTを使用する場合はenvNameフィールドに、conda環境を指定します。

Embedded Python Execution用のSQL APIを使用したPython UDFの実行 - 非同期モード

pyqEvalファンクションをコールするSELECT文を実行します。PAR_LST引数では、呼び出されたスクリプトでレンダリングされたイメージをWebサーバーが取得できるように、特別な制御引数oml_graphics_flagtrueに指定し、oml_async_flagをtrueに設定してジョブを非同期に送信します。OUT_FMT引数で、文字列'PNG'は、表が固定列(イメージ・バイト列を含む)が含まれる表でレスポンスを返すことを指定します。SCR_NAMEパラメータは、スクリプト・リポジトリに格納されている関数sb_plotを指定します。ENV_NAMEは、スクリプトがコールされる環境名mysbenvを指定します。

%script

set long 2000

SELECT * FROM table(pyqEval(
    par_lst => '{"oml_graphics_flag":true, "oml_async_flag":true}',
    out_fmt => 'PNG',
    scr_name => 'sb_plot',
    scr_owner=> NULL,
    env_name => 'mysbenv'));

出力は、次のようなものです。

NAME VALUE
---------------------------
             https://gcc59e2cf7a6f5f-oml4.adb-compdev1.us-phoenix-1.oraclecloudapps.com/oml/api/py-scripts/v1/jobs/b82947a7-ec3a-4ca6-bf86-54b3f2b3a4b0

ジョブ・ステータスの取得

pyqJobStatusファンクションを使用してジョブ・ステータスをポーリングします。ジョブがまだ実行中の場合、戻り値はジョブがまだ実行中であることを示します。ジョブが完了すると、ジョブIDと結果の場所が返されます。

%script

set long 1000
SELECT VALUE from pyqJobStatus(job_id => 'b82947a7-ec3a-4ca6-bf86-54b3f2b3a4b0');

出力からジョブIDが返されます:

NAME VALUE
---------------------------
             https://gcc59e2cf7a6f5f-oml4.adb-compdev1.us-phoenix-1.oraclecloudapps.com/oml/api/py-scripts/v1/jobs/b82947a7-ec3a-4ca6-bf86-54b3f2b3a4b0/result

結果の取得

%script

set long 500
SELECT NAME, ID, VALUE, dbms_lob.substr(image,100,1) image FROM pyqJobResult(job_id => 'b82947a7-ec3a-4ca6-bf86-54b3f2b3a4b0', out_fmt=>'PNG');

出力は、次のようなものです。

NAME ID VALUE IMAGE
---------------------------
           1 [{"0":0.0,"1":0.0,"2":0.2333333333,"accuracy":0.2333333333,"macro avg":0.0777777778,"weighted avg":0.0544444444},{"0":0.0,"1":0.0,"2":1.0,"accuracy":0.2333333333,"macro avg":0.3333333333,"weighted avg":0.2333333333},{"0":0.0,"1":0.0,"2":0.3783783784,"accuracy":0.2333333333,"macro avg":0.1261261261,"weighted avg":0.0882882883},{"0":11.0,"1":12.0,"2":7.0,"accuracy":0.2333333333,"macro avg":30.0,"weighted avg":30.0}] 89504E470D0A1A0A0000000D494844520000046A000003E808060000008668185B0000003974455874536F667477617265004D6174706C6F746C69622076657273696F6E332E362E322C2068747470733A2F2F6D6174706C6F746C69622E6F72672F28E8

Embedded Python Execution用のREST APIを使用したPython UDFの実行

次の例では、Embedded Python Execution用にOML4Py REST APIでsb_plotという名前のスクリプトを実行します。環境名パラメータenvNamemysbenvに設定します。PNGイメージおよび関数からのデータをJSON形式で戻すには、graphicsFlagパラメータをtrueに設定します。


$ curl -i -X POST --header "Authorization: Bearer ${token}" \
--header 'Content-Type: application/json' --header 'Accept: application/json' \
-d '{"envName":"mysbenv", "graphicsFlag":true, "service":"LOW"}' \
"${omlserver}/oml/api/py-scripts/v1/do-eval/sb_plot"

出力は、次のようなものです。

NAME ID VALUE IMAGE
---------------------------
1 [{"0":0.0,"1":0.0,"2":0.2333333333,"accuracy":0.2333333333,"macro avg":0.0777777778,"weighted avg":0.0544444444},{"0":0.0,"1":0.0,"2":1.0,"accuracy":0.2333333333,"macro avg":0.3333333333,"weighted avg":0.2333333333},{"0":0.0,"1":0.0,"2":0.3783783784,"accuracy":0.2333333333,"macro avg":0.1261261261,"weighted avg":0.0882882883},{"0":11.0,"1":12.0,"2":7.0,"accuracy":0.2333333333,"macro avg":30.0,"weighted avg":30.0}] 89504E470D0A1A0A0000000D494844520000046A000003E808060000008668185B0000003974455874536F667477617265004D6174706C6F746C69622076657273696F6E332E362E322C2068747470733A2F2F6D6174706C6F746C69622E6F72672F28E8