Java Tensorflow服务预测客户端太慢

Java Tensorflow服务预测客户端太慢,tensorflow,object-detection,grpc,tensorflow-serving,Tensorflow,Object Detection,Grpc,Tensorflow Serving,我创建了一个tensorflow对象检测模型,并使用tensorflow服务为其提供服务。我创建了一个python客户端来测试服务模型,接收所有预测大约需要40毫秒的时间 t1 = datetime.datetime.now() result = stub.Predict(request, 60.0) # 60 secs timeout t2 = datetime.datetime.now() print ((t2 - t1).microseconds / 1000) 现在,我的问题是,当我

我创建了一个
tensorflow
对象检测模型,并使用
tensorflow
服务为其提供服务。我创建了一个python客户端来测试服务模型,接收所有预测大约需要40毫秒的时间

t1 = datetime.datetime.now()
result = stub.Predict(request, 60.0)  # 60 secs timeout
t2 = datetime.datetime.now()
print ((t2 - t1).microseconds / 1000)
现在,我的问题是,当我在
java
上执行同样的操作时,需要花费450到500毫秒的时间(大约10倍)

ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 9000)
        .usePlaintext(true)
        .build();
PredictionServiceGrpc.PredictionServiceBlockingStub stub = PredictionServiceGrpc.newBlockingStub(channel);

......

Instant pre = Instant.now();
Predict.PredictResponse response = stub.predict(request);
Instant curr = Instant.now();
System.out.println("time " + ChronoUnit.MILLIS.between(pre,curr));

有人能帮我解决这个问题吗?提前感谢。

实际问题是


我通过网络发送所有的图像像素(这是个坏主意)。现在,将输入更改为编码图像可以加快速度。

实际问题是


我通过网络发送所有的图像像素(这是个坏主意)。现在,将输入更改为编码图像可以加快速度。

Java作为一种语言最初非常缓慢。只有在它“升温”后,它才会变得非常快。如果这是您的程序中的第一个gRPC调用,我很容易相信它和您提到的一样慢,因为那样Java就不会“温暖”。后续调用应该会更快,最终(在JIT编译足够多之后),我希望它们会比Python快。Java作为一种语言最初非常慢。只有在它“升温”后,它才会变得非常快。如果这是您的程序中的第一个gRPC调用,我很容易相信它和您提到的一样慢,因为那样Java就不会“温暖”。后续调用应该更快,最终(在JIT编译足够多之后)我希望它们比Python更快。