AI时代下,学习如何使用和管理GPU是基础入门技能,本文以常见的NVIDIA GPU为例,介绍在普通机器、Docker和Kubernetes等不同的环境下如何使用和管理GPU。
以常见的NVIDIA GPU为例,系统为Linux
安装对应的GPU Driver(GPU驱动),以及CUDA Toolkit
需额外安装nvidia-container-toolkit,配置docker使用nvidia-runtime
需额外安装对应的device-plugin,使得kubelet能感知到节点上的GPU设备
备注:一般在k8s环境,直接使用gpu-operator方案安装
gpu-device-plugin 以DaemonSet方式运行到集群各个节点,进行资源感知。感知节点上的GPU设备,上报到kube-apiserver,让K8S能够对节点上GPU设备进行管理。
gpu-exporter 同样以DaemonSet方式运行在集群各个节点上,进行监控数据采集与上报。以Prometheus支持的格式,采集并上报GPU设备支持的metrics监控指标,用于监控GPU。
NVIDIA_VISIBLE_DEVICES
中,然后将信息返回给节点kubelet组件一般由对应GPU厂商提供,比如NVIDIA的k8s-device-plugin
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.15.0/deployments/static/nvidia-device-plugin.yml
kubectl get pod -l app=nvidia-device-plugin-daemonset
device-plugin 启动后,将感知节点上GPU设备并上报给kubelet,由kubelet提交到kube-apiserver
可查看Node的资源信息,包括Capacity跟Allocatable信息,即节点总容量和节点可分配容量
kubectl describe node x.x.x.x | grep capacity
可查看节点的Capacity跟,其中 nvidia.com/gpu:8,即表示该节点的GPU卡数
nvidia.com/gpu: 8 #代表该节点的GPU卡数
DCGM Exporter(Data Center GPU Manager,DCGM),是NVIDIA推出的数据中心GPU监控管理器,可用于集群NVIDIA GPU各种性能指标和状态信息的监控,包括不限于GPU使用率、显存使用、功率、温度等
通过DCGM exporter,结合Prometheus可输出GPU监控信息,再搭配Grafana可构建丰富的GPU监控仪表大盘。
helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts #添加NVIDIA的Helm Chart仓库
helm repo update #更新Chart仓库
helm install --generate-name gpu-helm-charts/dcgm-exporter #安装dcgm-exporter
通过curl节点上暴露的metrics接口,可查看GPU的metrics指标
curl -sL http://127.0.0.1:8080/metrics
Kubernetes创建GPU Pod,跟申请常规的cpu、memory资源一样,在resource中带上 nvidia.com/gpu: 1,通过定义yaml进行Apply申请就可以。
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod-test
spec:
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
resources:
limits:
nvidia.com/gpu: 2 # 申请2张GPU卡
kube-scheduler接收到该资源时,会将其调度至有GPU资源的节点上。
至此,就可以在Kubernetes环境中使用GPU了。
通过三篇文章,介绍了如何在普通机器、Docker环境、Kubernetes环境中使用GPU。
后续,将介绍如何在Kubernetes环境搭建AI应用,敬请期待~