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 | jqmodelIdを生成し、モデルが格納されているリポジトリの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