【问题标题】:How to understand the concurrency of requests from client-side by gRPC in the TF-Serving example?如何理解 TF-Serving 示例中 gRPC 来自客户端的请求的并发性?
【发布时间】:2020-02-13 04:32:32
【问题描述】:

背景

根据Serving a TensorFlow Model

mnist client中的节目是关于

与加载了 mnist 模型的 tensorflow_model_server 对话的客户端。

客户端下载mnist数据集的测试图片,查询服务

这样的测试图像得到预测,并计算推理错误率。

问题

我在理解 gRPC 客户端请求的并发性方面有些困难。

  1. Define concurrency

  2. Concurrency related code

  for _ in range(num_tests): # <==

    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'mnist'
    request.model_spec.signature_name = 'predict_images'
    image, label = test_data_set.next_batch(1)
    request.inputs['images'].CopyFrom(
        tf.make_tensor_proto(image[0], shape=[1, image[0].size]))

    result_counter.throttle() # <==

    result_future = stub.Predict.future(request, 5.0)  # 5 seconds
    result_future.add_done_callback(
        _create_rpc_callback(label[0], result_counter))

根据我的理解,上面的代码是在for循环中顺序执行的。 我已经阅读了有关条件变量、Python 锁定的帖子。由于我什至没有看到定义多个线程来发送请求,因此即使我将标志设置为例如 10,我也不认为代码与并发相关。(Define concurrency

如果我有一些误解,我可能会忽略 gRPC。

如果代码不是真正的并发,怎么弄对?

【问题讨论】:

    标签: multithreading tensorflow grpc tensorflow-serving condition-variable


    【解决方案1】:

    gRPC Python 使用后台线程从较低级别轮询消息。为了同时运行 RPC,您可以在线程中创建多个 RPC 期货。当任何 RPC 完成(由后台线程收集的结果)时,您的回调将被调用。

    https://github.com/grpc/grpc/blob/0b4a9d6ba0a60a1982d81da6bb6b730a5c443c44/src/python/grpcio/grpc/_channel.py#L1126

    希望这有帮助,请随时询问更多详细信息。

    【讨论】:

    • 感谢您的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2011-09-27
    • 2018-08-07
    • 2019-06-03
    • 2021-10-19
    • 2021-03-25
    相关资源
    最近更新 更多