2017-01-06 7 views
0

TensorFlow Servingを使用してモデルをロードし、Java gRPCクライアントを実装しました。TensorFlow Serverがクライアントのタイムアウト時間内に接続を終了します

通常、小さなデータの場合に機能します。しかし、より大きなバッチサイズを要求し、データがほぼ1〜2Mである場合、サーバーは接続を閉じ、内部エラーを迅速にスローします。

https://github.com/tensorflow/serving/issues/284でこれを追跡する問題もあります。 above issueに見られるよう

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

、この4、MIBのデフォルトの最大メッセージサイズを超えるメッセージによって引き起こされました。大きなメッセージの受信者は、より大きなサイズを明示的に許可するか、送信者がより小さいメッセージを送信する必要があります。

gRPCは大容量のメッセージ(100s MB)でも問題ありませんが、アプリケーションは頻繁にはありません。最大メッセージサイズは、大規模なメッセージを受け入れる準備ができているアプリケーションでのみ許可するために設定されています。

+0

メッセージサイズを大きくするには、クライアント側の制限を引き上げる必要があります。 – tobe

関連する問題