最近更新时间:2023.09.07 14:56:12
首次发布时间:2022.09.30 10:43:57
本文主要介绍在容器服务中使用 mGPU 功能,实现容器共享 GPU 的方法。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
使用 mGPU 功能时,对集群和 GPU 卡有如下环境要求和使用限制。
项目 | 要求 |
---|---|
Kubernetes 版本 | 不低于 v1.20.15-vke.4 版本。 |
操作系统 | 使用 veLinux-GPU 1.0(Debian10)。 说明 mGPU 暂不支持使用 veLinux CentOS 兼容版 公共镜像。 |
内核版本 | 操作系统内核版本使用 v5.4.143。 |
Nvidia 驱动版本 | 使用 v470.129.06 版本。 |
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 显存隔离能力。说明
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 监控。
说明
【邀测·申请试用】:Prometheus 监控 目前处于邀测阶段,如需使用,请提交申请。推荐您使用该功能查看 mGPU 各项监控指标。
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 策略预留的字段,当前暂不支持配置该策略)。 |