Модель подачи OpenFaaS с использованием обслуживания Tensorflow
Я хотел бы служить модели Tensorfow с использованием OpenFaaS. По сути, я бы хотел вызвать функцию "serve" таким образом, чтобы tensorflow serving
собирается выставить мою модель.
OpenFaaS правильно работает в Kubernetes, и я могу вызывать функции через curl
или из UI
,
Я использовал инкубатор-колбу в качестве примера, но я продолжаю получать 502 Bad Gateway
все время.
Проект OpenFaaS выглядит следующим образом
serve/
- Dockerfile
stack.yaml
Внутренний Dockerfile
является следующим
FROM tensorflow/serving
RUN mkdir -p /home/app
RUN apt-get update \
&& apt-get install curl -yy
RUN echo "Pulling watchdog binary from Github." \
&& curl -sSLf https://github.com/openfaas-incubator/of-watchdog/releases/download/0.4.6/of-watchdog > /usr/bin/fwatchdog \
&& chmod +x /usr/bin/fwatchdog
WORKDIR /root/
# remove unecessery logs from S3
ENV TF_CPP_MIN_LOG_LEVEL=3
ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
ENV AWS_REGION=${AWS_REGION}
ENV S3_ENDPOINT=${S3_ENDPOINT}
ENV fprocess="tensorflow_model_server --rest_api_port=8501 \
--model_name=${MODEL_NAME} \
--model_base_path=${MODEL_BASE_PATH}"
# Set to true to see request in function logs
ENV write_debug="true"
ENV cgi_headers="true"
ENV mode="http"
ENV upstream_url="http://127.0.0.1:8501"
# gRPC tensorflow serving
# EXPOSE 8500
# REST tensorflow serving
# EXPOSE 8501
RUN touch /tmp/.lock
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
CMD [ "fwatchdog" ]
stack.yaml
файл выглядит следующим образом
provider:
name: faas
gateway: https://gateway-url:8080
functions:
serve:
lang: dockerfile
handler: ./serve
image: repo/serve-model:latest
imagePullPolicy: always
Я строю образ с faas-cli build -f stack.yaml
а затем я помещаю его в свой реестр докеров с faas-cli push -f stack.yaml
,
Когда я выполню faas-cli deploy -f stack.yaml -e AWS_ACCESS_KEY_ID=...
я получил Accepted 202
и это правильно отображается среди моих функций. Теперь я хочу призвать tensorflow serving
на модели, которую я указал в моем ENV
,
Я пытаюсь заставить его работать, используя curl
в этом случае
curl -d '{"inputs": ["1.0", "2.0", "5.0"]}' -X POST https://gateway-url:8080/function/deploy-model/v1/models/mnist:predict
но я всегда получаю 502 Bad Gateway
,
У кого-нибудь есть опыт работы с OpenFaaS и Tensorflow Serving? заранее спасибо
PS
Если я бегу tensorflow serving
без of-watchdog
(в основном без openfaas), модель обслуживается правильно.
0 ответов
Разработка ссылки, упомянутой @viveksyngh.
tenorflow-serve-openfaas:
Пример упаковки TensorFlow Serving с OpenFaaS для развертывания и управления через OpenFaaS с автоматическим масштабированием, масштабированием с нуля и разумной конфигурацией для Kubernetes.
Этот пример был адаптирован из: https://www.tensorflow.org/serving
Предварительные требования:
OpenFaaS
OpenFaaS CLI
Докер
Инструкции:
Клонировать репо
$ mkdir -p ~/dev/
$ cd ~/dev/
$ git clone https://github.com/alexellis/tensorflow-serving-openfaas
Клонируйте образец модели и скопируйте ее в контекст сборки функции.
$ cd ~/dev/tensorflow-serving-openfaas
$ git clone https://github.com/tensorflow/serving
$ cp -r serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu ./ts-serve/saved_model_half_plus_two_cpu
Изменить имя пользователя Docker Hub
Вам необходимо отредактировать файл stack.yml и заменить alexellis2 своей учетной записью Docker Hub.
Создайте образ функции
$ faas-cli build
Теперь у вас должен быть образ Docker в вашей локальной библиотеке, который вы можете развернуть в кластере с помощью faas-cli up.
Протестируйте функцию локально
Все образы OpenFaaS можно запускать автономно без установленного OpenFaaS, давайте проведем быстрый тест, но замените alexellis2 своим именем.
$ docker run -p 8081:8080 -ti alexellis2/ts-serve:latest
Теперь в другом терминале:
$ curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://127.0.0.1:8081/v1/models/half_plus_two:predict
{
"predictions": [2.5, 3.0, 4.5
]
}
From here you can run faas-cli up and then invoke your function from the OpenFaaS UI, CLI or REST API.
$ export OPENFAAS_URL=http://127.0.0.1:8080
$ curl -d '{"instances": [1.0, 2.0, 5.0]}' $OPENFAAS_URL/function/ts-serve/v1/models/half_plus_two:predict
{
"predictions": [2.5, 3.0, 4.5
]
}