オンライン予測用にモデルを配信する前に、モデルをエンドポイントにデプロイする必要があります。モデルをデプロイすると、低レイテンシでオンライン予測を提供するために物理リソースが関連付けられます。
このページでは、オンライン予測を使用してモデルをエンドポイントにデプロイするために必要な手順について説明します。
始める前に
モデルをエンドポイントにデプロイする前に、予測に使用するモデル アーティファクトをエクスポートし、そのページに記載されている前提条件をすべて満たしていることを確認してください。
リソース プールを作成する
ResourcePool カスタム リソースを使用すると、モデルの動作をきめ細かく制御できます。次のような設定を定義できます。
- 自動スケーリング構成。
- CPU とメモリの要件を定義するマシンタイプ。
- GPU リソースなどのアクセラレータ オプション。
マシンタイプは、予測クラスタを作成するために送信するノードプール仕様リクエストに不可欠です。
デプロイされたモデルのリソースプールの場合、アクセラレータの数とタイプによって GPU 使用率が決まります。マシンタイプは、リクエストされた CPU とメモリリソースのみを指定します。そのため、ResourcePool 仕様に GPU アクセラレータを含める場合、machineType フィールドはモデルの CPU とメモリの要件を制御し、acceleratorType フィールドは GPU を制御します。また、acceleratorCount フィールドは GPU スライスの数を制御します。
次の手順で ResourcePool カスタム リソースを作成します。
ResourcePoolカスタム リソースを定義する YAML ファイルを作成します。次の例には、GPU アクセラレータ(GPU ベースのモデル)を使用するリソースプールと GPU アクセラレータ(CPU ベースのモデル)を使用しないリソースプールの YAML ファイルが含まれています。GPU ベースのモデル
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: a2-highgpu-1g-gdc acceleratorType: nvidia-a100-80gb # The accelerator count is a slice of the requested virtualized GPUs. # The value corresponds to one-seventh of 80 GB of GPUs for each count. acceleratorCount: 2 autoscaling: minReplica: 2 maxReplica: 10CPU ベースのモデル
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: n2-highcpu-8-gdc autoscaling: minReplica: 2 maxReplica: 10次のように置き換えます。
RESOURCE_POOL_NAME:ResourcePool定義ファイルに付ける名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。
リソースのニーズと予測クラスタで使用可能なものに応じて、
dedicatedResourcesフィールドの値を変更します。ResourcePool定義ファイルを予測クラスタに適用します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml次のように置き換えます。
PREDICTION_CLUSTER_KUBECONFIG: 予測クラスタの kubeconfig ファイルのパス。RESOURCE_POOL_NAME:ResourcePool定義ファイルの名前。
ResourcePool カスタム リソースを作成すると、Kubernetes API と Webhook サービスが YAML ファイルを検証し、成功または失敗を報告します。予測演算子は、モデルをエンドポイントにデプロイするときに、リソースプールからリソースをプロビジョニングして予約します。
エンドポイントにモデルをデプロイする
リソースプールがある場合は、1 つのエンドポイントに複数のモデルをデプロイすることも、モデルを複数のエンドポイントにデプロイすることもできます。サポートされているコンテナをターゲットとする予測モデルをデプロイします。エンドポイントがすでに存在するかどうかに応じて、次のいずれかの方法を選択します。
モデルを新しいエンドポイントにデプロイする
予測モデルを新しいエンドポイントにデプロイする手順は次のとおりです。
DeployedModelカスタム リソースを定義する YAML ファイルを作成します。TensorFlow
次の YAML ファイルは、TensorFlow モデルの構成例を示しています。
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/1 # The model version ID must match the name of the first folder in # the artifactLocation bucket, inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/1/, # then the value for the model version ID is "1". modelVersionID: "1" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-14:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE次のように置き換えます。
DEPLOYED_MODEL_NAME:DeployedModel定義ファイルに付ける名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。PREDICTION_ENDPOINT: 新しいエンドポイントに付ける名前(my-img-prediction-endpointなど)。PATH_TO_MODEL: ストレージ バケット内のモデルのパス。RESOURCE_POOL_NAME: モデルをホストするリソースプールを作成したときにResourcePool定義ファイルに付けた名前。
残りのフィールドの値は、予測モデルに合わせて変更します。
PyTorch
次の YAML ファイルは、PyTorch モデルのサンプル構成を示しています。
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: endpointPath: PREDICTION_ENDPOINT endpointInfo: id: PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/pytorch artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: "pytorch" modelDisplayName: my-pytorch-model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/pytorch/1 modelVersionID: "1" modelContainerSpec: # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-4:latest imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest ports: - 8080 grpcPorts: - 7070 sharesResourcePool: false resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE次のように置き換えます。
DEPLOYED_MODEL_NAME:DeployedModel定義ファイルに付ける名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。PREDICTION_ENDPOINT: 新しいエンドポイントに付ける名前(my-img-prediction-endpointなど)。PATH_TO_MODEL: ストレージ バケット内のモデルのパス。RESOURCE_POOL_NAME: モデルをホストするリソースプールを作成したときにResourcePool定義ファイルに付けた名前。
残りのフィールドの値は、予測モデルに合わせて変更します。
DeployedModel定義ファイルを予測クラスタに適用します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml次のように置き換えます。
PREDICTION_CLUSTER_KUBECONFIG: 予測クラスタの kubeconfig ファイルのパス。DEPLOYED_MODEL_NAME:DeployedModel定義ファイルの名前。
DeployedModelカスタム リソースを作成すると、Kubernetes API と Webhook サービスが YAML ファイルを検証し、成功または失敗を報告します。予測オペレータはDeployedModelカスタム リソースを調整し、予測クラスタで提供します。Endpointカスタム リソースを定義する YAML ファイルを作成します。次の YAML ファイルは、構成の例を示しています。
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081次のように置き換えます。
ENDPOINT_NAME:Endpoint定義ファイルに付ける名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。PREDICTION_ENDPOINT: 新しいエンドポイントの名前。この名前は、DeployedModel定義ファイルで定義されています。DEPLOYED_MODEL_NAME:DeployedModel定義ファイルに付けた名前。
1 つ以上の
serviceRefデスティネーションを設定できます。2 番目のserviceRefオブジェクトがある場合は、destinationsフィールドの YAML ファイルに追加し、DEPLOYED_MODEL_NAME_2を作成した 2 番目のDeployedModel定義ファイルの名前に置き換えます。デプロイするモデルの数に応じて、必要に応じてserviceRefオブジェクトを追加または削除します。このエンドポイントのモデル間でトラフィックを分割する方法に基づいて、
trafficPercentageフィールドを設定します。エンドポイント構成に従って、残りのフィールドの値を変更します。Endpoint定義ファイルを予測クラスタに適用します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlENDPOINT_NAMEは、Endpoint定義ファイルの名前に置き換えます。
予測モデルのエンドポイント URL パスを取得するには、次のコマンドを実行します。
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
次のように置き換えます。
PREDICTION_CLUSTER_KUBECONFIG: 予測クラスタの kubeconfig ファイルへのパス。PREDICTION_ENDPOINT: 新しいエンドポイントの名前。PROJECT_NAMESPACE: 予測プロジェクトの Namespace の名前。
既存のエンドポイントにモデルをデプロイする
モデルを既存のエンドポイントにデプロイできるのは、そのエンドポイントが新しいときに別のモデルをデプロイした場合のみです。システムでエンドポイントを作成するには、この前の手順が必要です。
予測モデルを既存のエンドポイントにデプロイする手順は次のとおりです。
DeployedModelカスタム リソースを定義する YAML ファイルを作成します。次の YAML ファイルは、構成の例を示しています。
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model-v2 modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/2 # The model version ID must match the name of the first folder in # the artifactLocation bucket, # inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/2/, # then the value for the model version ID is "2". modelVersionID: "2" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-6:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE次のように置き換えます。
DEPLOYED_MODEL_NAME:DeployedModel定義ファイルに付ける名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。PREDICTION_ENDPOINT: 既存のエンドポイントの名前(my-img-prediction-endpointなど)。PATH_TO_MODEL: ストレージ バケット内のモデルのパス。RESOURCE_POOL_NAME: モデルをホストするリソース プールを作成したときにResourcePool定義ファイルに付けた名前。
残りのフィールドの値は、予測モデルに合わせて変更します。
DeployedModel定義ファイルを予測クラスタに適用します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml次のように置き換えます。
PREDICTION_CLUSTER_KUBECONFIG: 予測クラスタの kubeconfig ファイルのパス。DEPLOYED_MODEL_NAME:DeployedModel定義ファイルの名前。
DeployedModelカスタム リソースを作成すると、Kubernetes API と Webhook サービスが YAML ファイルを検証し、成功または失敗を報告します。予測オペレータはDeployedModelカスタム リソースを調整し、予測クラスタで提供します。既存の
Endpointカスタム リソースの詳細を表示します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yamlENDPOINT_NAMEは、Endpoint定義ファイルの名前に置き換えます。destinationsフィールドに新しいserviceRefオブジェクトを追加して、Endpointカスタム リソース定義の YAML ファイルを更新します。新しいオブジェクトに、新しく作成したDeployedModelカスタム リソースに基づいて適切なサービス名を含めます。次の YAML ファイルは、構成の例を示しています。
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 40 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_3 namespace: PROJECT_NAMESPACE trafficPercentage: 10 grpcPort: 8501 httpPort: 8081次のように置き換えます。
ENDPOINT_NAME: 既存のEndpoint定義ファイルの名前。PROJECT_NAMESPACE: 予測クラスタに関連付けられているプロジェクト Namespace の名前。PREDICTION_ENDPOINT: 既存のエンドポイントの名前。この名前は、DeployedModel定義ファイルで参照されています。DEPLOYED_MODEL_NAME: 以前に作成したDeployedModel定義ファイルの名前。DEPLOYED_MODEL_NAME_2: 新しく作成したDeployedModel定義ファイルに付けた名前。
1 つ以上の
serviceRefデスティネーションを設定できます。3 つ目のserviceRefオブジェクトがある場合は、destinationsフィールドの YAML ファイルに追加し、DEPLOYED_MODEL_NAME_3を作成した 3 つ目のDeployedModel定義ファイルの名前に置き換えます。デプロイするモデルの数に応じて、必要に応じてserviceRefオブジェクトを追加または削除します。このエンドポイントのモデル間でトラフィックを分割する方法に基づいて、
trafficPercentageフィールドを設定します。エンドポイント構成に従って、残りのフィールドの値を変更します。Endpoint定義ファイルを予測クラスタに適用します。kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlENDPOINT_NAMEは、Endpoint定義ファイルの名前に置き換えます。
予測モデルのエンドポイント URL パスを取得するには、次のコマンドを実行します。
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
次のように置き換えます。
PREDICTION_CLUSTER_KUBECONFIG: 予測クラスタの kubeconfig ファイルへのパス。PREDICTION_ENDPOINT: エンドポイントの名前。PROJECT_NAMESPACE: 予測プロジェクトの Namespace の名前。