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