Oracle Machine LearningのONNX形式モデルの使用
Open Neural Network Exchange (ONNX)は、機械学習モデルのオープン・スタンダードな形式です。Oracle Machine Learning ServicesのREST APIを使用することで、ONNX形式モデルを使用してデプロイおよびスコアリングできます。
REST APIは、Oracle Autonomous Databaseクラウド・サービス上のOracle Machine Learning Servicesの一部として公開されます。Oracle Machine Learning ServicesのREST APIは、次のRESTエンドポイントを介したONNX形式モデル・デプロイメントをサポートしています。
- 分類モデル(イメージ以外のモデルとイメージ・モデルの両方)
- クラスタリング・モデル
- 特徴抽出モデル(イメージ・モデル)
- 回帰モデル
modelName.onnx
ファイル、metadata.json
ファイルおよびlabel.txt
(オプション)ファイルを含むONNXモデルzipファイルを作成します。- 「ONNX形式モデルのデプロイ」の「metadata.jsonファイルの内容と説明」の表に示されているように、
metadata.json
ファイルに次のものが含まれていることを確認します。
jq
を使用して、JSON出力を読取り可能な形式に解析できます。jq
ユーティリティは、主要なLinux配布リポジトリのすべてに含まれています。Oracle LinuxおよびRed Hatシステムでは、次のコマンドを使用してインストールされます。 $ sudo yum install jq
ノート:
cURLコマンドでjq
を使用しても、HTTPレスポンスは返されません。HTTPレスポンスを返すには、jq
を削除し、curlコマンドに-i
フラグを追加します。
1: すべての保存済モデルのリストの取得
この例では、コール元に表示され、オプションのmodelName、version
およびnamespace
パラメータを満たすモデルのリストを取得する方法を示します。
curl -X GET --header "Authorization: Bearer $token" "<oml-cloud-service-location-url>/omlmod/v1/models" | jq
ノート:
コール元に表示されるのは、共有モデルおよびコール元が作成したモデルのみです。{ "items": [ { "version": "1.5", "modelType": "OML", "createdBy": "OMLUSER", "modelId": "1b6fed66-bacb-48c7-8549-14542abe2a82", "modelName": "GLM_MOD", "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models/1b6fed66-bacb-48c7-8549-14542abe2a82" } ], "namespace": "OML_MODELS", "shared": true, "storedOn": "2020-11-16T20:43:28.733Z" }, ... ... } ] }
2: モデル名でフィルタされたモデルのリストの取得
この例では、モデル名sk_cl_iris
でフィルタされたモデルのリストを取得する方法を示します
curl -X GET --header "Authorization: Bearer $token" "<oml-cloud-service-location-url>/omlmod/v1/models?modelName=sk_cl_iris" | jq
sk_cl_iris
に関する次の情報を返します。{ "items": [ { "version": "1.0", "modelType": "OML", "createdBy": "OMLUSER", "modelId": "bc5cf626-d4f6-45ba-8a50-c3e57a008bd7", "modelName": "sk_cl_iris", "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models/bc5cf626-d4f6-45ba-8a50-c3e57a008bd7" } ], "namespace": "OML_MODELS", "shared": true, "storedOn": "2020-11-06T22:16:29.387Z" }, ... ... } ] }
3: バージョンおよびネームスペースでフィルタされたモデルのリストの取得
この例では、version=1.0
およびnamespace=ONNX_MODELS
でフィルタされたモデルのリストを取得する方法を示します
curl -X GET --header "Authorization: Bearer $token" "<oml-cloud-service-location-url>/omlmod/v1/models?version=1.0&namespace=ONNX_MODELS" | jq
{ "items": [ { "version": "1.0", "modelType": "ONNX", "createdBy": "OMLUSER", "modelId": "e667cbb3-9887-4dee-96a6-203403804269", "modelName": "onnxTitanicModel", "links": [ { "rel": "self", "href": "https://adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models/e667cbb3-9887-4dee-96a6-203403804269" } ], "namespace": "ONNX_MODELS", "shared": true, "storedOn": "2020-11-10T17:17:27.792Z" } ], "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models" } ] }
4: ONNX形式モデルの格納
この例では、ONNX形式モデルをリポジトリに格納する方法を示します。格納されたモデルには一意のmodelId
が割り当てられ、モデルの作成者はリクエストの認可に使用されたアクセス・トークンから割り当てられます。このメソッドは、モデル、モデル名、説明、モデル・バージョン、モデル・タイプ、共有
およびモデル・ネームスペース
のバイナリ・データを入力として受け取ります。
curl -X POST --header "Authorization: Bearer $token" \
<oml-cloud-service-location-url>/omlmod/v1/models \
--header 'content-type: multipart/form-data; boundary=Boundary' \
--form modelData=@sk_cl_iris_onnx.zip \
--form modelName=sk_cl_iris \
--form modelType=ONNX \
--form 'description=Saving ONNX ML model' \
--form 'namespace=ONNX_MODELS' \
--form version=1.0 \
--form shared=true | jq
modelId
を生成し、モデルが格納されているリポジトリのURLを提供します。{ "modelId": "fdbbde68-9d36-48d7-837d-08ac9d4d6172", "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models/fdbbde68-9d36-48d7-837d-08ac9d4d6172" } ] }
5: ONNX形式モデル・スコアリング・エンドポイントの作成
この例では、modelId
およびURIで識別されるONNX形式のモデル・スコアリング・エンドポイントを作成する方法を示します。
modelId
およびURIを指定します:curl -X POST "<oml-cloud-service-location-url>/omlmod/v1/deployment" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer ${token}" \
--data '{
"modelId":"fdbbde68-9d36-48d7-837d-08ac9d4d6172",
"uri":"sk_cl_iris"
}' | jq
{ "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/deployment/sk_cl_iris" } ], "modelId": "fdbbde68-9d36-48d7-837d-08ac9d4d6172", "uri": "sk_cl_iris", "deployedOn": "2020-11-17T01:38:45.724Z"
6: ONNX形式モデル・エンドポイント詳細の取得
この例では、モデルURIで識別されるONNX形式モデルのモデル・エンドポイント詳細を取得する方法を示します。
curl -X GET "<oml-cloud-service-location-url>/omlmod/v1/deployment/sk_cl_iris" \
--header "Authorization: Bearer ${token}" | jq
この例では、sk_cl_iris
がURIです:
{ "version": "1.0", "modelType": "ONNX", "createdBy": "OMLUSER", "modelId": "fdbbde68-9d36-48d7-837d-08ac9d4d6172", "description": "Saving ONNX ML model", "modelName": "sk_cl_iris", "metadata": { "miningFunction": "CLASSIFICATION", "algorithm": "ONNX", "onnxAttributes": [ { "name": "float_input", "attributeType": "FLOAT", "shape": [ 1, 4 ] } ], "outputs": [ { "name": "output_label", "attributeType": "INT64" }, { "name": "output_probability", "attributeType": "FLOAT" } ], "modelName": "sk_cl_iris" }, "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/deployment/sk_cl_iris" } ], "namespace": "ONNX_MODELS", "shared": true, "uri": "sk_cl_iris", "deployedOn": "2020-11-17T01:38:45.724Z" }
7: ONNX形式モデル情報の取得
この例では、modelId
で識別されるONNX形式のモデル情報を取得する方法を示します。
curl -X GET "<oml-cloud-service-location-url>/omlmod/v1/models/fdbbde68-9d36-48d7-837d-08ac9d4d6172" \
--header "Authorization: Bearer ${token}" | jq
{ "version": "1.0", "modelType": "ONNX", "createdBy": "OMLUSER", "modelId": "fdbbde68-9d36-48d7-837d-08ac9d4d6172", "description": "Saving ONNX ML model", "modelName": "sk_cl_iris", "links": [ { "rel": "self", "href": "https://qtraya2braestch-omldb.adb.us-sanjose-1.oraclecloudapps.com/omlmod/v1/models/fdbbde68-9d36-48d7-837d-08ac9d4d6172" } ], "namespace": "ONNX_MODELS", "shared": true, "storedOn": "2020-11-17T01:33:39.266Z" }
8: ONNX形式モデル・メタデータの取得
この例では、modelId
で識別されるONNX形式モデルのモデル・メタデータを取得する方法を示します。
curl -X GET "<oml-cloud-service-location-url>/omlmod/v1/models/fdbbde68-9d36-48d7-837d-08ac9d4d6172/metadata" \
--header "Authorization: Bearer ${token}" | jq
この例では、fdbbde68-9d36-48d7-837d-08ac9d4d6172
がmodelId
です。
{ "miningFunction": "CLASSIFICATION", "algorithm": "ONNX", "onnxAttributes": [ { "name": "float_input", "attributeType": "FLOAT", "shape": [ 1, 4 ] } ], "outputs": [ { "name": "output_label", "attributeType": "INT64" }, { "name": "output_probability", "attributeType": "FLOAT" } ], "modelName": "sk_cl_iris" }
9: ONNX形式モデル・スコアリングREST APIの取得
この例では、URIで識別されるONNX形式モデルのOpen API仕様を取得する方法を示します。このAPIは、入力および出力形式を定義し、モデル・リポジトリへのデプロイ時にモデルから抽出されたメタデータに基づきます。Open API仕様は、共有エンドポイントおよびコール元によって作成されたエンドポイントに対してのみ表示されます。
curl -i -X GET "<oml-cloud-service-location-url>/omlmod/v1/deployment/sk_cl_iris/api" \
--header "Authorization: Bearer ${token}"
sk_cl_iris
がURIです。このコマンドは、Open API仕様を返します。HTTP/1.1 200 OK Date: Thu, 12 Nov 2021 19:42:28 GMT Content-Type: application/json Content-Length: 3990 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, DELETE, PUT Access-Control-Allow-Headers: X-Requested-With, Content-Type { "openapi" : "3.0.1", "info" : { "title" : "sk_cl_iris", "description" : "Saving ONNX ML model", "version" : "1.0" .. ..
10: ONNX形式モデルによるスコアリング(2つのレコードのミニバッチ)
この例では、2つのレコードのミニバッチで構成されるONNX形式モデルを使用してスコアリングする方法を示します。
curl -X POST "<oml-cloud-service-location-url>/omlmod/v1/deployment/sk_cl_iris/score" \
--header "Authorization: Bearer ${token}" \
--header 'Content-Type: application/json' \
--data '{"inputRecords": [{"float_input": [[4.8, 7.2, 5.3, 2.4]]}]}' | jq
{ "scoringResults": [ { "classifications": [ { "label": "0", "probability": 0 }, { "label": "1", "probability": 0 }, { "label": "2", "probability": 1.0000001192092896 } ] } ] }
11: ONNX形式モデル・スコアリング・エンドポイントの削除
この例では、URIで識別されるONNX形式のモデル・スコアリング・エンドポイントを削除する方法を示します。
curl -i -X DELETE "<oml-cloud-service-location-url>/omlmod/v1/deployment/sk_cl_iris" \
--header "Authorization: Bearer ${token}"
sk_cl_iris
がURIです。このコマンドは、モデル・エンドポイントを削除し、次の情報を返します。HTTP/1.1 204 No Content Date: Tue, 17 Nov 2021 01:45:00 GMT Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, DELETE, PUT Access-Control-Allow-Headers: X-Requested-With, Content-Type
12: ONNX形式モデルの削除
この例では、modelId
で識別されるONNX形式のモデルを削除する方法を示します。
curl -i -X DELETE "<oml-cloud-service-location-url>/omlmod/v1/models/fdbbde68-9d36-48d7-837d-08ac9d4d6172" \
--header "Authorization: Bearer ${token}"
この例では、fdbbde68-9d36-48d7-837d-08ac9d4d6172
がmodelId
です。
HTTP/1.1 204 No Content Date: Tue, 17 Nov 2021 01:45:36 GMT Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, DELETE, PUT Access-Control-Allow-Headers: X-Requested-With, Content-Type