容器服务 GPU 监控指标获取

TKE 开发了 gpu-exporter 组件,用于获取 GPU 相关 Pod /容器维度的监控指标。主要包含以下内容。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、组件介绍

·GPU 卡利用率

·Pod / 容器 GPU 资源利用率

·GPU 硬件相关的指标

二、部署方式

TKE gpu-exporter 会随 qGPU 或 nvidia-gpu 组件自动安装,不需要单独部署:

·qGPU 组件 – kube-system 命名空间下名称为 elastic-gpu-exporter 的 DaemonSet。

·nvidia-gpu 组件 – kube-system 命名空间下名称为 nvidia-gpu-exporter 的 DaemonSet。

三、确认运行状态

安装 qGPU 或 nvidia-gpu 组件后,可以通过 Kubernetes 命令行工具 kubectl 从本地客户端机器 连接 TKE 集群,查看工作负载和 Pod。

以 qGPU 为例,查看 kube-system 下 elastic-gpu-exporter 的状态:

kubectl get daemonset elastic-gpu-exporter -n kube-systemNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEelastic-gpu-exporter 1 1 1 1 1 <none> 3m36s

符合条件的节点上会有一个运行的 elastic-gpu-exporter 的 Pod:

kubectl get podNAME READY STATUS RESTARTS AGEelastic-gpu-exporter-dblqm 1/1 Running 0 6s

四、获取监控指标

elastic-gpu-exporter / nvidia-gpu-exporter 的服务运行所在节点 5678 端口,监控指标会输出到 /metrics 路径下,因此也可以通过如下命令获取监控指标:

$ curl NodeIP:5678/metrics

五、GPU 卡相关指标

指标名称 说明 单位
gpu_core_usage 该卡上所有 GPU 进程的 SM 利用率之和。单卡满负荷时约为 100,多进程并行时会累加,可能大于 100。1 秒瞬时采样。 无(0~100 对应 1 张卡负荷刻度)
gpu_mem_usage 该卡已用显存。 MiB
gpu_core_utilization_percentage 该卡整体算力利用率(NVML 驱动视角),取值 0~100,不会超过 100。与 gpu_core_usage 口径不同,二者不可混用。 %
gpu_mem_utilization_percentage 该卡显存利用率(已用显存 / 总显存 × 100)。 %
gpu_core_allocatable 该卡可分配算力,固定为 100(仅 qGPU)。 等同于 qgpu-core(100 = 1 张卡)
gpu_core_allocated 该卡上已分配算力(仅 qGPU)。 等同于 qgpu-core(100 = 1 张卡)
gpu_core_available GPU 可分配剩余算力,100 – 已分配,下限截断到 0(仅 qGPU)。 等同于 qgpu-core(100 = 1 张卡)
gpu_mem_allocatable GPU 可分配显存份数(仅 qGPU )。 GiB
gpu_mem_allocated GPU 已分配显存份数(仅 qGPU )。 GiB
gpu_mem_available 该卡剩余可分配显存份数,下限截断到 0(仅 qGPU)。 GiB
gpu_enc_utilization_percentage 视频编码引擎利用率。 %
gpu_dec_utilization_percentage 视频解码引擎利用率。 %

标签说明:

card 表示 GPU 的序号,node 表示所在节点,namespace 表示 Pod 所属命名空间,pod_name 表示 Pod 名称,container_name 表示容器名称。示例如下:

gpu_core_allocatable{card="0",node="172.21.112.100"} 100gpu_core_allocated{card="0",container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="tf-bench-d4f4755c4-c7cp6"} 50gpu_core_available{card="0",node="172.21.112.100"} 50gpu_core_usage{card="0",node="172.21.112.100"} 91gpu_core_utilization_percentage{card="0",node="172.21.112.100"} 91gpu_mem_allocatable{card="0",node="172.21.112.100"} 31gpu_mem_allocated{card="0",container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="tf-bench-d4f4755c4-c7cp6"} 7gpu_mem_available{card="0",node="172.21.112.100"} 24gpu_mem_usage{card="0",node="172.21.112.100"} 5241gpu_mem_utilization_percentage{card="0",node="172.21.112.100"} 16.12gpu_enc_utilization_percentage{card="0",node="172.21.112.100"} 0gpu_dec_utilization_percentage{card="0",node="172.21.112.100"} 0

六、Pod 相关指标

指标名称 说明 单位
pod_core_usage Pod 内所有容器的所有进程,在所有卡上采样到的 SM 利用率之和。单卡满负荷约 100。1 秒瞬时采样。 无(0~100 对应 1 张卡负荷刻度)
pod_mem_usage Pod 实际使用的显存。 MiB
pod_core_utilization_percentage Pod 实际使用算力占其申请算力(qgpu-core)的比率。计算方式为:pod_core_usage / pod_core_request × 100%。值可超过 100%,表示 Pod 实际用量超出了申请量。 %
pod_mem_utilization_percentage pod_mem_usage / pod_mem_request × 100。分母在两种情况下并非 Pod 真实 limit:① 整卡 Pod(申请 core 为 100 的整数倍)→ 强制改为 单卡显存 × 卡数,即使显式申请了 qgpu-memory 也会被覆盖;② 只申请算力未申请显存(如 core=50)→ 按 core / 100 × 单卡显存 推算。 %
pod_core_occupy_node_percentage pod_core_usage / (节点卡数 × 100) × 100,Pod 占整节点算力的比例。 %
pod_mem_occupy_node_percentage pod_mem_usage / 节点所有卡总显存 × 100。 %
pod_core_request pod 申请的算力。 等同于 qgpu-core(100 = 1 张卡)
pod_mem_request pod 申请的显存。 MiB
pod_enc_utilization_percentage pod 视频编码使用率。 %
pod_dec_utilization_percentage pod 视频解码使用率。 %

注意:说明:

注意:pod_core_usage 与 pod_core_utilization_percentage 的区别:

注意:以示例数据为参考:若 pod_core_request=50(申请了 GPU 卡 50% 的算力),pod_core_usage=91(实际使用了 GPU 卡 91% 的算力),则 pod_core_utilization_percentage = 91 ÷ 50 × 100% = 182,表示 Pod 实际使用量是申请量的 1.82 倍。

标签说明:

namespace 表示 Pod 所在的 namespace,node 表示 Pod 所在节点,pod 表示 Pod 的名称。示例如下:

pod_core_occupy_node_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 91pod_core_request{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 50pod_core_usage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 91pod_core_utilization_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 182pod_mem_occupy_node_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 16.12pod_mem_request{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 7168pod_mem_usage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 5239pod_mem_utilization_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 73.09pod_dec_utilization_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 0pod_enc_utilization_percentage{namespace="default",node="172.21.112.100",pod="test-d4f4755c4-c7cp6"} 0

七、容器相关指标

指标名称 说明 单位
container_assigned_card 容器分配到的 GPU 卡,指标值恒为 1,卡序号与 UUID 分别在 card / uuid 标签中(仅 qGPU)。 –
container_gpu_utilization 容器内所有进程的 SM 利用率之和。 无(0~100 对应 1 张卡负荷刻度)
container_gpu_memory_total 容器内所有进程占用的显存之和。 MiB
container_core_utilization_percentage container_gpu_utilization / container_request_gpu_utilization × 100 %
container_mem_utilization_percentage container_gpu_memory_total / container_request_gpu_memory × 100 %
container_request_gpu_memory 容器申请的显存。 MiB
container_request_gpu_utilization 容器申请算力,整卡时固定为 100。 等同于 qgpu-core(100 = 1 张卡)
container_enc_utilization_percentage 容器视频编码使用率 %
container_dec_utilization_percentage 容器视频解码使用率 %

标签说明:

container_name 表示容器名称,namespace 表示容器所在的 namespace,node 表示容器所在节点,pod_name 表示容器所在的 Pod 的名称,card 表示分配到卡的序号,uuid 表示卡的 UUID。示例如下:

container_assigned_card{card="0",contaienr_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6",uuid="GPU-uuid"} 1container_core_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 182container_dec_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 0container_enc_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 0container_gpu_memory_total{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 5239container_gpu_utilization{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 91container_mem_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 73.09container_request_gpu_memory{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 7168container_request_gpu_utilization{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 50container_dec_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 0container_enc_utilization_percentage{container_name="cuda-container",namespace="default",node="172.21.112.100",pod_name="test-d4f4755c4-c7cp6"} 0

八、GPU 硬件相关的指标

指标名称 说明 单位
gpu_count 节点 GPU 卡数量。 个
gpu_info 显卡信息,值恒为 1,卡型号 / UUID / 驱动版本挂在标签上,用于与其他指标做标签关联。 –
gpu_mem_each_card 每张显卡的显存。 MiB
gpu_mem_clock 显存时钟频率。 MHz
gpu_graphics_clock 图形处理器时钟频率。 MHz
gpu_sm_clock 流处理器时钟频率。 MHz
gpu_video_clock 视频处理器时钟频率。 MHz
gpu_max_mem_clock 最大显存时钟频率。 MHz
gpu_max_graphics_clock 最大图形处理器时钟频率。 MHz
gpu_max_sm_clock 最大流处理器时钟频率。 MHz
gpu_max_video_clock 最大视频处理器时钟频率。 MHz
gpu_persistence_mode 是否开启持久模式,1 表示开启,0 表示未开启。 –
gpu_power_usage 功率 W
gpu_ecc_mode 是否开启 ECC 模式,1 表示开启,0 表示未开启 –
gpu_ecc_error_count ECC 错误累计数量。仅当 gpu_ecc_mode = 1 时输出,ECC 关闭或读取失败时该 series 不存在。 个

示例:

gpu_count 1gpu_info{card="0",driver_version="470.182.03",name="Tesla V100-SXM2-32GB",node="172.21.112.100",uuid="GPU-uuid"} 1gpu_mem_each_card{card="0",node="172.21.112.100"} 32510gpu_ecc_error_count{card="0",counter_type="aggregate",error_type="correctable",node="172.21.112.100"} 0gpu_ecc_error_count{card="0",counter_type="aggregate",error_type="uncorrectable",node="172.21.112.100"} 0gpu_ecc_error_count{card="0",counter_type="volatile",error_type="correctable",node="172.21.112.100"} 0gpu_ecc_error_count{card="0",counter_type="volatile",error_type="uncorrectable",node="172.21.112.100"} 0gpu_ecc_mode{card="0",node="172.21.112.100"} 1gpu_graphics_clock{card="0",node="172.21.112.100"} 1530gpu_mem_clock{card="0",node="172.21.112.100"} 877gpu_max_graphics_clock{card="0",node="172.21.112.100"} 1530gpu_max_mem_clock{card="0",node="172.21.112.100"} 877gpu_max_sm_clock{card="0",node="172.21.112.100"} 1530gpu_max_video_clock{card="0",node="172.21.112.100"} 1372gpu_persistence_mode{card="0",node="172.21.112.100"} 1gpu_power_usage{card="0",node="172.21.112.100"} 246.39gpu_sm_clock{card="0",node="172.21.112.100"} 1530gpu_video_clock{card="0",node="172.21.112.100"} 1372

赞 (0)
上一篇 4天前
下一篇 4天前