Conda環境の使用

Condaは、サード・パーティPythonライブラリが含まれる環境の使用を可能にするオープンソースのパッケージおよび環境管理システムです。

前提条件

conda環境を使用してOML4Py Embedded Python ExecutionのREST APIを実行するには、OML4Pyスクリプト・リポジトリで実行するPythonスクリプトを保存するか、他のユーザーからPythonスクリプトを付与する必要があります。また、ADMINユーザーがconda環境を作成してオブジェクト・ストレージにアップロードする必要もあります。

例で使用される環境

環境の作成および管理にはADMINユーザーが必要です。次では、Pythonバージョン3.10に基づいてmypyenv環境を作成し、PDBに所有されているオブジェクト・ストレージにその環境をアップロードします。データ・ビジュアライゼーション・ライブラリseabornが環境にインストールされます。

create -n mypyenv python=3.10 seaborn 
upload mypyenv -t application OML4PY

トークンの取得

Oracle Machine Learning User Management Cloud Service RESTエンドポイント/oauth2/v1/tokenを使用して、アクセス・トークンのデータベース・ユーザー資格証明を交換します。詳細は、認証を参照してください。

$ curl -X POST --header 'Content-Type: application/json' --header 'Accept:
application/json'
-d '{"grant_type":"password", "username":"'${username}'", "password":"'${password}'"}'
"<oml-cloud-service-location-url>/omlusers/api/oauth2/v1/token"

一部のスクリプトで使用されるデータ

表作成

次のPythonコードでは、一部のスクリプトで使用されるデータを含む、IRIS表を作成します。

%python

import oml
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
x = pd.DataFrame(iris.data, columns = ['Sepal_Length','Sepal_Width','Petal_Length','Petal_Width'])
y = pd.DataFrame(list(map(lambda x: {0: 'setosa', 1: 'versicolor', 2:'virginica'}[x], iris.target)), columns = ['Species'])
oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
print("Shape of IRIS table:", oml_iris.shape)

スクリプト作成

test_seaborn_no inp

このスクリプトでは、seabornライブラリがインポートされ、分布図が作成されます。次では、スクリプトを定義し、スクリプト・リポジトリに格納します。

begin
  sys.pyqScriptCreate('test_seaborn_noinp',
  'def fun_tab():
    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    data = np.random.multivariate_normal([0, 0], [[5, 2], [2,
    2]], size=2000)
    data = pd.DataFrame(data, columns=["x", "y"])
    sns.displot(data["x"])
    plt.title("Dist plot")
    plt.show()
    return "hello world"
  ',FALSE,TRUE);
end;
/

次のcURLコマンドは、Embedded Python ExecutionのREST APIを使用して、ユーザーのOML4Pyスクリプト・リポジトリに保存されたスクリプトtest_seaborn_noinpを実行します。conda環境名パラメータenvNamemypyenvに設定され、スクリプトによってイメージが返されるため、graphicsFlagtrueに設定されます。

curl -i -k -X POST --header "Authorization: Bearer ${token}" --header 'Content-Type: application/json' --header 'Accept: application/json' 
-d '{"envName": "mypyenv","graphicsFlag": true}' "<oml-cloud-service-location-url>/oml/api/py-scripts/v1/do-eval/test_seaborn_noinp"

出力には、PNGイメージとスクリプトによって返されるデータの両方が含まれます。

{
    "result": [
        {
            "IMAGE": "iVBORw0KGgoAAAANSUhEUgAAA......BJRU5ErkJggg==",
            "DATA": "\"hello world\"",
            "TITLE": "Lineplot",
            "ID": 1
        }
    ]
}

test_seaborn_inp

このスクリプトでは、seabornライブラリがインポートされ、入力データで折れ線グラフが作成されます。次では、スクリプトを定義し、スクリプト・リポジトリに格納します。

begin
  sys.pyqScriptCreate('test_seaborn_inp',
  'def fun_tab(dat):
    import seaborn as sns
    import matplotlib.pyplot as plt
    sns.lineplot(x="Sepal_Length", y="Sepal_Width", data=dat)
    plt.title("Iris plot")
    plt.show()
    return "hello world"
  ',FALSE,TRUE);
end;
/

次のcURLコマンドは、Embedded Python ExecutionのREST APIを使用して、ユーザーのOML4Pyスクリプト・リポジトリに保存されたスクリプトtest_seaborn_inpを実行します。conda環境名パラメータenvNamemypyenvに設定され、スクリプトによってイメージが返されるため、graphicsFlagtrueに設定されます。

curl -i -k -X POST --header "Authorization: Bearer ${token}" --header 'Content-Type: application/json' --header 'Accept: application/json' 
-d '{"input": "select * from IRIS", "rows": 50, "envName": "mypyenv", "graphicsFlag": true}' "<oml-cloud-service-location-url>/oml/api/py-scripts/v1/row-apply/test_seaborn_inp"

出力には、PNGイメージとスクリプトによって返されるデータの両方が含まれます。

{
    "result": {
        "0": {
            "IMAGE": "iVBORw0KGgoAAAANSUhEUg......AAABJRU5ErkJggg==",
            "DATA": "\"hello world\"",
            "TITLE": "Iris plot",
            "ID": 1,
            "CHUNK": 1
        },
        "1": {
            "IMAGE": "iVBORw0KGgoAAAANSUhEUg......tAAAAAElFTkSuQmCC",
            "DATA": "\"hello world\"",
            "TITLE": "Iris plot",
            "ID": 1,
            "CHUNK": 2
        },
        "2": {
            "IMAGE": "iVBORw0KGgoAAAANSUhEUg......AAABJRU5ErkJggg==",
            "DATA": "\"hello world\"",
            "TITLE": "Iris plot",
            "ID": 1,
            "CHUNK": 3
        }
    }
}

test_seaborn_idx

このスクリプトでは、seabornライブラリがインポートされ、タイトル付きの分布図が生成されます。次では、スクリプトを定義し、スクリプト・リポジトリに格納します。

begin
  sys.pyqScriptCreate('test_seaborn_idx',
  'def fun_tab(idx):
    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    data = np.random.multivariate_normal([0, 0], [[5, 2], [2,
    2]], size=2000)
    data = pd.DataFrame(data, columns=["x", "y"])
    sns.displot(data["x"])
    plt.title("Title {}".format(idx))
    plt.show()
    return idx
  ',FALSE,TRUE);
end;
/

次のcURLコマンドは、Embedded Python ExecutionのREST APIを使用して、ユーザーのOML4Pyスクリプト・リポジトリに保存されたスクリプトtest_seaborn_idxを実行します。conda環境名パラメータ envNamemypyenvに設定され、スクリプトによってイメージが返されるため、graphicsFlagtrueに設定されます。

curl -i -k -X POST --header "Authorization: Bearer ${token}" --header 'Content-Type: application/json' --header 'Accept: application/json' 
-d '{"times": 2, "envName": "mypyenv", "graphicsFlag": true, "asyncFlag": true}' "<oml-cloud-service-location-url>/oml/api/py-scripts/v1/index-apply/test_seaborn_idx"

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

HTTP/1.1 201 Created
Date: Mon, 19 Sep 2022 19:48:38 GMT
Content-Length: 0
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Content-Security-Policy: frame-ancestors 'none'
Set-Cookie: JSESSIONID=node01emy4t8xt83rffyr498lwofji7.node0; Path=/oml; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: https://<oml-service-url>/oml/api/py-scripts/v1/jobs/<job_id>