ファイル・エクスポートによるOracle Machine Learning Servicesへのデータベース内モデルのデプロイ
この例では、Oracle Machine LearningモデルをあるAutonomous Databaseから別のAutonomous Databaseにエクスポートする方法を示します。また、シリアライズされたモデルをOracle Machine Learning Servicesにデプロイする方法を示します。
- 同じデータベース内の、あるスキーマから別のスキーマにモデルをエクスポートする
- あるデータベースから別のデータベースにモデルをエクスポートする。このシナリオでは、次のものからモデルをエクスポートできます:
- Autonomous DatabaseからAutonomous Databaseへ
- Autonomous DatabaseからOracleオンプレミス・データベースへ
- Oracleオンプレミス・データベースからAutonomous Databaseへ
- Oracleオンプレミス・データベースからOracleオンプレミス・データベースへ
データベース間でのOMLモデルのエクスポートとインポートの詳細は、テンプレート例のノートブック「OML Export and Import Serialized Model」を参照してください。このノートブックは、Oracle Machine Learningユーザー・インタフェースの「テンプレート」の下の「例」にあります。
この例では、DBMS_DATA_MININGパッケージを使用して、シリアライズされたモデルをAutonomous Database (ソース・データベース)から別のAutonomous Database (ターゲット・データベース)にエクスポートする方法を示します。シリアライズされたモデルの形式は、スコアリングをサポートするための軽量な手法です。シリアライズされたモデル内には、スコアリングに必要なモデル・データとメタデータのみがあります。そのため、よりコンパクトであり、より速くターゲット環境に転送されます。
シリアライズされたモデルを、Oracle Machine Learning Servicesにデプロイすることもできます。Oracle Machine Learning Servicesでは、Autonomous DatabaseでホストされているRESTエンドポイントが提供されます。これらのエンドポイントにより、OMLモデルの格納とスコアリング・エンドポイントの作成が可能になります。OMLサービスのREST APIでは、OMLモデルとONNX形式モデルが両方サポートされており、認識テキスト機能が有効になります。シリアライズされたモデルのエクスポートでは、スコアを生成するモデルのみがサポートされています。属性重要度、相関ルール、指数平滑法およびO-Clusterはサポートされていません。すべてのモデル詳細が必要な場合は、DBMS_DATA_MINING.EXPORT_MODELプロシージャを使用してそのモデルをエクスポートします。
- Autonomous Database (ソース・データベース)からオブジェクト・ストレージに、シリアライズされた形式でモデルをエクスポートします。これにより、
DBMS_DATA_MINING.EXPORT_SERMODELプロシージャを使用して、単一のモデルが、シリアライズされたBLOBにエクスポートされます。 - オブジェクト・ストレージから別のAutonomous Database (ターゲット・データベース)にモデルをインポートします。これには
DBMS_DATA_MINING.IMPORT_SERMODELプロシージャが使用されます。それにより、シリアライズされたBLOBが取得され、シリアライズされた形式でのモデルがターゲット・データベースにインポートされます。 - シリアライズされたモデルをOracle Machine Learning Servicesにデプロイします。そのステップを次に示します:
- 認証トークンを取得する
- モデルをモデル・リポジトリに格納する
- モデル・スコアリング・エンドポイントを作成する
- そのエンドポイント用のOpen APIドキュメントを取得する
- そのモデル・エンドポイントをスコアリングする
この例では、シリアライズされたモデルをAutonomous Database (ソース・データベース)から別のAutonomous Database (ターゲット・データベース)にエクスポートするシナリオを示します。Autonomous Databaseから別のAutonomous Databaseにモデルをエクスポートするには前提条件があります:
- シリアルライズされたBLOBにモデルを書き込むプロシージャを作成する
- クラウド・サービスとやり取りするために
DBMS_CLOUDパッケージにアクセスする- クラウド資格証明を作成します
- Oracle Cloudの事前認証済リクエスト(PAR) - PARは、オブジェクト・ストレージ・データの共有とアップロードに使用されます。
- オブジェクトを永続化するためのディレクトリ - モデルをAutonomous Databaseからエクスポートするときは、シリアライズされたモデルが、オブジェクト・ストレージに送信される前にデータ・ポンプ・ディレクトリに永続化されます。Autonomous Databaseでは、データベース内に、事前定義されたデータ・ポンプ・ディレクトリ
DATA_PUMP_DIRが含まれており、そこにファイルを配置できます。 - 次の権限付与を指定する必要があります:
-
DBMS_CLOUDパッケージ内のプロシージャを実行する権限を付与します。次を実行します:SQL>GRANT EXECUTE ON DBMS_CLOUD TO OMLUSER; -
オブジェクトを保存するためのデータ・ポンプ・ディレクトリへの読取りおよび書込みアクセス権を付与します。次を実行します:
SQL>GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO OMLUSER;
-
1: モデルをシリアライズされた形式でAutonomous Databaseからオブジェクト・ストレージにエクスポートする
GLM_MODが、シリアライズされた形式GLM_MOD.modで、オブジェクト・ストレージにエクスポートされます。ここから、それをスコアリングのために別のデータベースまたはOracle Machine Learning Servicesに移動できます。
- OMLノートブック内の
%script段落で、次のPL/SQLスクリプトを実行してモデルGLM_MODを作成します。ここでは、回帰マイニング機能を使用しており、CARS表にあるデータを問い合せています。%script BEGIN DBMS_DATA_MINING.DROP_MODEL('GLM_MOD'); EXCEPTION WHEN OTHERS THEN NULL; END; / DECLARE v_setlst DBMS_DATA_MINING.SETTING_LIST; BEGIN v_setlst('PREP_AUTO') := 'ON'; v_setlst('ALGO_NAME') := 'ALGO_GENERALIZED_LINEAR_MODEL'; v_setlst('GLMS_DIAGNOSTICS_TABLE_NAME') := 'GLMR_DIAG'; DBMS_DATA_MINING.CREATE_MODEL2( model_name => 'GLM_MOD', mining_function => 'REGRESSION', data_query => 'SELECT * FROM CARS', set_list => v_setlst, case_id_column_name => 'CID', target_column_name => 'MPG'); END; - 別の
%script段落で、次のスクリプトを実行して、モデルGLM_MODをエクスポートし、それをシリアライズされた形式GLM_MOD.modでオブジェクト・ストレージに保存します。%script DECLARE MODNAME VARCHAR2(100) := 'GLM_MOD'; SER_MODNAME VARCHAR2(100); LOCATION_URI VARCHAR2(200) := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eUs89dFd_m_5OoGJ1PLj50bS-glojzHXZAZ3csGg4Iw9kQwKHzkZ8jorPD0si_ls/n/adwc4pm/b/OML-Resources/o/'; BLOB_MODEL BLOB; ----------------------------------------- -- Define a model name to store the model ----------------------------------------- BEGIN SELECT CONCAT(MODNAME,'.mod') INTO SER_MODNAME from dual; DBMS_OUTPUT.PUT_LINE('Serialized model will be exported with name: '||SER_MODNAME); ----------------------------------------------------------------------- -- Read the Serialized Model from Object Storage into a binary object ----------------------------------------------------------------------- DBMS_LOB.CREATETEMPORARY(BLOB_MODEL, FALSE); DBMS_DATA_MINING.EXPORT_SERMODEL(BLOB_MODEL, MODNAME); ---------------------------------------------------------------------- -- Function to write a model to a BLOB ---------------------------------------------------------------------- write_serialized_model(BLOB_MODEL, 'DATA_PUMP_DIR', SER_MODNAME); DBMS_LOB.FREETEMPORARY(BLOB_MODEL); ---------------------------------------------------------------------- -- Save serialized model in the data pump directory to Object Storage ---------------------------------------------------------------------- DBMS_CLOUD.PUT_OBJECT( credential_name => 'MY_CLOUD_CRED', object_uri => LOCATION_URI||SER_MODNAME, directory_name => 'DATA_PUMP_DIR', file_name => SER_MODNAME); SELECT CONCAT(MODNAME,'.mod') INTO SER_MODNAME from dual; DBMS_OUTPUT.PUT_LINE('Serialized model saved in Object Storage with the name: '||SER_MODNAME); END;説明:MODNAME- これは、エクスポートされるモデルの名前です。ここでは、GLM_MODです。SER_MODNAME- エクスポートされたモデルが格納される、オブジェクト・ストレージ内のファイルです。ここでは、GLM_MODを格納するモデルです。LOCATION_URI- これは、オブジェクト・ストレージのURLです。write_serialized_model- BLOBにモデルを書き込む関数です。パラメータv_blob blob、dirName varchar2、filName varchar2を指定します。ここでは、dirNameはDATA_PUMP_DIRで、fileNameはSER_MODNAMEです。DBMS_DATA_MINING.EXPORT_SERMODEL- シリアライズされたモデルをエクスポートしてデータ・ポンプ・ディレクトリ、オブジェクト・ストレージの順に保存するプロシージャです。詳細は、EXPORT_SERMODELプロシージャを参照してください。credential_name-DBMS_CLOUD.PUT_OBJECTプロシージャにクラウド資格証明を指定します。その他のパラメータを次に示します:object_uridirectory_namefile_name
このプロシージャが正常に実行されると、次のメッセージが生成されます:
Serialized model will be exported with name: GLM_MOD.mod
Serialized model saved in Object Storage with the name: GLM_MOD.mod
2: シリアライズされたモデルをオブジェクト・ストレージから別のAutonomous Databaseインスタンスにインポートする
モデルをエクスポートしオブジェクト・ストレージに保存した後は、そのモデルを別のデータベースにインポートすることもできます。
DBMS_DATA_MINING.IMPORT_SERMODELプロシージャを使用して、シリアライズされた形式でのモデルをデータベースにインポートしています。%script
DECLARE
SER_MODNAME VARCHAR2(100) := 'GLM_MOD.mod';
MODNAME VARCHAR2(500);
LOCATION_URI VARCHAR2(200) := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eUs89dFd_m_5OoGJ1PLj50bS-glojzHXZAZ3csGg4Iw9kQwKHzkZ8jorPD0si_ls/n/adwc4pm/b/OML-Resources/o/';
BLOB_MODEL BLOB;
BEGIN
DBMS_OUTPUT.PUT_LINE('Serialized model name in Object Storage is: '||SER_MODNAME);
--------------------------------------------------
-- Define a model name to save the imported model
--------------------------------------------------
SELECT UPPER(REGEXP_SUBSTR(SER_MODNAME, '[^.]+')) INTO MODNAME from dual;
DBMS_OUTPUT.PUT_LINE('Model will be saved with name: '||MODNAME);
------------------------------------------------------------------------
-- Read the serialized model from Object Storage into a binary variable
------------------------------------------------------------------------
BEGIN DBMS_DATA_MINING.DROP_MODEL(model_name => MODNAME);
EXCEPTION WHEN OTHERS THEN NULL; END;
BLOB_MODEL := DBMS_CLOUD.GET_OBJECT(
credential_name => 'MY_CLOUD_CRED',
object_uri => LOCATION_URI||SER_MODNAME);
-----------------------------------------------
-- Import the serialized model to the database
-----------------------------------------------
DBMS_DATA_MINING.IMPORT_SERMODEL(BLOB_MODEL, MODNAME);
DBMS_OUTPUT.PUT_LINE('New model successfully imported with name: '||MODNAME);
END;SER_MODNAME- シリアライズされたモデルが格納されている、オブジェクト・ストレージからインポートされるファイル。ここでは、GLM_MOD.modです。LOCATION_URI- これは、オブジェクト・ストレージの場所です。DBMS_DATA_MINING.IMPORT_SERMODEL- シリアライズされたBLOBをデータベースにインポートするパッケージです。詳細は、IMPORT_SERMODELプロシージャを参照してください。
Serialized model name in Object Storage is: GLM_MOD.mod
Model will be saved with name: GLM_MOD
New model successfully imported with name: GLM_MOD
3: シリアライズされたモデルをOracle Machine Learning Servicesにデプロイする
- 認証トークンを取得する
- シリアライズされたモデルをローカルに保存する
- 認証に記載されている手順に従って、トークンを取得します。これはベアラー・トークン(HTTP認証スキームのセキュリティ・トークン)です。リクエストの実行時に、Authorizationヘッダーのこのトークンを送信する必要があります。
ノート:
トークンを取得できるデータベース・アカウントには、OML_DEVELOPERロールが必要です。 -
POSTリクエストをOracle Machine Learning Servicesリポジトリに送信することで、モデルをデータベース内のモデル・リポジトリに格納します。次のcURLコマンドを使用します。curl -X POST --header "Authorization: Bearer $token" <oml-cloud-service-location-url>/omlmod/v1/models \ -H 'content-type: multipart/form-data; boundary=Boundary' \ -F modelData=@modelfile \ -F modelName=GLM_MOD \ -F modelType=OML \ -F 'description=Regression model' \ -F shared=true \ -F version=1.0ノート:
モデルをリポジトリに格納すると、一意のIDが生成されます。これは、モデル・エンドポイントの作成時に使用するmodelIdです。この例の説明は、次のとおりです。$tokenは、認可APIを介して取得されたトークンに割り当てられる環境変数を表します。GLM_MODはモデル名です
POSTリクエストを使用することでモデル・スコアリング・エンドポイントを作成します。このメソッドは、modelIdとuriを入力として取ります。モデルをデプロイするPOSTリクエストの例:curl -X POST --header "Authorization: Bearer $token" <oml-cloud-service-location-url>/omlmod/v1/deployment\ --header 'Content-Type: application/json' \ -d '{"uri":"glm_model","modelId":"8c8a4499-a6cd-4706-b9bf-dbf489104a95"}'説明:$tokenは、認可APIを介して取得されたトークンに割り当てられる環境変数を表します。glm_modelはそのURIです。8c8a4499-a6cd-4706-b9bf-dbf489104a95はmodelIdです。
ノート:
モデル所有者のみがモデルをデプロイできます。モデル所有者とは、モデルを格納するユーザーです。デプロイ済モデルに対して新しいエンドポイントが作成されます。- GETリクエストを送信することで、このエンドポイント用のOpen APIドキュメントを取得します。
URIが
glm_modelであるデプロイ済モデル・エンドポイントのOpen APIドキュメントの例を次に示します:curl -X GET --header "Authorization: Bearer $token" <oml-cloud-service-location-url>/omlmod/v1/deployment/glm_model/apiこの例の説明は、次のとおりです。$tokenは、認可APIを介して取得されたトークンに割り当てられる環境変数を表します。glm_modelはそのURIです。
- 次のように
POSTリクエストを使用して、モデル・エンドポイントをスコアリングします。curl -X POST --header "Authorization: Bearer $token" <oml-cloud-service-location-url>/omlmod/v1/deployment/glm_model/score\ --header 'Content-Type: application/json' --header 'Accept: application/json'\ -d '{"inputRecords":[{"X1":1,"X2":5}]}'この例の説明は、次のとおりです。$tokenは、認可APIを介して取得されたトークンに割り当てられる環境変数を表します。/deployment/glm_model/はそのURIです。inputRecordsは配列で、単一のレコード(例を参照)または複数のレコードのミニバッチを渡すことができます。
- スコアリング・エンドポイントの削除: URIで識別されるスコアリング・エンドポイントを削除するには、次のcURLコマンドを実行します:
curl -i -X DELETE "<oml-cloud-service-location-url>/omlmod/v1/deployment/glm_model" \ --header "Authorization: Bearer $token"この例では、
glm_modelがそのURIです。このコマンドでは、スコアリング・エンドポイントが削除されます。 - モデルの削除:
modelIdで特定されているモデルを削除するには、次のcURLコマンドを実行します:curl -i -X DELETE "<oml-cloud-service-location-url>/omlmod/v1/models/8c8a4499-a6cd-4706-b9bf-dbf489104a95" \ --header "Authorization: Bearer $token"この例では、
8c8a4499-a6cd-4706-b9bf-dbf489104a95がmodelIdです。このコマンドでは、モデルが削除されます。