文档

GPU Device-Plugin相关操作

更新时间:

GPU设备插件(GPU Device-Plugin)是Kubernetes集群中用于管理每个节点的GPU的组件,它使得Kubernetes能够更方便、高效地利用GPU资源。本文介绍在独占GPU调度场景下,如何对节点的GPU Device-Plugin进行重启和GPU设备隔离等操作,以及如何查看和更新Device-Plugin版本。

GPU Device-Plugin重启

在ACK的独占GPU调度场景下,节点上GPU的设备上报的Device Plugin默认以一个Static Pod的形式部署,所以重启过程需要在目标节点上进行。具体操作如下:

mv /etc/kubernetes/manifests/nvidia-device-plugin.yml /etc/kubernetes/
# 等待几秒,旧Pod被清理的过程。
mv /etc/kubernetes/nvidia-device-plugin.yml /etc/kubernetes/manifests/

GPU设备隔离

重要

GPU设备隔离操作仅支持在nvidia-device-plugin的v0.9.1及以上版本中使用。如何查看nvidia-device-plugin的版本,请参见查看并更新Device-Plugin版本

在ACK的独占GPU调度场景下,出于某些原因(例如GPU设备故障等),您需要隔离节点上的某个GPU设备,ACK提供了一个机制可供您手动对节点上的某个设备进行隔离,以避免新的Kubernetes设备调度到这个设备上。具体的操作方式如下:

在目标节点/etc/nvidia-device-plugin/的目录下操作unhealthyDevices.json这个文件,如果此文件不存在,请新建此文件。unhealthyDevices.json的文件格式请按照以下JSON格式编排。

{
 "index": ["x", "x" ..],
 "uuid": ["xxx", "xxx" ..]
}

您可以根据个人偏好,在JSON中填写目标隔离设备的indexuuid(同一个设备只需填写任意一个),保存文件后即自动生效。

设置完成后,您可以通过查看Kubernetes Node上报的Resource中的nvidia.com/gpu资源的数量以查看隔离的效果。

查看并更新Device-Plugin版本

您在目标节点上/etc/kubernetes/manifests/nvidia-device-plugin.yml文件中查看的device-plugin的镜像Tag,其所代表的版本号即为Device-Plugin的版本。

目前ACK所支持的最新的版本为v0.9.1-3f942982-aliyun,如需将节点中的nvidia-device-plugin升级至最新版本,请将nvidia-device-plugin的static的YAML文件即/etc/kubernetes/manifests/nvidia-device-plugin.yml更新为以下内容:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  labels:
    component: nvidia-device-plugin
  name: nvidia-device-plugin
  namespace: kube-system
spec:
  priorityClassName: system-node-critical
  hostNetwork: true
  containers:
  - image: registry-<REGION-ID>-vpc.ack.aliyuncs.com/acs/k8s-device-plugin:v0.9.1-3f942982-aliyun
    # Image中的<REGION-ID>需要替换为您节点所在的阿里云的Region Id,例如cn-beijing、cn-hangzhou等。
    name: nvidia-device-plugin-ctr
    args: ["--fail-on-init-error=false","--pass-device-specs=true","--device-id-strategy=index"]
    livenessProbe:
      httpGet:
        path: /health
        port: 30080
      initialDelaySeconds: 10
      timeoutSeconds: 2
      periodSeconds: 5
      failureThreshold: 3
    resources:
      limits:
        memory: "200Mi"
        cpu: "500m"
    env:
      - name: DP_DISABLE_HEALTHCHECKS
        value: all
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["ALL"]
    volumeMounts:
      - name: device-plugin
        mountPath: /var/lib/kubelet/device-plugins
      - name: device-plugin-config
        mountPath: /etc/nvidia-device-plugin
  volumes:
    - name: device-plugin
      hostPath:
        path: /var/lib/kubelet/device-plugins
    - name: device-plugin-config
      hostPath:
        path: /etc/nvidia-device-plugin
        type: DirectoryOrCreate

相关文档

如遇到GPU节点相关问题,请参见自助诊断GPU节点问题GPU FAQ

如需了解共享GPU调度的相关信息,请参见共享GPU调度概述

  • 本页导读 (1)
文档反馈