2017-01-06 3 views
0

TensorFlow Serving을 사용하여 모델을로드하고 Java gRPC 클라이언트를 구현했습니다.TensorFlow Server는 클라이언트 시간 초과 내에서 연결을 닫습니다.

정상적인 작은 데이터를 위해 작동합니다. 그러나 더 큰 배치 크기로 요청하고 데이터가 거의 1 ~ 2M이면 서버는 연결을 닫고 내부 오류를 신속하게 던집니다.

또한이 문제를 추적하기 위해 https://github.com/tensorflow/serving/issues/284에서 문제를 열었습니다.

Job aborted due to stage failure: Task 47 in stage 7.0 failed 4 times, most recent failure: Lost task 47.3 in stage 7.0 (TID 5349, xxx) 
io.grpc.StatusRuntimeException: INTERNAL: HTTP/2 error code: INTERNAL_ERROR 
Received Rst Stream 
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:230) 
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:211) 
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:144) 
at tensorflow.serving.PredictionServiceGrpc$PredictionServiceBlockingStub.predict(PredictionServiceGrpc.java:160) 

...... 

at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371) 
at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:189) 
at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:64) 
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73) 
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41) 
at org.apache.spark.scheduler.Task.run(Task.scala:91) 
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:219) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

Driver stacktrace: 

답변

1

로는 above issue에서 알 수 는, 이것은 4 MIB 정보 디폴트 최대 메시지 크기를 초과하는 메시지가 발생 하였다. 더 큰 메시지의 수신자는 더 큰 크기를 명시 적으로 허용하거나 송신자가 더 작은 메시지를 보내야합니다.

gRPC는 더 큰 메시지 (100s MB)에서도 문제가 없지만 응용 프로그램은 자주 사용하지 않습니다. 최대 메시지 크기는 허용 할 준비가 된 응용 프로그램에서만 "큰"메시지를 허용합니다.

+0

메시지 크기가 커지면 클라이언트 쪽에서 제한을 늘려야합니다. – tobe