在Kubernetes集羣中使用GPU用於機器學習

隨着機器學習應用的普及,改善其開發和部署平臺對於提高機器學習應用的應用開發、測試以及上線效率提升非常關鍵,目前在看很多家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部署,你可以嘗試下咯~
這裏寫圖片描述

下一篇會嘗試如何將一個簡單的訓練模型,打成鏡像,然後丟在集羣裏去訓練。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章