随着机器学习应用的普及,改善其开发和部署平台对于提高机器学习应用的应用开发、测试以及上线效率提升非常关键,目前在看很多家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部署,你可以尝试下咯~
这里写图片描述

下一篇会尝试如何将一个简单的训练模型,打成镜像,然后丢在集群里去训练。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐