可以看到这个文件夹其实主要包含的是关于GPU显卡的一些库、包和一些必要的可执行文件。这些文件实际上也是从宿主机上由nvidia-docker-plugin收集拷贝到该文件夹中的,用以提供给容器,方便容器对于GPU的使用。
kubernetes与GPUkubernetes1.3已经引入了GPU调度支持,但是目前是实验性质。
tensorflow服务Serving Inception Model with TensorFlow Serving and Kubernetes中对于tensorflow服务与kubernetes结合使用的方式进行了介绍。
其基本的工作方式是首先根据已经训练好的模型,制作成可以对外提供服务的镜像inception_serving。而后使用该镜像创建rc,并对应建立service。
$ kubectl get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE inception-controller inception-container gcr.io/tensorflow-serving/inception worker=inception-pod 3 20s $ kubectl get svc NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE inception-service 10.15.242.244 146.148.88.232 9000/TCP worker=inception-pod 3m $ kubectl describe svc inception-service Name: inception-service Namespace: default Labels: <none> Selector: worker=inception-pod Type: LoadBalancer IP: 10.15.242.244 LoadBalancer Ingress: 146.148.88.232 Port: <unnamed> 9000/TCP NodePort: <unnamed> 32006/TCP Endpoints: 10.12.2.4:9000,10.12.4.4:9000,10.12.4.5:9000 Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 4m 3m 2 {service-controller } CreatingLoadBalancer Creating load balancer 3m 2m 2 {service-controller } CreatedLoadBalancer Created load balancer用户请求直接通过EXTERNAL_IP(146.148.88.232:9000)进行服务访问。当用户有请求到来时,kubernetes将请求分发给10.12.2.4:9000,10.12.4.4:9000,10.12.4.5:9000之一的pod,然后由该pod上提供实际的服务,从而返回结果。
这一过程本质上来说同提供web服务(如tomcat的服务)等是没有多大区别的。kubernetes可以很好的支持。