Пример #1
0
    def predict_grpc(self, request):
        """
        predict_grpc will be called only when there is a GRPC call to the server
        which in this case, the request will be sent to the TFServer directly.
        """
        log.debug("Preprocessing contents for predict function")
        request_data_type = request.WhichOneof("data_oneof")
        default_data_type = request.data.WhichOneof("data_oneof")
        log.debug(
            f"Request data type: {request_data_type}, Default data type: {default_data_type}"
        )

        if request_data_type != "data":
            raise Exception("strData, binData and jsonData not supported.")

        tfrequest = predict_pb2.PredictRequest()
        tfrequest.model_spec.name = self.model_name
        tfrequest.model_spec.signature_name = self.signature_name

        # For GRPC case, if we have a TFTensor message we can pass it directly
        if default_data_type == "tftensor":
            tfrequest.inputs[self.model_input].CopyFrom(request.data.tftensor)
            result = self.stub.Predict(tfrequest)
            datadef = prediction_pb2.DefaultData(
                tftensor=result.outputs[self.model_output])
            return prediction_pb2.SeldonMessage(data=datadef)

        else:
            data_arr = grpc_datadef_to_array(request.data)
            tfrequest.inputs[self.model_input].CopyFrom(
                tf.make_tensor_proto(data_arr.tolist(), shape=data_arr.shape))
            result = self.stub.Predict(tfrequest)
            datadef = prediction_pb2.DefaultData(
                tftensor=result.outputs[self.model_output])
            return prediction_pb2.SeldonMessage(data=datadef)
Пример #2
0
def test_proto_tftensor_to_array():
    names = ["a", "b"]
    array = np.array([[1, 2], [3, 4]])
    datadef = prediction_pb2.DefaultData(names=names,
                                         tftensor=tf.make_tensor_proto(array))
    array2 = scu.grpc_datadef_to_array(datadef)
    assert array.shape == array2.shape
    assert np.array_equal(array, array2)
Пример #3
0
    def _predict_grpc_data(self, request, default_data_type):
        tfrequest = predict_pb2.PredictRequest()

        # handle input
        if default_data_type == "tftensor":
            # For GRPC case, if we have a TFTensor message we can pass it directly
            tfrequest.inputs[self.model_input].CopyFrom(request.data.tftensor)
        else:
            data_arr = grpc_datadef_to_array(request.data)
            tfrequest.inputs[self.model_input].CopyFrom(
                tf.make_tensor_proto(data_arr.tolist(), shape=data_arr.shape)
            )

        # handle prediction
        tfresponse = self._handle_grpc_prediction(tfrequest)

        # handle result
        datadef = prediction_pb2.DefaultData(
            tftensor=tfresponse.outputs[self.model_output]
        )

        return prediction_pb2.SeldonMessage(data=datadef)