背景
深度学习模型如何服务化是一个机器学习领域工程方面的热点,如今业内一个比较主流的作法是将模型和模型的服务环境作成docker image。这样作的一个好处是屏蔽了模型对环境的依赖,由于深度学习模型在服务的时候可能对各类框架版本和依赖库有要求,解决运行环境问题一直是个使人头痛的事情。git
将模型经过docker服务化后意味着深度学习模型能够在各类环境使用,好比云端直接经过k8s调度拉起,或者在一些IOT领域,比方说一些智能摄像头也能够经过拉起镜像服务的方式使用模型。github
看来一些网上的资料,发现大部分资料没有讲得很清楚如何容器化部署TF模型,今天把我本身的学习笔记分享下。docker
详细流程
模型部署分4步,首先要准备一个TensorFlow模型,还要准备一个docker环境,接着构建本身的docker服务,而后发送请求给docker服务作测试。api
1.准备TensorFlow模型
能够直接clone这个项目:https://github.com/tensorflow/servingrestful
而后找到如下这个路径下的叫“saved_model_half_plus_two_cpu”这个模型,这个模型比较简单,就是将预测数据除以2再加2。举个例子,假设预测数据是5,那么预测结果是5/2+2=4.5框架
/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu
2.准备Docker环境
直接在这个地址下载:https://docs.docker.com/get-docker/curl
安装完成后能够在Terminal中输入docker -v,返回版本号信息说明安装完成:机器学习
3.构建TensorFlow模型服务
(1)首先要从docker仓库拉取TensorFlow Serving学习
docker pull tensorflow/serving
(2)构建模型服务测试
命令以下:
docker run -t --rm -p 8501:8501 -v "{model_path}:/models/half_plus_two" -e MODEL_NAME=half_plus_two tensorflow/serving &
-
其中{model_path}须要替换成步骤一中下载好的模型
-
-p表示端口号,8500是grpc通讯端口,8501是restful_api通讯端口
-
/models/half_plus_two表示把本地模型放到了docker中的/models/half_plus_two路径下
若是不报错,这个服务就顺利拉起来了。
4.测试docker服务
能够经过curl命令发送预测样本给已经部署好的docker服务,具体命令以下:
curl -d '{"instances": [1.0, 2.0, 5.0]}' -X POST http://localhost:8501/v1/models/half_plus_two:predict
预测样本是“instances": [1.0, 2.0, 5.0],预测结果以下,结果是正确的,每一个输入值都被除以2再加上2:
"predictions": [2.5, 3.0, 4.5]