qGPU 使用

最近更新时间:2022-03-14 10:07:49

操作场景

本文介绍如何通过腾讯云容器服务 TKE 使用 qGPU。

使用须知

  • TKE 版本限制:需 ≥ v1.14.x。
  • 操作系统限制:仅支持特定的 TencentOS 3.1 镜像。
  • 机型限制:目前仅支持使用 V100 和 T4 卡的 CVM 机型。
  • 目前支持的 NVIDIA Tesla 驱动版本最新至450.102.04,CUDA 版本11.3。为保证兼容性,强烈建议用户使用 node 上自带的 UMD,无需在 POD 内部重复安装 UMD。
  • qGPU 粒度:一个 GPU 上最多分配的 qGPU 个数(Pod 个数)= GPU 显存数 / 4。
    例如,32G 显存,最多可以分配8个 qGPU,每个 qGPU 最小分配 1G 显存。
  • 开启了 qGPU 能力的节点无法作为常规的 GPU 节点使用,即不能使用整卡的资源。建议通过 TKE 的节点池能力来区分规划资源。
  • 如需升级 Kubernetes Master 版本,请注意:
    • 对于托管集群,无需重新设置本插件。
    • 对于独立集群,master 版本升级会重置 master 上所有组件的配置,会影响 qgpu-scheduler 插件作为 Scheduler Extender 的配置,因此 qGPU 插件需要卸载后再重新安装。

操作步骤

说明

由于使用 qGPU 能力需要使用特定镜像以及设置相关 Label,强烈建议您使用 TKE 的节点池能力来对节点进行分组管理(节点池的节点具备统一的 Label 以及镜像属性),详情请参见 创建节点池

安装 QGPU 组件

  1. 登录 容器服务控制台,在左侧导航栏中选择集群
  2. 在“集群管理”页面单击目标集群 ID,进入集群详情页。
  3. 选择左侧菜单栏中的组件管理,进入“组件列表”页面。
  4. 在“组件列表”页面中选择新建,并在“新建组件”页面中勾选 QGPU(GPU 隔离组件)。
  5. 单击参数配置,可以设置 qgpu-scheduler 的调度策略。
    • spread:多个 Pod 会分散在不同节点、不同显卡上,优先选择资源剩余量较多的节点。适用于高可用场景,避免把同一个应用的副本放到同一个设备上。
    • binpack:多个 Pod 会优先使用同一个节点,适用于提高 GPU 利用率的场景。
  6. 单击完成即可创建组件。
    安装成功后,需要为集群准备 GPU 资源。

准备 GPU 资源

  1. 在集群管理页面中,选择左侧工具栏中的节点管理 > 节点池
  2. 在“节点池列表”页面中,单击新建节点池
  3. 在创建节点池页面中,“镜像提供方”请选择市场镜像,“操作系统”请选择 TencentOS Server 3.1(TK4),其余参数配置可参见 创建节点池。如下图所示:
    说明

    使用 qGPU 指定的镜像创建节点后,TKE 后台会自动给节点添加 label qgpu-device-enable:"enable",设置了该 label 后,DaemonSet qgpu-manager 会调度到对应节点上,并自动进行 qGPU 相关的设置。

  4. 在创建节点池页面中展开更多设置,通过高级配置设置 Label,指定 qGPU 隔离策略 。如下图所示:
    • Label 键:tke.cloud.tencent.com/qgpu-schedule-policy
    • Label 值:fixed-share。设置 Label value 时,可填写全称或者缩写,更多取值请参考下表。
      当前 qGPU 支持以下三种隔离策略:
      Label 值 缩写 英文名 中文名 含义
      best-effort(默认值) be Best Effort 争抢模式 默认值。各个 Pods 不限制算力,只要卡上有剩余算力就可使用。 如果一共启动 N 个 Pods,每个 Pod 负载都很重,则最终结果就是 1/N 的算力。
      fixed-share fs Fixed Share 固定配额 每个 Pod 有固定的算力配额,无法超过固定配额,即使 GPU 还有空闲算力。
      burst-share bs Guaranteed Share with Burst 保证配额加弹性能力 调度器保证每个 Pod 有保底的算力配额,但只要 GPU 还有空闲算力,就可被 Pod 使用。例如,当 GPU 有空闲算力时(没有分配给其他 Pod),Pod 可以使用超过它的配额的算力。注意,当它所占用的这部分空闲算力再次被分配出去时,Pod 会回退到它的算力配额。
  5. 单击创建节点池即可。
  6. 为应用分配 GPU 资源。
    通过给容器设置 qGPU 对应资源允许 Pod 使用 qGPU,您可以通过控制台或者 YAML 方式来设置:
    说明
    • 若应用需使用整数卡资源,只需填写卡数,无需填写显存(自动使用分配的 GPU 卡上全部显存)。
    • 若应用需要使用小数卡资源(即和其他应用共享同一张卡),需同时填写卡数和显存。

    在“新建Workload” 页面,填写 “GPU 资源”。如下图所示:

附录

部署在集群内的 Kubernetes 对象

Kubernetes 对象名称 类型 请求资源 Namespace
qgpu-manager DaemonSet 每 GPU 节点一个 Memory: 300M, CPU:0.2 kube-system
qgpu-manager ClusterRole - -
qgpu-manager ServiceAccount - kube-system
qgpu-manager ClusterRoleBinding - kube-system
qgpu-scheduler Deployment 单一副本 Memory: 800M, CPU:1 kube-system
qgpu-scheduler ClusterRole - -
qgpu-scheduler ClusterRoleBinding - kube-system
qgpu-scheduler ServiceAccount - kube-system
qgpu-scheduler Service - kube-system
目录