背景
现需要在Kubernetes平台上以容器的形态部署业务程序,借助NVIDIA 开源的GPU-operator组件来实现GPU显卡的调度和渲染能力。
方案简介
通过在Kubernetes集群部署gpu-operator全家桶程序,它提供了nvidia驱动的安装,实现了deviceplugin能力提供了gpu显卡的调度能力,还提供了gpu相关的指标。
实施步骤
在安装gpu-operator之前需要确保基础环境的一致:
GPU显卡型号: Nvidia T4
GPU节点操作系统: Ubuntu22.04
容器引擎: docker
安装nvidia gpu-operator
可参考nvidia官方文档资料: https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/getting-started.html#
由于安装形式是operator,需要先配置helm客户端 helm的部署安装,可参考: https://support.huaweicloud.com/usermanual-cce/cce_10_0144.html
添加nvidia helm仓库
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
指定驱动版本安装gpu-operator
helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set driver.version=470.141.03
需要注意部分镜像可能会拉取失败导致安装失败,可以提前准备好拉取到节点上
观察gpu-operator运行状态
由于nvidia驱动的下载编译安装,需要等待片刻才能就绪,观察kubernetes集群中gpu-operator的运行状态
此时集群还没下发GPU节点,部分daemonset程序还未拉起。扩容GPU节点池,创建GPU节点
节点下发后,可以看到,每个节点都会运行daemonset程序,实现nvidia驱动的安装,gpu显卡资源的上报和调度等
等待片刻后,各组件均已正常运行。(如果daemonset程序中,部分组件长时间未就绪,可通过手动重启pod进行解决)
查看GPU节点状态
可以看到节点状态为GPU驱动未就绪,现在点击节点可以发现GPU显卡配额
也可查看gpu节点的yaml进行确认
创建工作负载申请gpu显卡资源,下发图形渲染任务
使用图形渲染软件Blender,工作负载yaml如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
version: v1
name: blender
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: blender
version: v1
template:
metadata:
labels:
app: blender
version: v1
spec:
containers:
- image: swr.cn-east-3.myhuaweicloud.com/hz-cloud/blender:4.1.1
imagePullPolicy: IfNotPresent
name: container-1
resources:
limits:
nvidia.com/gpu: "1"
requests:
cpu: 250m
memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
labels:
app: blender
version: v1
name: blender
namespace: default
spec:
ports:
- name: cce-service-0
port: 3000
protocol: TCP
targetPort: 3000
selector:
app: blender
version: v1
type: NodePort
等待Pod就绪:
登录pod进行确认gpu显卡是否已经挂载
查看容器中的环境变量,确认存在: NVIDIA_DRIVER_CAPABILITIES=all
访问业务前端配置渲染属性
配置渲染属性: 渲染引擎选择 Cycles,设备选择GPU计算
确认Blender程序已经探测到nvidia T4显卡
实施图形渲染
开始渲染,目前进度为:
观察容器的gpu使用情况
容器内可使用 watch -d nvidia-smi 动态查看gpu的使用情况: 可以发现显存和算力的使用都有在提升
关于GPU相关指标的查看
gpu-operator 会在集群中以daemonset的形式安装dcgm-exporter程序,该程序会通过9400端口暴露该GPU节点上的gpu相关指标
手动访问: curl podip:9400/metrics 查看指标:
后续集群如果集成了Prometehus监控系统可通过编写servicemonitor进行指标任务的采集,方便查看集群中GPU的使用情况。
来源(版权归原作者所有):https://bbs.huaweicloud.com/blogs/428524