TensorFlow Serving和Kubernetes 服务Inception模型
2017-12-12 14:18
555 查看
参考:https://tensorflow.google.cn/serving/serving_inception
本教程演示如何使用在Docker容器中运行的TensorFlow Serving组件来服务TensorFlow初始模型,以及如何使用Kubernetes部署服务集群。
要了解更多关于TensorFlow Serving的信息,我们推荐TensorFlow Serving基本教程和TensorFlow Serving高级教程。
要了解有关TensorFlow初始模型的更多信息,我们推荐在TensorFlow in Inception。
第0部分展示了如何创建一个TensorFlow Serving Docker镜像用于部署
第1部分展示了如何在本地容器中运行图像。
第2部分展示了如何在Kubernetes中部署。
在正在运行的容器中,我们克隆,配置和构建TensorFlow服务示例代码。
接下来,我们可以使用这里的指令安装一个TensorFlow ModelServer和apt-get,或者使用下面的代码构建一个ModelServer二进制文件:
本教程的其余部分假定您在本地编译ModelServer,在这种情况下运行它的命令是
有用! 服务器成功分类你的猫的形象!
设置gcloud容器命令的默认群集并将群集凭据传递给kubectl。
首先我们使用Container Registry格式和我们的项目名称来标记$ USER / inception_serving图像,
接下来,我们将图像推送到注册表,
我们使用示例Kubernetes config inception_k8s.yaml创建它们。
要查看部署和窗格的状态,请执行以下操作:
要查看服务的状态:
可能需要一段时间才能启动并运行。
服务外部IP地址列在LoadBalancer Ingress旁边。
您已成功部署在Kubernetes服务的先启模式!
本教程演示如何使用在Docker容器中运行的TensorFlow Serving组件来服务TensorFlow初始模型,以及如何使用Kubernetes部署服务集群。
要了解更多关于TensorFlow Serving的信息,我们推荐TensorFlow Serving基本教程和TensorFlow Serving高级教程。
要了解有关TensorFlow初始模型的更多信息,我们推荐在TensorFlow in Inception。
第0部分展示了如何创建一个TensorFlow Serving Docker镜像用于部署
第1部分展示了如何在本地容器中运行图像。
第2部分展示了如何在Kubernetes中部署。
第0部分:创建一个Docker镜像
有关构建TensorFlow Serving Docker镜像的详细信息,请参阅通过Docker使用TensorFlow Serving。运行容器
我们使用Dockerfile.devel创建一个基于镜像的$ USER / tensorflow-serving-devel。 然后使用构建的图像在本地启动一个容器。$ docker build --pull -t $USER/tensorflow-serving-devel -f tensorflow_serving/tools/docker/Dockerfile.devel . # 或 $ docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel . # 或 $ docker build -t $USER/tensorflow-serving-devel . # 保存成Dockerfile文件 $ docker run --name=inception_container -it $USER/tensorflow-serving-devel # 或 将Dockerfile.devel中的内容保存成 Dockerfile docker build -t tensorflow-serving:v1 . git clone --recurse-submodules https://github.com/tensorflow/serving # serving下载到主机上 docker run -it -v /home/wu/serving:/serving tensorflow-serving:v1 /bin/bash # 使用-v 挂载到容器中 # 或 docker pull registry.cn-hangzhou.aliyuncs.com/781708249/tensorflow-serving:v1 # 已经配置好的tensorflow serving 从阿里镜像拉下来 git clone --recurse-submodules https://github.com/tensorflow/serving # serving下载到主机上 docker run -it -v /home/wu/serving:/serving registry.cn-hangzhou.aliyuncs.com/781708249/tensorflow-serving:v1 /bin/bash # 使用-v 挂载到容器中
在容器中克隆,配置和构建TensorFlow服务
注意:下面的所有bazel构建命令都使用标准-c选项标志。 要进一步优化构建,请参阅此处的说明。在正在运行的容器中,我们克隆,配置和构建TensorFlow服务示例代码。
root@c97d8e820ced:/# git clone --recurse-submodules https://github.com/tensorflow/serving # 从主机中挂载了serving 可以跳过这步 root@c97d8e820ced:/# cd serving/tensorflow root@c97d8e820ced:/serving/tensorflow# ./configure root@c97d8e820ced:/serving# cd .. root@c97d8e820ced:/serving# bazel build -c opt tensorflow_serving/example/...
接下来,我们可以使用这里的指令安装一个TensorFlow ModelServer和apt-get,或者使用下面的代码构建一个ModelServer二进制文件:
root@c97d8e820ced:/serving# bazel build -c opt tensorflow_serving/model_servers:tensorflow_model_server
本教程的其余部分假定您在本地编译ModelServer,在这种情况下运行它的命令是
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server。 但是,如果使用apt-get安装ModelServer,只需用
tensorflow_model_server替换该命令即可。
在容器中导出初始模型
在正在运行的容器中,我们运行inception_saved_model.py使用发布的Inception模型训练检查点导出初始模型。 而不是从头开始训练,我们使用训练有素的变量的现成检查点来恢复推理图并直接导出。root@c97d8e820ced:/serving# curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz root@c97d8e820ced:/serving# tar xzf inception-v3-2016-03-01.tar.gz root@c97d8e820ced:/serving# ls inception-v3 README.txt checkpoint model.ckpt-157585 root@c97d8e820ced:/serving# bazel-bin/tensorflow_serving/example/inception_saved_model --checkpoint_dir=inception-v3 --output_dir=/tmp/inception-export Successfully loaded model from inception-v3/model.ckpt-157585 at step=157585. Successfully exported model to /tmp/inception-export root@c97d8e820ced:/serving# ls /tmp/inception-export 1 root@c97d8e820ced:/serving# [Ctrl-p] + [Ctrl-q]
提交镜像进行部署
请注意,我们在上面的说明结束时从容器中分离出来,而不是终止它,因为我们要commit对用于Kubernetes部署的新镜像$ USER / inception_serving的所有更改。$ docker commit inception_container $USER/inception_serving $ docker stop inception_container
第1部分:在本地Docker容器中运行
我们使用构建的镜像在本地测试服务工作流程。$ docker run -it $USER/inception_serving
启动服务器
在容器中运行gRPC tensorflow_model_server。root@f07eec53fd95:/# cd serving root@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=9000 --model_name=inception --model_base_path=/tmp/inception-export &> inception_log & [1] 45
查询服务器
使用inception_client.py查询服务器。 客户端通过gRPC向服务器发送由命令行参数指定的图像,以便分类成对于ImageNet类别的人类可读描述。root@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/example/inception_client --server=localhost:9000 --image=/path/to/my_cat_image.jpg outputs { key: "classes" value { dtype: DT_STRING tensor_shape { dim { size: 1 } dim { size: 5 } } string_val: "tiger cat" string_val: "Egyptian cat" string_val: "tabby, tabby cat" string_val: "lynx, catamount" string_val: "Cardigan, Cardigan Welsh corgi" } } outputs { key: "scores" value { dtype: DT_FLOAT tensor_shape { dim { size: 1 } dim { size: 5 } } float_val: 9.5486907959 float_val: 8.52025032043 float_val: 8.05995368958 float_val: 4.30645561218 float_val: 3.93207240105 } } root@f07eec53fd95:/serving# exit
有用! 服务器成功分类你的猫的形象!
第2部分:在Kubernetes中部署
在本节中,我们使用第0部分中构建的容器镜像像在Google云端平台中部署带有Kubernetes的服务集群。Cloud项目登录
在这里,我们假定您已经创建并登录了一个名为tensorflow-serving的gcloud项目。gcloud auth login --project tensorflow-serving
创建一个容器集群
首先,我们创建一个Google Container Engine集群来进行服务部署。$ gcloud container clusters create inception-serving-cluster --num-nodes 5 Creating cluster inception-serving-cluster...done. Created [https://container.googleapis.com/v1/projects/tensorflow-serving/zones/us-central1-f/clusters/inception-serving-cluster]. kubeconfig entry generated for inception-serving-cluster. NAME ZONE MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS inception-serving-cluster us-central1-f 1.1.8 104.197.163.119 n1-standard-1 1.1.8 5 RUNNING
设置gcloud容器命令的默认群集并将群集凭据传递给kubectl。
$ gcloud config set container/cluster inception-serving-cluster $ gcloud container clusters get-credentials inception-serving-cluster Fetching cluster endpoint and auth data. kubeconfig entry generated for inception-serving-cluster.
上传Docker镜像
现在让我们将图片推送到Google Container Registry,以便我们可以在Google Cloud Platform上运行它。首先我们使用Container Registry格式和我们的项目名称来标记$ USER / inception_serving图像,
$ docker tag $USER/inception_serving gcr.io/tensorflow-serving/inception
接下来,我们将图像推送到注册表,
$ gcloud docker -- push gcr.io/tensorflow-serving/inception
创建Kubernetes部署和服务
部署包含3个由Kubernetes部署控制的inception_inference服务器副本。 Kubernetes Service与External Load Balancer一起向外部复制副本。我们使用示例Kubernetes config inception_k8s.yaml创建它们。
$ kubectl create -f tensorflow_serving/example/inception_k8s.yaml deployment "inception-deployment" created service "inception-service" created
要查看部署和窗格的状态,请执行以下操作:
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE inception-deployment 3 3 3 3 5s
$ kubectl get pods NAME READY STATUS RESTARTS AGE inception-deployment-bbcbc 1/1 Running 0 10s inception-deployment-cj6l2 1/1 Running 0 10s inception-deployment-t1uep 1/1 Running 0 10s
要查看服务的状态:
$ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE inception-service 10.239.240.227 104.155.184.157 9000/TCP 1m
可能需要一段时间才能启动并运行。
$ kubectl describe service inception-service Name: inception-service Namespace: default Labels: run=inception-service Selector: run=inception-service Type: LoadBalancer IP: 10.239.240.227 LoadBalancer Ingress: 104.155.184.157 Port: <unset> 9000/TCP NodePort: <unset> 30334/TCP Endpoints: <none> Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1m 1m 1 {service-controller } Normal CreatingLoadBalancer Creating load balancer 1m 1m 1 {service-controller } Normal CreatedLoadBalancer Created load balancer
服务外部IP地址列在LoadBalancer Ingress旁边。
查询模型
我们现在可以从本地主机的外部地址查询服务。$ bazel-bin/tensorflow_serving/example/inception_client --server=104.155.184.157:9000 --image=/path/to/my_cat_image.jpg outputs { key: "classes" value { dtype: DT_STRING tensor_shape { dim { size: 1 } dim { size: 5 } } string_val: "tiger cat" string_val: "Egyptian cat" string_val: "tabby, tabby cat" string_val: "lynx, catamount" string_val: "Cardigan, Cardigan Welsh corgi" } } outputs { key: "scores" value { dtype: DT_FLOAT tensor_shape { dim { size: 1 } dim { size: 5 } } float_val: 9.5486907959 float_val: 8.52025032043 float_val: 8.05995368958 float_val: 4.30645561218 float_val: 3.93207240105 } }
您已成功部署在Kubernetes服务的先启模式!
相关文章推荐
- tensorflow serving:bazel方式部署模型+docker方式部署模型及提供服务以及使用该服务介绍(总有一款适合你)
- Tensorflow Serving 模型部署和服务
- Tensorflow Serving 模型部署和服务
- TensorFlow Serving-TensorFlow 服务
- 使用Kubernetes和TensorFlow Serving将神经网络镜像分类进行弹性扩容
- 谷歌发布 TensorFlow Serving:机器学习模型应用于产品更方便
- tensorflow serving 服务部署与访问(Python + Java)
- 138、Tensorflow serving 实现模型的部署
- Docker使用tensorflow serving部署mnist模型
- 神经网络之Inception模型的实现(Python+TensorFlow)
- TensorFlow Serving在Kubernetes中的实践
- Win10下基于Docker使用tensorflow serving部署模型
- retrain tensorflow中InceptionV3模型
- 使用tensorflow serving 启动模型时,报如下错误:The TensorFlow library wasn't compiled to use SSE4.1 instructions
- docker + tensorflow serving 踩坑记录
- 谷歌推出TensorFlow Lattice,让机器学习模型适应总体趋势
- 浅尝TensorFlow on Kubernetes
- Keras TensorFlow教程:如何从零开发一个复杂深度学习模型
- 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集
- 谷歌发布 TensorFlow Serving