ファイル・エクスポートによる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_uri
directory_name
file_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
です。このコマンドでは、モデルが削除されます。