本文主要介绍在容器服务中使用 mGPU 功能,实现容器共享 GPU 的方法。
说明
mGPU 功能目前处于 公测 阶段。
mGPU 无法与特权容器共同使用,否则将导致容器创建、删除失败。
使用 mGPU 功能时,对集群和 GPU 卡有如下环境要求和使用限制。
项目 | 要求 |
---|---|
Kubernetes 版本 | 不低于 v1.20.15-vke.4 版本。 |
操作系统 | 创建集群时,操作系统 选择使用容器服务提供的 公共镜像,系统会自动为您配置该版本的操作系统。目前支持的操作系统包括:debian 10、ubuntu 20.04、CentOS 7。 |
内核版本 | 创建集群时,操作系统 选择使用容器服务提供的 公共镜像,系统会自动为您配置该版本的操作系统内核。 目前支持 5.4 版本的内核。 |
Nvidia 驱动版本 | 使用 v470 或 v535 版本,具体小版本以官方支持为准,参见:操作系统镜像概述。 |
GPU 卡 | 目前支持的 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 |
| 节点故障隔离性较强,碎片资源相对较少。 |
说明
如需使用 mGPU 算力分配策略能力,请确保 mgpu 组件的版本不低于 v0.0.3。详细的说明,请参见 配置 mGPU 算力分配策略。
说明
当前 mGPU 仅支持 GPU 云服务器。GPU 云服务器中支持 GPU 计算型 ini2、pni2、g1ve、g1tl、g1te 等规格。
vke.node.gpu.schedule
、Value 为mgpu
,表示在该节点池中的节点上,开启容器共享 GPU 调度能力和 GPU 显存隔离能力。注意
vke.volcengine.com/mgpu-compute-policy
、Value 取值为fixed-share
、guaranteed-burst-share
或native-burst-share
时,表示在该节点池中的节点上,配置算力分配策略。说明
配置算力分配策略的详细说明,请参见 配置 mGPU 算力分配策略。
本文以创建无状态负载(Deployment)为例。
注意
mGPU 推荐的最小 GPU 算力 为 0.05 且步长为 0.05(不足 1 Card 时),最小 GPU 显存 为 1 GiB。该推荐值能够为您的容器间 GPU 共享场景,提供更好的体验。
注意
在 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 的各项监控指标。
容器服务提供基于托管 Prometheus 服务(VMP)的 Prometheus 监控能力。您可以通过 Prometheus 监控 查看 mGPU 的各项监控指标。详细操作,请参见 Prometheus 监控。
mGPU 提供 mGPU Client(mgpu-cli
),支持开发者在终端查看 mGPU 相关指标。
登录 Pod 所在节点。您可以通过 ECS Terminal 登录,详细操作,请参见 ECS Terminal。
执行如下命令,查看物理显卡信息。
mgpu-cli device info -a
系统返回如下,其中通过vmem_free_bytes
信息,查看 mGPU 场景下显卡被使用的情况。
指标名称 | 指标含义 |
---|---|
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 策略预留的字段,当前暂不支持配置该策略)。 |