TT Lab
开始
学习 学习路径 课程

PCA — Prometheus 认证助理

用四张 GPU 的实测判定闲置的卡

在 TT Lab 中继续学习

目标

用四张 GPU 三小时的实测判断“这张卡是否闲置”,并把判断的依据写成报告。最后,从 vLLM 格式的服务指标中求出首令牌延迟。

为什么重要

GPU 很贵,也不容易增加,所以容量判断一旦出错,钱和时间就会立刻流失。而只看利用率一项,一定会判断错——利用率为 0 的卡如果占着 13.7 GiB 内存,这张卡既是闲置的,又是满的。此外,告诉你是哪个 Pod 在使用的归属标签,也可能因节点配置而整个为空,于是“不知道谁在用的 GPU”就真的会出现。本实验是用指标判断这两件事的练习。

关于数据

步骤

  1. 在 /root/pca-gpu/01-inventory.promql 中写出统计 DCGM 所报告的 GPU 数量的查询。
  2. 在 /root/pca-gpu/02-idle.txt 中用一行写下:在整个窗口内利用率始终为 0、且占用帧缓冲最多的那张 GPU 所在的节点名称。
  3. 在 /root/pca-gpu/03-fbused.promql 中写出求该 GPU 的 DCGM_FI_DEV_FB_USED 的查询。
  4. 在 /root/pca-gpu/04-attribution.txt 中用一行写下 exported_pod 标签为空的 GPU 所在的节点名称。
  5. 在 /root/pca-gpu/05-energy.promql 中写出从 nuc1 GPU 的累积能量计数器求平均功耗(W)的查询。
  6. 在 /root/pca-gpu/06-idle-window.promql 中写出统计按整个窗口来看利用率从未超过 0 的 GPU 数量的查询。
  7. 在 /root/pca-gpu/07-ttft.promql 中写出求服务样本的首令牌延迟 p95 的查询。
  8. 把两个判断和依据,以及哪些是实测、哪些是样本,在 /root/pca-gpu/08-report.md 中写下,不少于 300 字。

参考

统计 DCGM 报告的 GPU 数量

DCGM 为每张 GPU 输出一条序列。用 count() 统计即可。请用 promq-at 提交查询——用当前时刻提交会落在窗口之外,得到空结果。

找出占着内存却整个窗口都闲置的 GPU

只用一个瞬时值来判断,忙碌的卡也会恰好落在为 0 的瞬间。用 max_over_time(...[3h]) 选出整个窗口内最大值为 0 的 GPU,再用 topk 找出其中 FB_USED 最大的。答案是 node 标签的值。

测量该 GPU 占用的帧缓冲

DCGM_FI_DEV_FB_USED 的单位是 MiB。请用上一步找到的节点缩小范围。换算成字节就会与基准值对不上——请按指标给出的单位原样作答。

找出不知道谁在使用的 GPU

dcgm-exporter 通过 exported_namespace、exported_pod、exported_container 标签告诉你哪个 Pod 在使用这张 GPU。但根据节点配置,这些标签可能为空。为空的标签用 {exported_pod=""} 来选择。

从累积能量计数器推导平均功耗

DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION 是累积能量,单位是 mJ。用 rate 求导得到 mW,再除以 1000 就是 W。节点是 nuc1。与同一时刻的 POWER_USAGE 仪表比较,值应当几乎相同才正常。

统计整个窗口内闲置的 GPU 数量

如果用瞬时值来统计,忙碌的 GPU 也会恰好落在为 0 的瞬间。先用 max_over_time 求整个窗口内的最大值,再用 == 0 过滤后统计。

从服务指标中求首令牌延迟 p95

以 vllm: 开头的序列不是实测,而是只模仿格式的合成样本(带有 source="synthetic" 标签)。它是直方图,所以对桶使用 rate,按 le 聚合,再套上 histogram_quantile。丢掉 le 再聚合,值就没有意义了。

写下判断和依据,并注明哪些是实测

报告中必须包含两个判断(只占着内存而闲置的 GPU 所在的节点、无法确定归属的 GPU 所在的节点)以及作为依据使用的指标名称。另外,还要写明 vllm: 系列不是实测而是合成样本这一事实。不少于 300 字。