【发布时间】:2019-02-18 15:30:52
【问题描述】:
我想通过使用 OpenFaaS 来服务于 Tensorfow 模型。基本上,我想以tensorflow serving 将公开我的模型的方式调用“服务”函数。
OpenFaaS 在 Kubernetes 上正常运行,我可以通过 curl 或 UI 调用函数。
我以the incubator-flask 为例,但我一直收到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 将其推送到我的 docker 注册表。
当我执行faas-cli deploy -f stack.yaml -e AWS_ACCESS_KEY_ID=... 时,我得到Accepted 202,它在我的函数中正确显示。现在,我想在我在ENV 中指定的模型上调用tensorflow serving。
我尝试使其工作的方式是这样使用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 有经验吗?提前致谢
附言
如果我在没有of-watchdog 的情况下运行tensorflow serving(基本上没有openfaas 的东西),则模型会正确提供。
【问题讨论】:
-
是的!其实,作者是在我联系他后创建的 :) 确实很有帮助
标签: docker tensorflow kubernetes tensorflow-serving openfaas