1

我想通过使用 OpenFaaS 来服务 Tensorfow 模型。基本上,我想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 的经验吗?提前致谢

附言

如果我在tensorflow serving没有of-watchdog(基本上没有 openfaas 的东西)的情况下运行,则模型会正确提供。

4

1 回答 1

0

详细说明@viveksyngh 提到的链接。

张量流服务openfaas:

将 TensorFlow Serving 与 OpenFaaS 打包以通过 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
    ]
}
于 2019-05-17T09:06:04.567 回答