Exemplo n.º 1
0
def test_model_template_app_grpc_tags(tracing):
    with start_microservice(
        join(dirname(__file__), "model-template-app"), tracing=tracing, grpc=True
    ):
        data = np.array([[1, 2]])
        datadef = prediction_pb2.DefaultData(
            tensor=prediction_pb2.Tensor(shape=data.shape, values=data.flatten())
        )

        meta = prediction_pb2.Meta()
        json_format.ParseDict({"tags": {"foo": "bar"}}, meta)

        request = prediction_pb2.SeldonMessage(data=datadef, meta=meta)
        channel = grpc.insecure_channel("0.0.0.0:5000")
        stub = prediction_pb2_grpc.ModelStub(channel)
        response = stub.Predict(request=request)
        assert response.data.tensor.shape[0] == 1
        assert response.data.tensor.shape[1] == 2
        assert response.data.tensor.values[0] == 1
        assert response.data.tensor.values[1] == 2

        assert response.meta.tags["foo"].string_value == "bar"
Exemplo n.º 2
0
def test_model_template_app_grpc(tracing):
    with start_microservice(join(dirname(__file__), "model-template-app"),
                            tracing=tracing,
                            grpc=True):
        data = np.array([[1, 2]])
        datadef = prediction_pb2.DefaultData(tensor=prediction_pb2.Tensor(
            shape=data.shape, values=data.flatten()))
        request = prediction_pb2.SeldonMessage(data=datadef)
        channel = grpc.insecure_channel("0.0.0.0:5000")
        stub = prediction_pb2_grpc.ModelStub(channel)
        response = stub.Predict(request=request)
        assert response.data.tensor.shape[0] == 1
        assert response.data.tensor.shape[1] == 2
        assert response.data.tensor.values[0] == 1
        assert response.data.tensor.values[1] == 2

        arr = np.array([1, 2])
        datadef = prediction_pb2.DefaultData(
            tensor=prediction_pb2.Tensor(shape=(2, 1), values=arr))
        request = prediction_pb2.SeldonMessage(data=datadef)
        feedback = prediction_pb2.Feedback(request=request, reward=1.0)
        response = stub.SendFeedback(request=request)
Exemplo n.º 3
0
def test_model_template_app_grpc_metrics(microservice):
    data = np.array([[1, 2]])
    datadef = prediction_pb2.DefaultData(
        tensor=prediction_pb2.Tensor(shape=data.shape, values=data.flatten())
    )

    meta = prediction_pb2.Meta()
    json_format.ParseDict(
        {"metrics": [{"key": "mygauge", "type": "GAUGE", "value": 100}]}, meta
    )

    request = prediction_pb2.SeldonMessage(data=datadef, meta=meta)
    channel = grpc.insecure_channel("0.0.0.0:5000")
    stub = prediction_pb2_grpc.ModelStub(channel)
    response = retry_method(stub.Predict, kwargs=dict(request=request))
    assert response.data.tensor.shape[0] == 1
    assert response.data.tensor.shape[1] == 2
    assert response.data.tensor.values[0] == 1
    assert response.data.tensor.values[1] == 2

    assert response.meta.metrics[0].key == "mygauge"
    assert response.meta.metrics[0].value == 100
Exemplo n.º 4
0
def run_predict(args):
    contract = json.load(open(args.contract, 'r'))
    contract = unfold_contract(contract)
    feature_names = [feature["name"] for feature in contract["features"]]

    REST_url = "http://" + args.host + ":" + str(args.port) + "/predict"

    for i in range(args.n_requests):
        batch = generate_batch(contract, args.batch_size, 'features')
        if args.prnt:
            print('-' * 40)
            print("SENDING NEW REQUEST:")

        if not args.grpc and not args.fbs:
            REST_request = gen_REST_request(batch,
                                            features=feature_names,
                                            tensor=args.tensor)
            if args.prnt:
                print(REST_request)

            t1 = time()
            response = requests.post(REST_url,
                                     data={
                                         "json": json.dumps(REST_request),
                                         "isDefault": True
                                     })
            t2 = time()
            jresp = response.json()

            if args.prnt:
                print("RECEIVED RESPONSE:")
                print(jresp)
                print()
                print("Time " + str(t2 - t1))
        elif args.grpc:
            GRPC_request = gen_GRPC_request(batch,
                                            features=feature_names,
                                            tensor=args.tensor)
            if args.prnt:
                print(GRPC_request)

            channel = grpc.insecure_channel('{}:{}'.format(
                args.host, args.port))
            stub = prediction_pb2_grpc.ModelStub(channel)
            response = stub.Predict(GRPC_request)

            if args.prnt:
                print("RECEIVED RESPONSE:")
                print(response)
                print()
        elif args.fbs:
            import socket
            import struct
            from seldon_core.tester_flatbuffers import NumpyArrayToSeldonRPC, SeldonRPCToNumpyArray
            data = NumpyArrayToSeldonRPC(batch, feature_names)
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((args.host, args.port))
            totalsent = 0
            MSGLEN = len(data)
            print("Will send", MSGLEN, "bytes")
            while totalsent < MSGLEN:
                sent = s.send(data[totalsent:])
                if sent == 0:
                    raise RuntimeError("socket connection broken")
                totalsent = totalsent + sent
            data = s.recv(4)
            obj = struct.unpack('<i', data)
            len_msg = obj[0]
            data = s.recv(len_msg)
            arr = SeldonRPCToNumpyArray(data)
            print(arr)
Exemplo n.º 5
0
def run_send_feedback(args):
    contract = json.load(open(args.contract, 'r'))
    contract = unfold_contract(contract)
    feature_names = [feature["name"] for feature in contract["features"]]
    response_names = [feature["name"] for feature in contract["targets"]]

    REST_url = "http://" + args.host + ":" + str(args.port) + "/send-feedback"

    for i in range(args.n_requests):
        batch = generate_batch(contract, args.batch_size, 'features')
        response = generate_batch(contract, args.batch_size, 'targets')
        if args.prnt:
            print('-' * 40)
            print("SENDING NEW REQUEST:")

        if not args.grpc and not args.fbs:
            REST_request = gen_REST_request(batch,
                                            features=feature_names,
                                            tensor=args.tensor)
            REST_response = gen_REST_request(response,
                                             features=response_names,
                                             tensor=args.tensor)
            reward = 1.0
            REST_feedback = {
                "request": REST_request,
                "response": REST_response,
                "reward": reward
            }
            if args.prnt:
                print(REST_feedback)

            t1 = time()
            response = requests.post(REST_url,
                                     data={"json": json.dumps(REST_feedback)})
            t2 = time()

            if args.prnt:
                print("Time " + str(t2 - t1))
                print(response)
        elif args.grpc:
            GRPC_request = gen_GRPC_request(batch,
                                            features=feature_names,
                                            tensor=args.tensor)
            GRPC_response = gen_GRPC_request(response,
                                             features=response_names,
                                             tensor=args.tensor)
            reward = 1.0
            GRPC_feedback = prediction_pb2.Feedback(request=GRPC_request,
                                                    response=GRPC_response,
                                                    reward=reward)

            if args.prnt:
                print(GRPC_feedback)

            channel = grpc.insecure_channel('{}:{}'.format(
                args.host, args.port))
            stub = prediction_pb2_grpc.ModelStub(channel)
            response = stub.SendFeedback(GRPC_feedback)

            if args.prnt:
                print("RECEIVED RESPONSE:")
                print()