Я пытаюсь отправить запрос 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()
, но безрезультатно. Любая помощь будет оценена.