モデル・デプロイメントの呼出し

モデル・デプロイメントを呼び出すと、特徴ベクトルまたはデータ・サンプルを予測エンドポイントに渡すことができ、モデルはそれらのデータ・サンプルの予測を返します。

モデル・デプロイメントがアクティブなlifecycleStateになると、予測エンドポイントはクライアントによって行われたリクエストを正常に受信できます。

モデル・デプロイメントの詳細ページで、「モデルの呼出し」を選択します。次の詳細が表示されます:

  • モデルHTTPエンドポイント。プライベート・モデル・デプロイメントの場合、HTTPエンドポイントには、プライベート・エンドポイントの作成中に設定されたプライベートFQDNが含まれます。詳細は、プライベート・エンドポイントの作成に関する項を参照してください。
  • OCI CLIを使用してモデル・エンドポイントを呼び出すサンプル・コード。または、OCI PythonおよびJava SDKを使用して、提供されているコード・サンプルでモデルを起動します。
  • ペイロード・サイズの上限は10MBです。

  • モデルの呼出し時のタイムアウトは、HTTPコールの場合、60秒です。

サンプル・コードを使用して、モデル・デプロイメントを呼び出します。

モデル・デプロイメントを呼び出すと、モデル・デプロイメントURIの予測エンドポイントがコールされます。このエンドポイントは、サンプル・データを入力引数とし、score.pyモデル・アーティファクト・ファイルのpredict()関数を使用して処理されます。サンプル・データはJSON形式ですが、他の形式でもかれます。処理とは、サンプル・データを変換して、モデルの推論メソッドに渡すことです。モデルは、クライアントに返す前に処理できる予測を生成できます。

APIレスポンスは次のとおりです:

HTTPステータス・コード エラー・コード 説明 再試行してください

200

なし

200 Success

{
  "data": {
    "prediction": [
      "virginica"
    ]
  },
  "headers": {
    "content-length": "28",
    "content-type": "application/json",
    "opc-request-id": "
  },
  "status": "200 OK"
}

なし

404

NotAuthorizedOrNotFound

モデルのデプロイメントが見つからないか、認可に失敗しました。

いいえ

405

MethodNotAllowed

使用できないメソッドです

いいえ

411

LengthRequired

コンテンツ長ヘッダーがありません。

いいえ

413

PayloadTooLarge

ペイロード・サイズの上限は10MBです。

いいえ

429

TooManyRequests

リクエストが多すぎます。

LB帯域幅の制限を超えました

プロビジョニングされたロード・バランサの帯域幅を増やし、モデル・デプロイメントを編集してこれらのエラーを回避することを検討してください。

テナンシのリクエスト率制限を超えました

テナンシ当たりのリクエストの最大数1秒当たりは150に設定されます。

LB帯域幅の増加後に常にエラー・メッセージを受信する場合は、OCIコンソールを使用してテナンシのサポート・チケットを送信します。チケットに次の詳細を含めます。

  • 発生したエラー・メッセージの問題を説明し、テナンシに必要な1秒当たりの新規リクエストを示します。

  • 軽度のサービス損失であることを示します。
  • 分析とAIおよびデータ・サイエンスを示します。

  • 問題がモデルを作成および管理していることを示します。

はい(バックオフ使用

500

InternalServerError

内部サーバー・エラーです。

  • サービス・タイムアウト。

    /predictエンドポイントには60秒のタイムアウトがあります。このタイムアウト値は変更できません。

  • score.pyファイルは例外を返します。

はい(バックオフ使用

503

ServiceUnavailable

モデル・サーバーが使用できません。

はい(バックオフ使用

モデル推論エンドポイント(予測)リクエスト・スロットル

予測エンドポイント・リクエストは、時間の経過に伴うアクティビティおよびリソース消費に基づいて抑制される場合があります。

これは、アプリケーション・サーバーを提供するモデルが過剰なリクエストによって圧倒されないように保護し、サービス拒否攻撃を防止することで、リソースの高可用性と公平な使用を維持することです。短時間に大量のリクエストを行うと、成功するものと失敗するものがあります。スロットル処理が原因でリクエストが失敗すると、次のエラー・コードおよび説明のいずれかを含むレスポンス・コード429が返されます:

 { "code": "TooManyRequests", "message": "Tenancy request-rate limit exceeded. 
Please use the OCI Console to submit a support ticket for your tenancy to increase the RPS."} 

または

 { "code": "TooManyRequests", "message": "LB bandwidth limit exceeded. 
Consider increasing the provisioned load balancer bandwidth to avoid these errors." } 

OCI Python SDKでの呼出し

次のサンプル・コードは、モデル・デプロイメントを呼び出すための参考となるものです:

import requests
import oci
from oci.signer import Signer
import json
 
# model deployment endpoint. Here we assume that the notebook region is the same as the region where the model deployment occurs.
# Alternatively you can also go in the details page of your model deployment in the OCI console. Under "Invoke Your Model", you will find the HTTP endpoint
# of your model.
endpoint = <your-model-deployment-uri>
# your payload:
input_data = <your-json-payload-str>
 
if using_rps: # using resource principal:    
    auth = oci.auth.signers.get_resource_principals_signer()
else: # using config + key:
    config = oci.config.from_file("~/.oci/config") # replace with the location of your oci config file
    auth = Signer(
        tenancy=config['tenancy'],
        user=config['user'],
        fingerprint=config['fingerprint'],
        private_key_file_location=config['key_file'],
        pass_phrase=config['pass_phrase'])
 
# post request to model endpoint:
response = requests.post(endpoint, json=input_data, auth=auth)
 
# Check the response status. Success should be an HTTP 200 status code
assert response.status_code == 200, "Request made to the model predict endpoint was unsuccessful"
 
# print the model predictions. Assuming the model returns a JSON object.
print(json.loads(response.content)) 

OCI CLIでの呼出し

CLIでモデル・デプロイメントを呼び出して使用します。

CLIはOCI Cloud Shell環境に含まれており、事前認証されています。次の例では、CLIを使用してモデル・デプロイメントを呼び出します:

oci raw-request --http-method POST --target-uri
<model-deployment-url>/predict --request-body '{"data": "data"}' 

プライベート・エンドポイントを使用したモデル・デプロイメントの起動

プライベート・エンドポイントで構成されたモデル・デプロイメントには、プライベート・ネットワークを介してのみアクセスできます。パブリック・エンドポイントを介してアクセスすることはできません。

プライベート・エンドポイントの作成の詳細は、プライベート・エンドポイントの作成に関する項を参照してください。
ノート

この機能を使用できるのは、OC1レルムのみです。その他のレルムの場合は、サービス・リクエストを作成します。

コンソールの次のステップでは、アプリケーションがプライベート・エンドポイントにアクセスできることを確認します:

  1. 仮想クラウド・ネットワーク(VCN)およびサブネットを構成します。

    プライベート・エンドポイント接続はVCNレベルです。VCN当たり多数のサブネットがある場合、そのVCNに対して1つのプライベート・エンドポイントのみを作成する必要があります。セキュリティ・ルールが要件を満たしていることを確認します。

  2. (オプション)ネットワーク・セキュリティ・グループを構成します。
  3. サブネットがイングレスのセキュリティ・ルールを設定することで、プライベート・エンドポイント・リソースへのアクセス権を付与していることを確認します。
  4. サブネットに使用可能なIPアドレスがあることを確認します。

    指定されたサブネットに使用可能なIPアドレスがない場合、プライベート・エンドポイントを作成するための作業リクエストは失敗します。詳細は、プライベート・エンドポイント作成の失敗を参照してください。

    エンドポイント・リソースにアプリケーションから到達可能な場合、モデル・デプロイメントへの予測リクエストはプライベート・エンドポイントURLを介して起動できます。

CLIからプライベート・エンドポイントを介してモデル・デプロイメントを起動するには、サンプル・コマンドおよび必須パラメータを使用します。ノートブック・セッション・インスタンスがプライベート・モデル・デプロイメントへのアクセスに使用される場合は、プライベート・エンドポイント・リソースと同じVCNおよびサブネットにも存在するカスタム・ネットワーキングのネットワーク・タイプのカスタム・ネットワーキングを使用して作成します。詳細は、「ノートブック・セッションの作成」を参照してください。

プライベート・エンドポイント・リソースと同じVCNおよびサブネットにアクセスできるノートブック・セッション・インスタンスまたはクラウド・シェル・インスタンスを使用して、次のコマンドを実行します:

oci raw-request --http-method POST --target-uri <private-endpoint-url>/<model-deployment-ocid>/predict --request-body '{"data": "data"}'