You need to enable JavaScript to run this app.
导航

指定容器 GPU 资源创建 GPU 计算型实例

最近更新时间2024.02.21 14:57:11

首次发布时间2023.09.04 11:07:31

弹性容器实例支持通过特定的 Annotation 指定实例规格族,同时指定resources.limits的方式来创建 GPU 类型的 VCI 实例。

使用限制

前提条件

Kubernetes 方式创建

创建 Pod 或者工作负载(包括 Deployment、StatefulSet、Job、CronJob)时,通过添加 Annotation,并指定resources.limits方式来创建 GPU 类型的 VCI Pod。

Annotation 说明,如下所示。

Annotation KeyAnnotation Value 示例值说明是否必填

vci.vke.volcengine.com/preferred-instance-family

vci.ini2

GPU 计算型 中的实例 规格族
同时需要指定 Pod 的resources.limits。 VCI 会根据 规格匹配逻辑 来匹配实例规格。

说明

本场景必填

vci.vke.volcengine.com/gpu-driver-version

tesla-470.129.06

指定 GPU 计算型实例的驱动版本。取值如下:

  • tesla-470.129.06(默认值)
  • tesla-535.129.03

说明

未设置该 Annotation 时,系统会为您的 GPU 计算型实例指定默认的 GPU 驱动版本。

以创建 Pod 为例,完整的示例代码如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: demo-gpu-1  # Pod 名称。
  namespace: default  # Pod 所属命名空间。
  annotations:
    vke.volcengine.com/burst-to-vci: enforce  #强制使用 VCI。
    vci.vke.volcengine.com/preferred-instance-family: vci.ini2 #指定实例的 GPU 规格族。
    vci.vke.volcengine.com/gpu-driver-version: tesla-470.129.06 #指定实例的 GPU 驱动。
spec:
  containers:
  - image: cr-cn-beijing.volces.com/tw/nginx:1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。
    imagePullPolicy: Always
    name: nginx
    resources:
      requests:  #指定容器的 vCPU、内存、GPU。
        cpu: 37
        nvidia.com/gpu: 2 #指定容器的 GPU 卡数(同原生),可以同时指定 limits 和 requests,但值必须相等。
      limits:
        cpu: 37
        nvidia.com/gpu: 2

说明

Pod.spec.container[].resources的 GPU 设置,需与原生 Kubernetes 能力和限制相同:

  • 使用<vendor>.com/gpu指定 GPU 资源。
  • 必须指定limit
  • 可以同时指定limitrequest,但值必须相等。
  • 可以不指定rquest,Kubernetes 默认将limit值作为request值。
  • 不共享 GPU,不支持超售。
  • GPU 数量必须是整数。

控制台方式创建

  1. 在 VPC-CNI 集群中安装 nvidia-device-plugin 组件。详细操作,请参见 安装组件
    alt
  2. 创建工作负载 时,配置以下参数:
    1. 配置 基本信息 时:选择 以弹性容器实例方式部署
      alt
    2. 配置 容器配置 时:资源配额 处,配置 GPU 资源,也可以同时配置 CPU、内存资源。
      配置如下图红框中的参数,其中 GPU 资源类型 选择 Nvidia,其余参数按实际需求配置。

      说明

      VCI 场景中暂不支持使用 mGPU 资源类型。

      alt
    3. 配置 高级配置 时:实例注解 处,添加 Annotation Key:vci.vke.volcengine.com/preferred-instance-family,按需设置 Annotation Value 为您需要的 GPU 计算型 规格族
      alt

规格匹配逻辑说明

  • 总体的匹配规格优先级为:先基于 GPU 匹配,再基于 CPU 或内存(Memory)的资源声明匹配。
  • 若未指定容器的 CPU、内存等资源 Limit,则基于 GPU 卡的数量来匹配对应 GPU 计算型规格族下的实例规格。(一般情况下,GPU 卡的数量即可唯一确定 Pod 实例规格类型)。
  • 部分 GPU 计算型规格族在单卡的规格下,可能存在多个实例规格。该情况下,默认匹配 最小能用实例规格
  • 若指定了(全部指定或部分指定)容器的 CPU、内存等资源 Limit,则基于 GPU 卡的数量来匹配目标的实例规格,并进行相关校验和确认:
    • 场景一:同时指定 CPU 和内存资源的 Limit 时:
      • 保证所指定的资源 Limit 数值均小于或等于 GPU 卡匹配的目标实例规格的相关配置,否则,无法匹配成功。具体规则下:
        1. 先基于 GPU 卡数可筛选匹配出目标的实例规格,这里基于不同的 GPU 卡类型,可能匹配一个或多个实例规格。
        2. 然后看 CPU 资源的合计数值,在上述筛选出的目标实例规格里选择一致或相近的较大实例规格;如超出目标筛选规格中的最大规格配置,则创建实例失败。
        3. 最后看内存资源的合计数值,在上述筛选出的目标规格里选择一致或相近的较大实例规格;如超出目标筛选规格中的最大规格配置,则创建实例失败。
    • 场景二:仅指定 CPU 或 MEM 资源其中之一的 Limit 时:
      • 保证所指定的资源 Limit 数值均小于或等于 GPU 卡匹配的目标实例规格的相关配置,否则,无法匹配成功。具体规则下:
        1. 先基于 GPU 卡数可筛选匹配出目标的实例规格,这里基于不同的 GPU 卡类型,可能匹配一个或多个实例规格。
        2. 再看 Limit 数值非 0 的资源,在上述筛选出的目标规格里选择一致或相近的较大实例规格;如非 0 项配置的资源数值超出目标筛选规格中的最大规格配置,则创建实例失败。

创建 GPU 型实例注意事项

  1. 分别计算 Pod 的 CPU、内存、GPU 的上限合计数值:
    • CPU 合计数值 = Pod 内 所有 Init 容器的 CPU 上限最大值所有应用容器的 CPU 上限之和 两者中,数值较大者。
    • 内存合计数值 = Pod 内 所有 Init 容器的内存上限最大值所有应用容器的内存上限之和 两者中,数值较大者。
    • GPU 合计数值 = Pod 内 所有 Init 容器的 GPU 上限最大值所有应用容器的 GPU 上限之和 两者中,数值较大者。
    • Pod 内容器未设置 CPU 上限、内存上限、或者 GPU 上限,则该项的限制以 0 计算。
  2. 根据 annotation 指定的 value 从 GPU 计算型 中获取对应的 vCPU、内存、GPU 等数值(以下简称规格数值)。
  3. 合计数值规格数值 必须符合以下全部条件:
    • Pod.spec.container[].resources.limit.'<vendor>.com/gpu' 中的<vendor>必须与实例规格族 GPU 对应的供应商一致。

      说明

      当前 GPU 显卡为 NVIDIA 显卡。因此<vendor>nvidia

    • 合计数值 中的 GPU 取值必须大于 0。
    • 合计数值 中的 CPU、内存、GPU 取值必须都小于或等于规格数值 中的对应数值。

      注意

      合计数值小于规格数值时,将按规格数值创建实例和计费。若 Container 内指定的 GPU 数值小于规格数值可能会造成资源浪费,请合理规划实例规格。