在TF服务示例中如何理解gRPC从客户端发出的并发请求?

问题描述 投票:0回答:1

背景

根据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个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.