You need to enable JavaScript to run this app.
导航
指定容器 GPU 资源创建 GPU 计算型实例
最近更新时间:2025.01.17 14:40:36首次发布时间:2023.09.04 11:07:31

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

使用限制

GPU 计算型 中每个规格族支持的地域和可用区不同,详情请参见 地域和可用区

前提条件

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 会根据 规格匹配逻辑 来匹配实例规格。

说明

  • 该 Annotation 的 通用型 取值说明,请参见 指定容器 vCPU 和内存创建通用型实例
  • 按照匹配的实例规格计费。计费说明,请参见 产品计费
  • 支持指定多个规格族(Annotation Value),多个规格族之间以半角逗号(,)分隔,并按照前后顺序排列优先级。

本场景必填

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

tesla-470.129.06

指定 GPU 计算型实例的驱动版本。Annotation Value 格式为:tesla-{NVIDIA 驱动版本}

根据preferred-instance-family中指定的 GPU 计算型规格不同,此处支持配置的{NVIDIA 驱动版本}也不同,详细说明,请参见下方 不同规格对应的驱动版本 表格。

说明

未设置该 Annotation 时,系统自动指定与您所选 GPU 计算型规格对应的默认 NVIDIA 驱动版本。

非必填

不同规格对应的驱动版本

实例规格NVIDIA 驱动版本推荐的 CUDA 版本

gni3

535.161.07(默认)

  • NVIDIA 470.129.06:使用该版本驱动时,推荐使用 CUDA 11.4 版本。
  • NVIDIA 535.161.07:使用该版本驱动时,推荐使用 CUDA 12.2 版本。

注意

建议使用与驱动版本相匹配的 CUDA 版本,否则可能影响 GPU 性能。

gni2

  • 470.129.06(默认)
  • 535.161.07

ini2

  • 470.129.06(默认)
  • 535.161.07

g1v

  • 470.129.06(默认)
  • 535.161.07

以创建 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. 配置 基本信息 时:算力类型 选择 弹性容器实例 VCI
      alt
    2. 配置 容器配置 时:资源配额 处,配置 GPU 资源,也可以同时配置 CPU、内存资源。
      配置如下图红框中的参数,其中 GPU 资源类型 选择 Nvidia,其余参数按实际需求配置。

      说明

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

      alt
    3. 配置 高级配置 时:VCI 规格配置 处,配置实例规格。
      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 数值小于规格数值可能会造成资源浪费,请合理规划实例规格。