0

TensorFlow Serving を使用してモデルをロードし、Java gRPC クライアントを実装しました。

通常、小さなデータで機能します。しかし、より大きなバッチ サイズでリクエストし、データがほぼ 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:
4

1 に答える 1

1

上記の問題でわかるように、これはメッセージがデフォルトの最大メッセージ サイズである 4 MiB を超えたことが原因でした。より大きなメッセージの受信者は、より大きなサイズを明示的に許可するか、送信者がより小さなメッセージを送信する必要があります。

gRPC はより大きなメッセージ (100 MB であっても) には問題ありませんが、アプリケーションはしばしばそうではありません。最大メッセージ サイズは、「大きな」メッセージを受け入れる準備ができているアプリケーションでのみ許可するように設定されています。

于 2017-01-06T19:58:40.387 に答える