弹性容器实例支持通过特定的 Annotation 指定实例规格族,同时指定resources.limits
的方式来创建 GPU 类型的 VCI 实例。
使用限制
前提条件
Kubernetes 方式创建
创建 Pod 或者工作负载(包括 Deployment、StatefulSet、Job、CronJob)时,通过添加 Annotation,并指定resources.limits
方式来创建 GPU 类型的 VCI Pod。
Annotation 说明,如下所示。
Annotation Key | Annotation 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 计算型实例的驱动版本。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 | |
ini2 | |
g1v | |
以创建 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
。 - 可以同时指定
limit
和request
,但值必须相等。 - 可以不指定
rquest
,Kubernetes 默认将limit
值作为request
值。 - 不共享 GPU,不支持超售。
- GPU 数量必须是整数。
控制台方式创建
- 在 VPC-CNI 集群中安装 nvidia-device-plugin 组件。详细操作,请参见 安装组件。
- 创建工作负载 时,配置以下参数:
- 配置 基本信息 时:算力类型 选择 弹性容器实例 VCI。
- 配置 容器配置 时:资源配额 处,配置 GPU 资源,也可以同时配置 CPU、内存资源。
配置如下图红框中的参数,其中 GPU 资源类型 选择 Nvidia,其余参数按实际需求配置。说明
VCI 场景中暂不支持使用 mGPU 资源类型。
- 配置 高级配置 时:VCI 规格配置 处,配置实例规格。
规格匹配逻辑说明
- 总体的匹配规格优先级为:先基于 GPU 匹配,再基于 CPU 或内存(Memory)的资源声明匹配。
- 若未指定容器的 CPU、内存等资源 Limit,则基于 GPU 卡的数量来匹配对应 GPU 计算型规格族下的实例规格。(一般情况下,GPU 卡的数量即可唯一确定 Pod 实例规格类型)。
- 部分 GPU 计算型规格族在单卡的规格下,可能存在多个实例规格。该情况下,默认匹配 最小能用实例规格。
- 若指定了(全部指定或部分指定)容器的 CPU、内存等资源 Limit,则基于 GPU 卡的数量来匹配目标的实例规格,并进行相关校验和确认:
- 场景一:同时指定 CPU 和内存资源的 Limit 时:
- 保证所指定的资源 Limit 数值均小于或等于 GPU 卡匹配的目标实例规格的相关配置,否则,无法匹配成功。具体规则下:
- 先基于 GPU 卡数可筛选匹配出目标的实例规格,这里基于不同的 GPU 卡类型,可能匹配一个或多个实例规格。
- 然后看 CPU 资源的合计数值,在上述筛选出的目标实例规格里选择一致或相近的较大实例规格;如超出目标筛选规格中的最大规格配置,则创建实例失败。
- 最后看内存资源的合计数值,在上述筛选出的目标规格里选择一致或相近的较大实例规格;如超出目标筛选规格中的最大规格配置,则创建实例失败。
- 场景二:仅指定 CPU 或 MEM 资源其中之一的 Limit 时:
- 保证所指定的资源 Limit 数值均小于或等于 GPU 卡匹配的目标实例规格的相关配置,否则,无法匹配成功。具体规则下:
- 先基于 GPU 卡数可筛选匹配出目标的实例规格,这里基于不同的 GPU 卡类型,可能匹配一个或多个实例规格。
- 再看 Limit 数值非 0 的资源,在上述筛选出的目标规格里选择一致或相近的较大实例规格;如非 0 项配置的资源数值超出目标筛选规格中的最大规格配置,则创建实例失败。
创建 GPU 型实例注意事项
- 分别计算 Pod 的 CPU、内存、GPU 的上限合计数值:
- CPU 合计数值 = Pod 内 所有 Init 容器的 CPU 上限最大值 和 所有应用容器的 CPU 上限之和 两者中,数值较大者。
- 内存合计数值 = Pod 内 所有 Init 容器的内存上限最大值 和 所有应用容器的内存上限之和 两者中,数值较大者。
- GPU 合计数值 = Pod 内 所有 Init 容器的 GPU 上限最大值 和 所有应用容器的 GPU 上限之和 两者中,数值较大者。
- Pod 内容器未设置 CPU 上限、内存上限、或者 GPU 上限,则该项的限制以 0 计算。
- 根据 annotation 指定的 value 从 GPU 计算型 中获取对应的 vCPU、内存、GPU 等数值(以下简称规格数值)。
- 合计数值 与 规格数值 必须符合以下全部条件:
Pod.spec.container[].resources.limit.'<vendor>.com/gpu'
中的<vendor>
必须与实例规格族 GPU 对应的供应商一致。说明
当前 GPU 显卡为 NVIDIA 显卡。因此<vendor>
为nvidia
。
- 合计数值 中的 GPU 取值必须大于 0。
- 合计数值 中的 CPU、内存、GPU 取值必须都小于或等于规格数值 中的对应数值。
注意
合计数值小于规格数值时,将按规格数值创建实例和计费。若 Container 内指定的 GPU 数值小于规格数值可能会造成资源浪费,请合理规划实例规格。