随着机器学习应用的普及,改善其开发和部署平台对于提高机器学习应用的应用开发、测试以及上线效率提升非常关键,目前在看很多家AI企业正在研发其自身的深度学习PaaS平台,Kubernetes作为容器编排的入口,毫无疑问是最应该被支持的。值得高兴的是,Nvidia官方以及在Github上说明如何将自家Nvidia-docker2工具和Kubernetes结合的方案,本文结合前一篇博客,做了一个简单的用例,使得我们在Kubernetes集群中可以使用GPU的运算能力,顺便为我司灵雀云做个小广告,我们PaaS平台已经在客户的生产环境部署了深度学习的应用。
前提
- Node节点安装了Nvidia 的Driver
- Node节点安装了nvidia-docker2工具
- 修改
/etc/docker/daemon.json
,修改默认的容器运行时 - NVIDIA drivers ~= 361.93
- Kubernetes version = 1.11
具体请参考我的上一篇内容,如何低成本的在Docker中运行TensorFlow。
集群的修改
部署了GPU的所有Nodes,/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
增加如下的修改:
Environment="KUBELET_EXTRA_ARGS=--feature-gates=DevicePlugins=true"
然后重启kubelete:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
接着需要创建一个Daemonset
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.11/nvidia-device-plugin.yml
That’s All!
测试下
好了,我们现在在master节点中,部署下测试Pod,yaml文件如下:
vi hello.yaml
piVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
selector:
matchLabels:
app: hello
tier: backend
track: stable
replicas: 1
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "tensorflow/tensorflow:latest-gpu"
ports:
- name: tcp
containerPort: 8888
---
kind: Service
apiVersion: v1
metadata:
name: hello
spec:
type: NodePort
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
nodePort: 30011
targetPort: 8888
kubectl create -f hello.yaml
服务nodeport部署,你可以尝试下咯~
下一篇会尝试如何将一个简单的训练模型,打成镜像,然后丢在集群里去训练。