Модель подачи OpenFaaS с использованием обслуживания Tensorflow - PullRequest
0 голосов
/ 18 февраля 2019

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

1 Ответ

0 голосов
/ 17 мая 2019

Разработка ссылки, упомянутой @ viveksyngh.

tennflow-Обслуживание-openfaas:

Пример упаковки обслуживания TensorFlow с 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 cможно запустить автономно без установленного 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
    ]
}
...