Heroku Dyno Cra sh после того, как контейнер Tensorflow Serving входит в цикл событий - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь развернуть мою модель Tensorflow, используя Docker, Tensorflow Serving и Heroku. Все идет хорошо, но когда сервировочный контейнер TF заканчивает инициализацию (когда он выводит «Ввод события l oop»), Heroku Web Dyno внезапно падает. Затем он перезапускается и пытается снова, но когда он достигает события L oop снова, он падает. В третий раз Heroku просто никогда больше не раскручивает динамо.

Во-первых, я просто развертываю образ, без проблем:

C:\Users\whitm\Desktop\CodeProjects\deep-deblurring-serving>heroku container:release web
Releasing images web to deep-deblurring-serving... done

C:\Users\whitm\Desktop\CodeProjects\deep-deblurring-serving>heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): /usr/bin/tf_serving_entrypoint.sh (1)
web.1: starting 2020/04/10 15:36:38 -0400 (~ 6s ago)

После одной минуты инициализации (Когда порция достигает событие l oop) происходит сбой динамо:

2020-04-10T19:36:53.234387+00:00 app[web.1]: [evhttp_server.cc : 238] NET_LOG: Entering the event loop ...
2020-04-10T19:36:53.234389+00:00 app[web.1]: 2020-04-10 19:36:53.234341: I tensorflow_serving/model_servers/server.cc:378] Exporting HTTP/REST API at:localhost:8501 ..
.
2020-04-10T19:37:46.597354+00:00 heroku[web.1]: State changed from starting to crashed
2020-04-10T19:37:46.602976+00:00 heroku[web.1]: State changed from crashed to starting

Затем Heroku автоматически перезапускает его.

C:\Users\whitm\Desktop\CodeProjects\deep-deblurring-serving>heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): /usr/bin/tf_serving_entrypoint.sh (1)
web.1: restarting 2020/04/10 15:37:46 -0400 (~ 45s ago)

Цикл продолжается три раза, последний останавливается, Heroku останавливается перезапуск dyno:

C:\Users\whitm\Desktop\CodeProjects\deep-deblurring-serving>heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): /usr/bin/tf_serving_entrypoint.sh (1)
web.1: crashed 2020/04/10 15:38:53 -0400 (~ 3m ago)

Это не проблема с контейнером, он локально работает как шарм, достигает события l oop и начинает прослушивать входящие запросы. Я могу сделать запрос без проблем. Так что проблема в Героку, но я не знаю, что происходит. Я чувствую, что это связано с Heroku интерпретировать контейнер как неотвечающее приложение? Я не знаю. В худшем случае, я не могу S SH в контейнер, если динамометрический состав не находится в состоянии «работа», это состояние никогда не достигается, потому что он падает во время инициализации.

Есть последнее, что нужно Контейнер использует 448 МБ оперативной памяти локально, а свободные Dynos Heroku имеют 500 МБ. Я думаю, что происходит сбой из-за памяти, но, опять же, я не могу проверить, что происходит.

Что я могу Что, где я могу увидеть?

Заранее спасибо!

PD: Я пытался запустить более легкую модель, которая локально использует 20 МБ ОЗУ, но результат был таким же на Heroku, Dyno. падает.

1 Ответ

0 голосов
/ 11 апреля 2020

Я решаю проблему. Это было вызвано несоответствием Контейнерного порта. По сути, Tensorflow Serving пытался использовать порт 8501 по умолчанию для остальных API, но на самом деле Heroku назначил другой порт для отображения контейнера. Решением было сообщить серверу модели tenorFlow и обновить файл /usr/bin/tf_serving_entrypoint.sh, чтобы использовать порты, назначенные Heroku.

Это новый файл Docker:

FROM tensorflow/serving
LABEL maintainer="Whitman Bohorquez" description="Build tf serving based image. This repo must be used as build context"
COPY / /
RUN apt-get update && apt-get install -y git && git reset --hard
ENV MODEL_NAME=deblurrer MODEL_BASE_PATH=/models

RUN echo '#!/bin/bash \n\n\
tensorflow_model_server \
--rest_api_port=$PORT \
--model_name=${MODEL_NAME} \
--model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME} \
"$@"' > /usr/bin/tf_serving_entrypoint.sh \
&& chmod +x /usr/bin/tf_serving_entrypoint.sh

# CMD is required to run on Heroku
CMD ["/usr/bin/tf_serving_entrypoint.sh"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...