Kubernetes场景下基于Nvidia GPU-operator实现图形渲染能力
一 背景
现需要在Kubernetes平台上以容器的形态部署业务程序,借助NVIDIA 开源的GPU-operator组件来实现GPU显卡的调度和渲染能力。
二 方案简介
通过在Kubernetes集群部署gpu-operator全家桶程序,它提供了nvidia驱动的安装,实现了deviceplugin能力提供了gpu显卡的调度能力,还提供了gpu相关的指标。
三 实施步骤
在安装gpu-operator之前需要确保基础环境的一致:
- GPU显卡型号: Nvidia T4
- GPU节点操作系统: Ubuntu22.04
- 容器引擎: docker
3.1 安装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进行确认
3.2 创建工作负载申请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的使用情况: 可以发现显存和算力的使用都有在提升
3.3 关于GPU相关指标的查看
gpu-operator 会在集群中以daemonset的形式安装dcgm-exporter程序,该程序会通过9400
端口暴露该GPU节点上的gpu相关指标
手动访问: curl podip:9400/metrics 查看指标:
后续集群如果集成了Prometehus监控系统可通过编写servicemonitor进行指标任务的采集,方便查看集群中GPU的使用情况。
- 点赞
- 收藏
- 关注作者
评论(0)