Kubernetes场景下基于Nvidia GPU-operator实现图形渲染能力

举报
可以交个朋友 发表于 2024/06/04 22:15:48 2024/06/04
【摘要】 NVIDIA T4 显卡可以用于图形渲染,它拥有强大的图形处理能力和高效的计算能力,可以快速处理大量的图形数据,实现高质量的渲染效果。现需要在Kubernetes平台上以容器的形态部署业务程序,

一 背景

现需要在Kubernetes平台上以容器的形态部署业务程序,借助NVIDIA 开源的GPU-operator组件来实现GPU显卡的调度和渲染能力。


二 方案简介

通过在Kubernetes集群部署gpu-operator全家桶程序,它提供了nvidia驱动的安装,实现了deviceplugin能力提供了gpu显卡的调度能力,还提供了gpu相关的指标。
image.png


三 实施步骤

在安装gpu-operator之前需要确保基础环境的一致:

  1. GPU显卡型号: Nvidia T4
  2. GPU节点操作系统: Ubuntu22.04
  3. 容器引擎: docker

3.1 安装nvidia gpu-operator

可参考nvidia官方文档资料: https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/getting-started.html#


  1. 由于安装形式是operator,需要先配置helm客户端
    helm的部署安装,可参考: https://support.huaweicloud.cn/usermanual-cce/cce_10_0144.html


  2. 添加nvidia helm仓库
    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
    image.png


  3. 指定驱动版本安装gpu-operator
    helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set driver.version=470.141.03
    image.png
    需要注意部分镜像可能会拉取失败导致安装失败,可以提前准备好拉取到节点上


  4. 观察gpu-operator运行状态
    由于nvidia驱动的下载编译安装,需要等待片刻才能就绪,观察kubernetes集群中gpu-operator的运行状态
    image.png
    此时集群还没下发GPU节点,部分daemonset程序还未拉起。扩容GPU节点池,创建GPU节点
    image.png
    节点下发后,可以看到,每个节点都会运行daemonset程序,实现nvidia驱动的安装,gpu显卡资源的上报和调度等
    image.png
    等待片刻后,各组件均已正常运行。(如果daemonset程序中,部分组件长时间未就绪,可通过手动重启pod进行解决)
    image.png


  5. 查看GPU节点状态
    可以看到节点状态为GPU驱动未就绪,现在点击节点可以发现GPU显卡配额
    image.png
    也可查看gpu节点的yaml进行确认
    image.png


3.2 创建工作负载申请gpu显卡资源,下发图形渲染任务

  1. 使用图形渲染软件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就绪:
    image.png


  2. 登录pod进行确认gpu显卡是否已经挂载
    image.png
    查看容器中的环境变量,确认存在: NVIDIA_DRIVER_CAPABILITIES=all
    image.png


  3. 访问业务前端配置渲染属性
    配置渲染属性: 渲染引擎选择 Cycles,设备选择GPU计算
    image.png
    确认Blender程序已经探测到nvidia T4显卡
    image.png


  4. 实施图形渲染
    image.png
    开始渲染,目前进度为:
    image.png


  5. 观察容器的gpu使用情况
    容器内可使用 watch -d nvidia-smi 动态查看gpu的使用情况: 可以发现显存和算力的使用都有在提升
    image.png


3.3 关于GPU相关指标的查看

gpu-operator 会在集群中以daemonset的形式安装dcgm-exporter程序,该程序会通过9400端口暴露该GPU节点上的gpu相关指标
image.png
手动访问: curl podip:9400/metrics 查看指标:
image.png
后续集群如果集成了Prometehus监控系统可通过编写servicemonitor进行指标任务的采集,方便查看集群中GPU的使用情况。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。