You need to enable JavaScript to run this app.
导航
使用方法
最近更新时间:2024.06.11 15:26:42首次发布时间:2022.09.30 10:43:57

本文主要介绍在容器服务中使用 mGPU 功能,实现容器共享 GPU 的方法。

说明

mGPU 功能目前处于 公测 阶段。

使用须知

  • mGPU 无法与特权容器共同使用,否则将导致容器创建、删除失败。

  • 使用 mGPU 功能时,对集群和 GPU 卡有如下环境要求和使用限制。

项目要求

Kubernetes 版本

不低于 v1.20.15-vke.4 版本。
集群 Kubernetes 版本的查看方法,请参见 FAQ

操作系统

使用 veLinux-GPU 1.0(Debian10)。
创建集群时,操作系统 选择使用容器服务提供的 公共镜像,系统会自动为您配置该版本的操作系统。

说明

mGPU 暂不支持使用 veLinux CentOS 兼容版 公共镜像。

内核版本

操作系统内核版本使用 v5.4.143。
创建集群时,操作系统 选择使用容器服务提供的 公共镜像,系统会自动为您配置该版本的操作系统内核。

Nvidia 驱动版本

使用 v470.129.06 版本。
创建 GPU 计算型节点池时,系统会自动为您配置该版本的 Nvidia 驱动。

GPU 显卡支持的显卡类型包括:T4、V100、A100、A30、A10。
mGPU 个数(对应 Container 个数)一个 GPU 上最多可创建 16 个 mGPU。 计算性能会随 mGPU 的创建数量衰减,建议按照容器申请的资源大小,规划单张 GPU 卡可共享部署的 mGPU 个数。
容器个数使用 mGPU 时,单个 Pod 内的容器数建议不超过 5 个。

调度器说明

mGPU 必须与 scheduler-plugin 组件结合使用才能实现容器共享 GPU 调度。scheduler-plugin 组件是拓展原生 kube-scheduler 调度器的调度能力及策略,支持配置 GPU 节点和 GPU 显卡的 binpack/spread 策略,组件详细介绍以及调度策略配置说明,请参见:scheduler-plugin 组件

注意

本场景要求 创建集群 时必须安装 scheduler-plugin 组件,且首次配置完成后,不允许修改。因此,请在创建集群的 组件配置 步骤,根据实际情况配置 binpack/spread 调度策略。

若创建集群时未修改 scheduler-plugin 组件调度策略,则 mGPU 会采用如下默认调度策略:

GPU 节点调度策略GPU 卡调度策略调度方式适用场景

Spread

Binpack

  • Pod 分散调度到 GPU 分配率低的节点。
  • 容器优先调度到该节点上装箱率高的 GPU 卡。

节点故障隔离性较强,碎片资源相对较少。

步骤一:安装 mgpu 组件

  1. 登录 容器服务控制台
  2. 在顶部导航栏中选择您业务所在的地域。
  3. 在左侧导航栏中选择 集群,单击目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 运维管理 > 组件管理
  5. 组件管理 页面,单击 GPU 页签,找到 mgpu 组件,单击 安装

    说明

    如需使用 mGPU 算力分配策略能力,请确保 mgpu 组件的版本不低于 v0.0.3。详细的说明,请参见 配置 mGPU 算力分配策略

    alt

步骤二:创建 GPU 计算型节点池

说明

当前 mGPU 仅支持 GPU 云服务器。GPU 云服务器中支持 GPU 计算型 ini2、pni2、g1ve、g1tl、g1te 等规格。

  1. 在集群管理页面的左侧导航栏中,单击 节点池
  2. 节点池 页面,根据您的实际需求,参考 创建节点池 中的参数说明,创建节点池。
    其中,部分参数需按如下说明设置:
    • Worker 节点配置 处:计算规格 必须选择 GPU 计算型。该规格的详细介绍,请参见 GPU 计算型
      alt
    • 更多配置 处添加如下两个节点标签:
      alt
      • 设置 节点标签 的 key 为vke.node.gpu.schedule、Value 为mgpu,表示在该节点池中的节点上,开启容器共享 GPU 调度能力和 GPU 显存隔离能力。

        注意

        • GPU 调度时使用的更多标签相关说明和注意事项,请参见 GPU 调度标签说明
        • 您可以通过开启或关闭节点池的 节点标签及污点自动更新 功能,控制是否同步标签到节点池中的存量节点中。关闭该功能时,可能导致存量节点上的 GPU 调度能力与预期不符,请谨慎配置。
      • 设置 节点标签 的 key 为vke.volcengine.com/mgpu-compute-policy、Value 取值为fixed-shareguaranteed-burst-sharenative-burst-share时,表示在该节点池中的节点上,配置算力分配策略。

        说明

        配置算力分配策略的详细说明,请参见 配置 mGPU 算力分配策略

步骤三:在工作负载中配置资源配额

本文以创建无状态负载(Deployment)为例。

通过控制台配置

  1. 在集群管理页面的左侧导航栏中,选择 工作负载 > 无状态负载
  2. 无状态负载 页面,创建无状态负载或更新已有的负载。详细操作,请参见 创建无状态负载更新无状态负载
    其中 容器配置 步骤的 资源配额 处,根据需求配置 GPU 资源:
    alt
    • GPU 资源类型 选择 mGPU
    • GPU 算力 输入 0.01~1 的两位小数时,GPU 显存 输入大于等于 256 MiB,步长为 1 的 GPU 显存。显卡类型 请根据您的实际需求,指定具体显卡类型或选择 不限制显卡

      注意

      mGPU 推荐的最小 GPU 算力 为 0.05 且步长为 0.05(不足 1 Card 时),最小 GPU 显存 为 1 GiB。该推荐值能够为您的容器间 GPU 共享场景,提供更好的体验。

    • GPU 算力 输入大于等于 1 的整数时,表示使用整张 GPU 卡算力,默认使用 GPU 卡的全部显存,因此 GPU 显存 不可配置。显卡类型 请根据您的实际需求,指定具体显卡类型或选择 不限制显卡

通过 YAML 配置

注意

在 mGPU 使用场景中,requests 必须与 limits 内容完全一致。

通过 YAML 配置 mGPU 资源相关示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mgpu-deployment # Deployment 名称。
  namespace: default # Deployment 所属命名空间。
spec:
  replicas: 2 # Pod 实例个数。 
  selector:
    matchLabels:
      app: mgpu-deployment
  template:
    spec:
      containers:
      - name: mgpu-container # 容器名称。
        image: nginx:1.14.2 # 容器镜像地址。
        resources:
         requests:   #与 limits 保持一致
           vke.volcengine.com/mgpu-memory: 4096
           vke.volcengine.com/mgpu-core: 30
         limits:
           vke.volcengine.com/mgpu-memory: 4096   #GPU 显存,单位为 MiB,此处表示 GPU 显存为 4 GiB。
           vke.volcengine.com/mgpu-core: 30      #GPU 算力百分比,此处表示配置 30% 的 GPU 算力。
        ports:
        - containerPort: 80
    metadata:
      labels:
        app: mgpu-deployment

查看 mGPU 监控指标

使用 mGPU 能力后,可查看 mGPU 的各项监控指标。

通过 Prometheus 监控查看

容器服务提供基于托管 Prometheus 服务(VMP)的 Prometheus 监控能力。您可以通过 Prometheus 监控 查看 mGPU 的各项监控指标。详细操作,请参见 Prometheus 监控

通过 mGPU Client 查看

mGPU 提供 mGPU Client(mgpu-cli),支持开发者在终端查看 mGPU 相关指标。

  1. 登录 Pod 所在节点。您可以通过 ECS Terminal 登录,详细操作,请参见 ECS Terminal

  2. 执行如下命令,查看物理显卡信息。

    mgpu-cli	device	info	-a
    

    系统返回如下,其中通过vmem_free_bytes信息,查看 mGPU 场景下显卡被使用的情况。
    alt

    指标名称指标含义
    compute_free_weight设备未分配的算力百分比。
    compute_load_balance_mode容器使用该设备时的负载均衡模式。
    compute_policy设备的算力调度策略。
    compute_qos_enable基于该设备创建的实例是否使能算力 QoS(为 Native Burst 策略预留的字段,当前暂不支持配置该策略)。
    compute_timeslice算力时间片百分比。
    device_major/dev/mgpuX主设备号。
    instance_major/dev/mgpuXinstY/dev/mgpuXctl-$(container_id)主设备号。
    vmem_free_bytes该设备剩余的显存容量,单位: byte。
    nvidia/compute_mps_enable容器内是否使能 MPS 服务(为 Native Burst 策略预留的字段,当前暂不支持配置该策略)。

后续操作

配置 mGPU 算力分配策略