Ошибка при использовании gRP C с контейнером Tensorflow Serving Docker на EC2 - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь отправить запрос gRP C в контейнер TF, обслуживающий Docker, работающий на экземпляре AWS EC2. Локальный запуск контейнера работает нормально, но отправка запроса экземпляру ec2 выдает ошибку:

_InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "failed to connect to all addresses"
debug_error_string = "{"created":"@1579191873.586895058","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":3941,"referenced_errors":[{"created":"@1579191873.586883203","description":"failed to connect to all addresses","file":"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc","file_line":393,"grpc_status":14}]}"

Я запускаю контейнер с

sudo docker run -p 8500:8500 -p 8501:8501 --mount type=bind,source=/home/ubuntu/tf_serving/models/zipnet,target=/models/zipnet -e MODEL_NAME=zipnet -t tensorflow/serving:latest --enable_batching &

и код для генерации запроса выглядит как это

from tensorflow_serving.apis import predict_pb2, prediction_service_pb2_grpc
import grpc

def prepare_grpc_request(model, sig, data):
    request = predict_pb2.PredictRequest()
    request.model_spec.name = model
    request.model_spec.signature_name = sig
    request.inputs['input_img'].CopyFrom(tf.make_tensor_proto(data, dtype=None))
    return request

model_name = 'zipnet'
signature_name = 'serving_default'

stub = prediction_service_pb2_grpc.PredictionServiceStub(grpc.insecure_channel('<ipv4 public ip>:8500'))

request = prepare_grpc_request(model_name, signature_name, batch)

result = stub.Predict(request, 120.0)

Это работает с localhost и локальным запуском контейнера. Контейнер должен прослушивать gRP C запросы на порт 8500, который открыт. Примечательно, что я могу без проблем выполнять запросы REST к контейнеру через порт 8501.

Я также пытался использовать grpc.secure_channel() с credentials = grpc.ssl_channel_credentials(), но безрезультатно. Любая помощь будет оценена.

...