本页面介绍了 Dataflow 中支持的 GPU 指标。您可以使用这些指标来监控 GPU 的健康状况和使用情况。大多数指标都受所有 Dataflow 作业支持,但许多 GPU 模型需要进行额外的配置才能使用某些指标。
前提条件
只有明确请求使用 GPU 的 Dataflow 作业才会收集 GPU 指标。如需了解详情,请参阅 GPU 支持。
概览
虽然 Dataflow 会报告许多 GPU 指标,但主要指标是总内存和已用内存(相当于 RAM 指标),以及流式多处理器 (SM) 活动和 SM 占用率(相当于 Dataflow CPU 指标)。如需了解更多指标,请参阅 常用指标和GPM 指标。
默认情况下,系统会报告作业中每个 GPU 设备的总内存和已用内存。在 Dataflow 监控界面中,这些指标会显示在“基本 GPU 利用率”下。这些指标与“内存访问百分比”不同,后者也属于基本 GPU 指标,但报告的是 GPU 设备内存被访问的时间所占的百分比。
SM 活动和 SM 占用率是 GPM 指标。这些指标不受 P4 和 P100 设备支持,但默认受 H100 设备及更高版本支持。对于所有其他设备(例如 T4 和 L4 设备),则需要进行额外的设置。 如需了解启用这些指标的步骤,请参阅 GPM 收集。如果作业收集了这些指标,它们会显示在 Dataflow 监控界面中的“GPU GPM 利用率”下。
Dataflow GPU 指标基础知识
所有 GPU 指标都由 Dataflow 工作器发送到 Cloud Monitoring。您可以在 dataflow.googleapis.com/worker/accelerator/gpu 下找到每个设备的指标。所有这些指标都分为一般类别(例如利用率或温度),并且都具有以下标签:
- device_uuid:唯一标识 GPU 设备,与工作器或 流水线无关。
- device_number:在工作器上分配给设备的编号,范围为 [0, N),其中 N 是工作器上的 GPU 设备数量。
- device_model:GPU 的型号,例如“Tesla T4”。
device_uuid 和 device_model 都独立于工作器,对于同一实体设备始终相同。device_number 与在该工作器上的标识方式相关联。
Dataflow 的常用 GPU 指标
每个使用 GPU 的 Dataflow 作业都会报告常用指标。 在 Monitoring 中,这些指标都使用以下格式:
dataflow.googleapis.com/worker/accelerator/gpu/CATEGORY/NAME
下表显示了每个指标及其类别、名称、单位和用途。
| 指标 | 类别 | 名称 | 单位 | 说明 |
|---|---|---|---|---|
| 内核运行百分比 | 利用率 | device_kernel_runtime | 百分比 | 至少一个内核在 GPU 上运行的时间所占的百分比。这仅表明 GPU 正在使用,并不表明其处理资源是否得到有效利用。 |
| 内存访问百分比 | 利用率 | device_memory_access | 百分比 | 设备内存被读取或写入的时间所占的百分比。这仅表明内存正在被访问,并不表明正在使用的内存所占的百分比。 |
| 内存限制 | 内存 | device_limit | MiB | GPU 上可用的内存量。 |
| 内存用量 | 内存 | device_usage | MiB | GPU 正在使用的内存量。这包括 Dataflow 作业使用的内存和为固件预留的内存,因此即使尚未将任何内存传输到 GPU,也可能会出现一些用量。 |
| 可纠正的易失性 ECC 错误 | 内存/ecc/易失性 | device_correctable_total | 计数 | 自上次驱动程序重新加载以来,可纠正(单比特)ECC 错误的数量。对于 Dataflow,驱动程序重新加载仅在工作器启动时发生,因此这相当于工作器生命周期内的错误数。 |
| 无法纠正的易失性 ECC 错误 | 内存/ecc/易失性 | device_uncorrectable_total | 计数 | 自上次驱动程序重新加载以来,无法纠正(双比特)ECC 错误的数量。对于 Dataflow,驱动程序重新加载仅在工作器启动时发生,因此这相当于工作器生命周期内的错误数。 |
| 电源限制 | 电源 | device_limit | 瓦 | 设备设置为使用的最大功率。Dataflow 不会更改此默认值。 |
| 耗电量 | 电源 | device_usage | 瓦 | 设备正在使用的功率。 |
| 当前温度 | 温度 | device_current | 摄氏度 | GPU 的当前温度。 |
| 最高工作温度 | 温度 | device_max_op | 摄氏度 | GPU 应保持的温度。如果当前温度超过此温度,GPU 驱动程序将尝试冷却 GPU,直到其低于此温度。Dataflow 不会控制此过程。 |
| 降速温度 | 温度 | device_slowdown | 摄氏度 | GPU 将开始节流的温度。如果当前温度超过此温度,您应该会看到性能下降,直到温度降下来。Dataflow 不会控制此过程。 |
| 关机温度 | 温度 | device_shutdown | 摄氏度 | GPU 将关闭的温度。如果当前温度超过此温度,设备将变得不可用。Dataflow 不会控制此温度,也不会主动尝试恢复因温度过高而关闭的 GPU。 |
| 当前 SM 时钟 | 时钟 | device_sm_current | MHz | SM 时钟的当前速度。如果温度超过降速阈值,则此速度可能会降低,这是与冷却相关的节流的一部分。 |
| 最大 SM 时钟 | 时钟 | device_sm_max | MHz | SM 时钟的最大速度。 |
| 当前内存时钟 | 时钟 | device_memory_current | MHz | 内存时钟的当前速度。如果温度超过降速阈值,则此速度可能会降低,这是与冷却相关的节流的一部分。 |
| 最大内存时钟 | 时钟 | device_memory_max | MHz | 内存时钟的最大速度。 |
Dataflow 的 GPM 指标
Dataflow 提供对 GPM 指标的一些支持。支持级别取决于 GPU 模型和加速器配置。默认情况下,大多数使用 GPU 的 Dataflow 作业都需要进行一些额外的配置。
GPM 指标遵循与常用指标相同的 基础知识。
支持的指标
与常用指标类似,GPM 指标路径具有以下 格式:
dataflow.googleapis.com/worker/accelerator/gpu/CATEGORY/NAME
其中一些指标与某些常用指标属于同一类别。
| 指标 | 类别 | 名称 | 单位 | 说明 |
|---|---|---|---|---|
| SM 活动 | 利用率 | device_sm_activity | 百分比 | warp 在 SM 上处于活跃状态的时间所占的百分比,对设备上的所有 SM 取平均值。这与 内核运行百分比 类似,但它提供了更精细的视图,可以更好地显示 GPU 的资源是否得到有效利用。NVIDIA 将有效利用定义为 80% 或更高,而 50% 或更低则为无效利用。 |
| SM 占用率 | 利用率 | device_sm_occupancy | 百分比 | 设备上活跃 warp 数占 warp 数上限的百分比。内存受限的作业应比计算受限的作业具有更高的占用率,而 内存访问百分比 指标可以提供这方面的洞见。如需了解详情,请参阅 NVIDIA 关于已实现占用率的文档。 |
| Tensor 管道活动 | 利用率 | device_tensor_pipe_activity | 百分比 | Tensor Core 管道被使用的时间所占的百分比。值越高,表示 GPU 的 Tensor Core 使用得越多,这对于矩阵运算非常重要。 |
| FP64 管道活动 | 利用率 | device_fp64_pipe_activity | 百分比 | FP64 Core 管道被使用的时间所占的百分比。值越高,表示 GPU 的 FP64 Core 使用得越多,后者用于处理 64 位浮点值的标量运算。 |
| FP32 管道活动 | 利用率 | device_fp32_pipe_activity | 百分比 | FP32 Core 管道被使用的时间所占的百分比。值越高,表示 GPU 的 FP32 Core 使用得越多,后者用于处理 32 位浮点值的标量运算。 |
| FP16 管道活动 | 利用率 | device_fp16_pipe_activity | 百分比 | FP16 管道被使用的时间所占的百分比。与分别与 64 位和 32 位 CUDA Core 关联的 FP64 和 FP32 不同,FP16 与利用 Tensor Core 的半精度功能相关联。 |
| PCIe 读取 | pcie | device_read | MiB/s | GPU 通过 PCIe 从主机虚拟机读取数据的速率。 |
| PCIe 传输 | pcie | device_transfer | MiB/s | GPU 通过 PCIe 向主机虚拟机传输数据的速率。 |
| NVLink 读取 | nvlink | device_read | MiB/s | GPU 通过 NVLink 读取数据的速率。由于 NVLink 仅涵盖 GPU 到 GPU 的通信,因此如果每个工作器只有一个 GPU,则此指标无关紧要。 |
| NVLink 传输 | nvlink | device_transfer | MiB/s | GPU 通过 NVLink 传输数据的速率。由于 NVLink 仅涵盖 GPU 到 GPU 的通信,因此如果每个工作器只有一个 GPU,则此指标无关紧要。 |
收集 GPM 指标
任何使用 Hopper 架构或更高版本(例如 H100、H100 Mega)的 GPU 的 Dataflow 作业都会默认收集 GPM 指标,因此无需进行额外的配置。但是,使用 Pascal 架构或更早版本(例如 P4 和 P100)的作业不支持这些指标。
对于所有其他模型,收集这些指标需要将 install-gke-dcgm-exporter 添加到工作器加速器配置中。例如:
--experiment="worker_accelerator=type:TYPE;count:COUNT;install-nvidia-driver;install-gke-dcgm-exporter"
此标志会安装与 NVIDIA DCGM-exporter等效的 GKE 管理的导出器。 以下类型支持此选项:
- nvidia-l4
- nvidia-tesla-a100
- nvidia-a100-80gb
- nvidia-tesla-t4
- nvidia-tesla-v100
如果提供了其他类型,Dataflow 服务会在作业创建时返回错误。此检查有助于您避免在对指标收集没有帮助的作业上运行容器。
旧版指标
在 Monitoring 中,您可能会看到两个名为 dataflow.googleapis.com/job/gpu_utilization 和 dataflow.googleapis.com/job/gpu_memory_utilization 的指标。这些指标分别与内核运行百分比和内存访问百分比类似,但工作器通过对工作器上的 GPU 取平均值来报告这些指标。我们建议您使用每个设备的等效指标,尤其是在工作器配置为具有多个 GPU 的情况下。
Dataflow 界面
如果 Dataflow 作业的工作器挂接了 GPU,则指标应显示在作业页面的“作业指标”标签页中的“Dataflow ML”类别下。此类别不会显示在没有 GPU 的作业上,并且需要几秒钟才能加载,因为它首先会验证指标是否与作业相关。
“Dataflow ML”下会显示以下子类别:
| 子类别 | 指标 | 条件 |
|---|---|---|
| 基本 GPU 利用率 | 内核运行百分比 内存访问百分比 总内存/已用内存 |
所有 GPU 作业 |
| GPU 性能 | 功耗/限制 温度读数/限制 当前/最大 SM 时钟 当前/最大内存时钟 可纠正/无法纠正的易失性 ECC 错误 |
所有 GPU 作业 |
| GPU GPM 利用率 | SM 活动 SM 占用率 CUDA/Tensor 管道活动 |
已启用 GPM 指标 |
| GPU GPM I/O | PCIe 读取/传输 NVLink 读取/传输 |
已启用 GPM 指标 |
| 旧版 GPU 利用率 | 旧版指标 | 所有 GPU 作业 |
查看非旧版指标时,您可以将图表过滤到特定的工作器名称和 GPU 设备编号。如果是在 Compute Engine 下查看,工作器名称与虚拟机名称相同。GPU 设备编号与指标标签中的编号相同 。您可以使用此过滤功能来检查特定 GPU 设备上的指标,例如查看其功耗相对于限制的接近程度:
