组件介绍
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 为例,查看
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_usage:绝对量指标,反映 Pod 对 GPU 卡算力的实际消耗,以 GPU 卡总算力百分比(%)为单位,范围通常为 0~100。pod_core_utilization_percentage:相对量指标,反映 Pod 对其申请算力(qgpu-core)的利用率(%),计算方式为 pod_core_usage / pod_core_request × 100%,值可超过 100%(表示实际使用量超出申请量)。以示例数据为参考:若
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