深度学习模型如何服务化是一个机器学习领域工程方面的热点,现在业内一个比较主流的做法是将模型和模型的服务环境做成docker image。这样做的一个好处是屏蔽了模型对环境的依赖,因为深度学习模型在服务的时候可能对各种框架版本和依赖库有要求,解决运行环境问题一直是个令人头痛的事情。
将模型通过docker服务化后意味着深度学习模型可以在各种环境使用,比如云端直接通过k8s调度拉起,或者在一些IOT领域,比方说一些智能摄像头也可以通过拉起镜像服务的方式使用模型。
看来一些网上的资料,发现大部分资料没有讲得很清楚如何容器化部署TF模型,今天把我自己的学习笔记分享下。
模型部署分4步,首先要准备一个TensorFlow模型,还要准备一个docker环境,接着构建自己的docker服务,然后发送请求给docker服务做测试。
(1)准备TensorFlow模型
然后找到以下这个路径下的叫“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/
安装完成后可以在Terminal中输入docker -v,返回版本号信息说明安装完成:
(3)构建TensorFlow模型服务
首先要从docker仓库拉取TensorFlow Serving
docker pull tensorflow/serving
构建模型服务,命令如下:
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]