Hosted Model Payload Formats Supported on Earth Engine

Your custom trained model must be configured such that Earth Engine can send well-formed, interpretable inference requests to the model as it is hosted on Vertex AI.

Supported Model Inputs

Earth Engine constructs requests on your behalf when performing inference. Specify the payload format that EE will send requests with using the payloadFormat parameter when you instantiate the model connector with ee.Model.fromVertexAi.

gRPC Prediction Payloads

All hosted TensorFlow models can send predictions over the gRPC protocol. This is the preferred way to connect hosted models with Earth Engine as it will result in lower prediction latency and higher reliability.

GRPC_TF_TENSORS

Use the GRPC_TF_TENSORS payload format to use gRPC with TensorFlow models. All properties and or bands will be encoded in a single PredictRequest. This PredictRequest will be converted to a dictionary of tensors for your model to use.

GRPC_SERIALIZED_TF_TENSORS

Use the GRPC_SERIALIZED_TF_TENSORS format if you want to migrate a Cloud AI Platform model that was previously already integrated with Earth Engine without having to modify the model. You will need to re-upload and re-deploy if container_grpc_ports is not set on your model in Vertex AI.

GRPC_SERIALIZED_TF_EXAMPLES

Use the GRPC_SERAILZED_TF_EXAMPLES for models that support tf.Example protocol buffers. Earth Engine will send a single tensor named "input" that contains the utf-8 encoded proto ByteString of an Example proto.

HTTP API Payloads

Vertex AI supports connecting to HTTP inference endpoints. Earth Engine supports several of the common HTTP payload formats. By default all Vertex AI custom models support the HTTP inference API.

SERIALIZED_TF_TENSORS

This is the default payloadFormat when connecting to a hosted model in Vertex AI. This payload format is the most efficient of the HTTP payload formats when using TensorFlow models.

Earth Engine will construct the inputs in the following way: for every band and property required for your inference request will be a single key-value pair in the instances object sent to your hosted model.

Each key will be the band or property name and each value will be a Base64 encoded TensorProto ByteString as a string_val.

RAW_JSON

For other model frameworks the most flexible format we can send is a JSON dictionary of named inputs and values. This payload format works well with PyTorch and AutoML models by default.

However do note that all numerical values will be converted into JSON strings. For example, to represent the number we encode 12.345 this as the string "12.345". Large inference payloads are not well supported with this payload format.

ND_ARRAYS

This is similar to RAW_JSON payload format but will omit the keys and only pass in a list of numbers in the same format of calling to_list() on a NumPy ndarray. This payload format works well with PyTorch natively.