隨着機器學習應用的普及,改善其開發和部署平臺對於提高機器學習應用的應用開發、測試以及上線效率提升非常關鍵,目前在看很多家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部署,你可以嘗試下咯~
下一篇會嘗試如何將一個簡單的訓練模型,打成鏡像,然後丟在集羣裏去訓練。