组件介绍
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_xxx | GPU 指标 |
gpu_core_usage | GPU 实际使用的算力,单位为百分比 |
gpu_mem_usage | GPU 实际使用的显存,单位为 MiB |
gpu_core_utilization_percentage | GPU 算力使用率 |
gpu_mem_utilization_percentage | GPU 显存使用率 |
gpu_core_allocatable | GPU 可分配算力,单位为百分比,固定为100(仅支持 qGPU ) |
gpu_core_allocated | GPU 已分配算力,单位为百分比,对应 qgpu-core(仅支持 qGPU ) |
gpu_core_available | GPU 剩余算力,单位为百分比(仅支持 qGPU ) |
gpu_mem_allocatable | GPU 可分配显存,单位为 GiB,对应 qgpu 设备插件上报的单卡显存数量(仅支持 qGPU ) |
gpu_mem_allocated | GPU 已分配显存(仅支持 qGPU ) |
gpu_mem_available | GPU 剩余显存(仅支持 qGPU ) |
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_xxx | pod 指标 |
pod_core_usage | pod 实际使用的算力,单位为百分比 |
pod_mem_usage | pod 实际使用的显存,单位为 MiB |
pod_core_utilization_percentage | pod 实际使用的算力占申请算力的百分比 |
pod_mem_utilization_percentage | pod 实际使用的显存占申请显存的百分比 |
pod_core_occupy_node_percentage | pod 实际使用的算力占节点总算力百分比 |
pod_mem_occupy_node_percentage | pod 实际使用的显存占节点总显存百分比 |
pod_core_request | pod 申请的算力,单位为百分比 |
pod_mem_request | pod 申请的显存,单位为 MiB |
pod_enc_utilization_percentage | pod 视频编码使用率 |
pod_dec_utilization_percentage | pod 视频解码使用率 |
标签说明:
“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_xxx | 容器指标 |
container_assigned_card | 容器分配到的卡序号 |
container_gpu_utilization | 容器实际使用的算力 |
container_gpu_memory_total | 容器实际使用的显存 |
container_core_utilization_percentage | 容器实际使用的算力占申请算力的百分比 |
container_mem_utilization_percentage | 容器实际使用的显存占申请显存的百分比 |
container_request_gpu_memory | 容器申请的显存,单位为 MiB |
container_request_gpu_utilization | 容器申请的算力,单位为百分比 |
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_xxx | 硬件相关指标 |
gpu_count | 节点的显卡数量 |
gpu_info | 显卡信息,通过标签表明显卡类型,卡序号,驱动版本及 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 错误数量,标签 counter_type 分为 aggregate 和 volatile,error_type 分为 correctable 和 uncorrectable |
示例
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