监控 TPU

本指南介绍了如何使用 Cloud Monitoring监控 TPU 虚拟机。Cloud Monitoring 会自动从 TPU 及其主机虚拟机收集 指标日志。这些数据可用于监控 TPU 和 Compute Engine 的健康状况。

借助指标,您可以跟踪一段时间内的数值量,例如 CPU 利用率、网络用量或 TensorCore 空闲时长。日志会在特定时间点捕获事件。日志条目由您自己的代码、 Google Cloud 服务、第三方应用和 Google Cloud 基础架构写入。您还可以通过创建基于日志的 指标,从日志条目中的数据 生成指标。您还可以根据指标值或 日志条目设置提醒 政策

如需监控 TPU,您还可以使用容量规划工具 (预览版)。借助容量规划工具,您可以查看项目、文件夹或组织的 TPU 用量和预测数据。这些数据每 24 小时更新一次,您可以使用这些数据来分析用量趋势并规划未来的容量需求。如需了解详情,请参阅容量规划工具 概览

访问 TPU 指标

Compute Engine 会生成两种类型的 TPU 指标:TPU 运行时指标和 TPU 虚拟机基础架构指标。您可以通过以下两种方式获取指标:

  • TPU Monitoring Library:使用 TPU Monitoring Library 从 LibTPU SDK 获取 TPU 运行时指标。这样,您的应用就可以从访客环境内部获取实时遥测数据。如需了解详情, 请参阅 TPU Monitoring Library

  • AI Telemetry Collector:通过 AI Telemetry Collector 获取运行时指标和虚拟机基础架构 指标。AI Telemetry Collector 在 TPU 虚拟机内部运行,让您可以通过 Cloud Monitoring 或您自己的基于 Prometheus 的监控流水线访问指标。如需了解详情, 请参阅 AI Telemetry Collector

TPU 指标

Google Cloud Cloud TPU 的指标由 Compute Engine 虚拟机和 Cloud TPU 运行时自动生成。下表中的指标由 Compute Engine 虚拟机生成。

此表中的“指标类型”字符串必须以 compute.googleapis.com/ 为前缀。该前缀已从表中的条目中省略。查询标签时,请使用 metric.labels 前缀;例如, metric.labels.LABEL="VALUE"

指标类型发布阶段(资源层次结构级别)
显示名称
种类、类型、单位
受监控的资源
说明
标签
instance/tpu/accelerator/duty_cycle Beta 版(项目)
加速器工作周期
GAUGEDOUBLE%
gce_instance
在采样周期内,加速器活跃处理的时间所占的百分比。值介于 [0,100] 之间。
accelerator_id:加速器的设备 ID。
instance/tpu/accelerator/memory_bandwidth_utilization Beta 版(项目)
加速器内存带宽利用率
GAUGEDOUBLE%
gce_instance
正在使用的加速器内存带宽当前所占的百分比。计算方法为:将采样周期内使用的内存带宽除以同一采样周期内支持的最大带宽。
accelerator_id:加速器的设备 ID。
instance/tpu/accelerator/memory_total Beta 版(项目)
加速器内存总量
GAUGEINT64By
gce_instance
当前分配的加速器内存总量(以字节为单位)。
accelerator_id:加速器的设备 ID。
instance/tpu/accelerator/memory_used Beta 版(项目)
加速器内存用量
GAUGEINT64By
gce_instance
当前使用的加速器内存总量(以字节为单位)。
accelerator_id:加速器的设备 ID。
instance/tpu/accelerator/tensorcore_utilization Beta 版(项目)
加速器 TensorCore 利用率
GAUGEDOUBLE%
gce_instance
已用 TensorCore 当前所占百分比。计算方法为:将采样周期内执行的 TensorCore 操作数除以同一采样周期内支持的 TensorCore 操作数。
accelerator_id:加速器的设备 ID。
instance/tpu/active_chips Beta 版(项目)
活跃 TPU 芯片数
GAUGEINT641
gce_instance
当前正在积极使用的芯片数(即非空闲芯片数)。
accelerator_type: 加速器类型和代系。
reservation_id:物理机预留的 ID。
provisioning_model:关联的预配模型。
protection_tier: 关联的保护模型。
block_id:托管虚拟机的集群中的块的 ID。
subblock_id:托管虚拟机的子块的 ID。
is_exr: (布尔值) 指示芯片是否属于扩展预留。
instance/tpu/chip_state Beta 版(项目)
TPU 芯片状态数
GAUGEINT641
gce_instance
处于各种状态(例如“健康”“不健康”和“未知”)的 TPU 芯片数。
state:芯片的状态。
accelerator_type: 加速器类型和代系。
block_id:托管虚拟机的集群中的块的 ID。
subblock_id:托管虚拟机的子块的 ID。
reservation_id:物理机预留的 ID。
is_exr: (布尔值) 指示芯片是否属于扩展预留。
instance/tpu/infra_health Beta 版(项目)
TPU 实例健康状况
GAUGEINT641
gce_instance
指示 TPU 实例的整体健康状况。指标标签有助于识别运行状况不佳或不健康的 TPU 实例的具体健康状况和问题原因,主要关注 TPU 硬件和系统健康状况。健康状况变化可能需要几分钟才能反映在此指标中。每 60 秒采样一次。采样后,数据最多需要 420 秒才能显示。
health_status: TPU 实例的整体健康状况。可能的值:HEALTHY(按预期运行)、UNHEALTHY(检测到严重问题)、DEGRADED(性能受到影响的问题)、UNKNOWN(无法确定状态)。
unhealthy_category: 虚拟机运行状况不佳的说明。仅当指标的值为“不健康”时,才会填充此标签。
machine_type:实例的机器类型(例如 ct6e-standard-4t-tpu)。
machine_id:托管虚拟机的物理机的 ID。
block_id:托管虚拟机的集群中的块的 ID。
cluster_id:托管虚拟机的集群的 ID。
reservation_id:物理机预留的 ID。
subblock_id:托管虚拟机的子块的 ID。
instance/tpu/runtime/uptime Beta 版(项目)
运行时正常运行时间
GAUGEINT64s
gce_instance
自机器学习作业初始化运行时库 (libtpu.so) 以来,机器学习运行时的正常运行时间。在此期间,运行时库会阻止 TPU 设备供机器学习作业使用。
ml_framework_name: 机器学习框架的名称。
ml_framework_version: 机器学习框架的版本。
instance/tpu/scheduled_chips Beta 版(项目)
已调度的 TPU 芯片数
GAUGEINT641
gce_instance
当前分配给处于“健康”状态且未因维护而处于“已停用”状态的虚拟机的芯片数。
accelerator_type: 加速器类型和代系。
reservation_id:物理机预留的 ID。
provisioning_model:关联的预配模型。
protection_tier: 关联的保护模型。
block_id:托管虚拟机的集群中的块的 ID。
subblock_id:托管虚拟机的子块的 ID。
is_exr: (布尔值) 指示芯片是否属于扩展预留。
instance/tpu/utilized_chips Beta 版(项目)
已用 TPU 芯片数
GAUGEDOUBLE1
gce_instance
当前汇总的已用容量,以有效活跃芯片数表示。它等于所有活跃芯片的小数利用率(0.0 到 1.0)之和。
accelerator_type: 加速器类型和代系。
reservation_id:物理机预留的 ID。
provisioning_model:关联的预配模型。
protection_tier: 关联的保护模型。
block_id:托管虚拟机的集群中的块的 ID。
subblock_id:托管虚拟机的子块的 ID。
is_exr: (布尔值) 指示芯片是否属于扩展预留。
quota/tpus_per_tpu_family/exceeded Alpha 版(项目)
每个 TPU 系列的 TPU 数量。配额超出错误
DELTAINT641
compute.googleapis.com/Location
尝试超出配额指标 compute.googleapis.com/tpus_per_tpu_family 的限制的次数。采样后,数据最多需要 150 秒才能显示。
limit_name: 限制名称。
tpu_family: TPU 系列自定义维度。
quota/tpus_per_tpu_family/limit Alpha 版(项目)
每个 TPU 系列的 TPU 数量。配额限制
GAUGEINT641
compute.googleapis.com/Location
配额指标 compute.googleapis.com/tpus_per_tpu_family 的当前限制。每 60 秒采样一次。采样后,数据最多需要 150 秒才能显示。
limit_name: 限制名称。
tpu_family: TPU 系列自定义维度。
quota/tpus_per_tpu_family/usage Alpha 版(项目)
每个 TPU 系列的 TPU 数量。配额用量
GAUGEINT641
compute.googleapis.com/Location
配额指标 compute.googleapis.com/tpus_per_tpu_family 的当前用量。采样后,数据最多需要 150 秒才能显示。
limit_name: 限制名称。
tpu_family: TPU 系列自定义维度。
tpu/multislice/accelerator/device_to_host_transfer_latencies Beta 版(项目)
从设备到主机的传输延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
每个数据块从设备到主机的传输延迟时间的累积分布。延迟时间的计算从发出将数据传输到主机的请求时开始,到收到数据传输已完成的确认时结束。
buffer_size: 缓冲区大小。
tpu/multislice/accelerator/host_to_device_transfer_latencies Beta 版(项目)
从主机到设备的传输延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
多切片流量的每个数据块从主机到设备的传输延迟时间的累积分布。延迟时间的计算从发出将数据传输到设备的请求时开始,到收到数据传输已完成的确认时结束。
buffer_size: 缓冲区大小。
tpu/multislice/network/collective_end_to_end_latencies Beta 版(项目)
端到端总体延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
多切片流量的端到端总体延迟时间的累积分布。延迟时间的计算从发出集合请求时开始,到收到数据传输已完成的确认时结束。
input_size: 集合操作的输入大小。
collective_type:集合操作的类型。
tpu/multislice/network/dcn_transfer_latencies Beta 版(项目)
DCN 传输延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
多切片流量的网络传输延迟时间的累积分布。延迟时间的计算从发出通过 DCN 传输数据的请求时开始,到收到数据传输已完成的确认时结束。
buffer_size: 缓冲区空间。
type: 类型。
tpu/multislice/network/grpc_client_call_latencies Beta 版(项目)
gRPC 客户端调用延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
gRPC 库从调用方角度完成 RPC 所需的网络传输延迟时间的累积分布。
buffer_size: 缓冲区大小。
tpu/multislice/network/grpc_server_call_latencies Beta 版(项目)
gRPC 服务器调用延迟时间
CUMULATIVEDISTRIBUTIONus
gce_instance
gRPC 服务器从传输角度完成 RPC 所需的网络传输延迟时间的累积分布。
buffer_size: 缓冲区大小。
tpu/multislice/network/grpc_tcp_delivery_rates Beta 版(项目)
gRPC TCP 传送速率
CUMULATIVEDISTRIBUTIONMb/s
gce_instance
TCP 连接数据传输速率的累积分布。每个样本都是给定 TCP 连接在最后一个 TCP ACK 间隔内的最新平均数据传输速率。数据传输速率样本每 20 秒从 Linux TCP 内核提取一次,因此可以预期每个 TCP 连接在每个 60 秒间隔内大约会创建 3 个样本。
tpu/multislice/network/grpc_tcp_min_round_trip_times Beta 版(项目)
gRPC TCP 最短往返时间
CUMULATIVEDISTRIBUTIONus
gce_instance
每个 TCP 连接的最低网络传输延迟时间的累积分布。
tpu/multislice/network/grpc_tcp_packets_retransmitted_count Beta 版(项目)
gRPC TCP 重新传输的数据包数
CUMULATIVEINT641
gce_instance
重新传输的数据包总数。
tpu/multislice/network/grpc_tcp_packets_sent_count Beta 版(项目)
gRPC TCP 发送的数据包数
CUMULATIVEINT641
gce_instance
TCP 发送的数据包总数。
tpu/slice/capacity/available_chips Beta 版(项目)
可用 TPU 芯片数
GAUGEINT641
compute.googleapis.com/AcceleratorSlice
当前可积极使用且可供使用的扩展预留 TPU 芯片数。每 60 秒采样一次。采样后,数据最多需要 360 秒才能显示。
accelerator_type: 加速器类型和代系。
reservation_id:物理机预留的 ID。
block_id:与切片关联的块 ID。
subblock_id:与切片关联的子块 ID。
provisioning_model:关联的预配模型。
protection_tier: 关联的保护模型。
tpu/slice/capacity/committed_chips Beta 版(项目)
已购买的 TPU 芯片数
GAUGEINT641
compute.googleapis.com/AcceleratorSlice
当前已购买的扩展预留 TPU 芯片数。每 60 秒采样一次。采样后,数据最多需要 360 秒才能显示。
accelerator_type: 加速器类型和代系。
reservation_id:物理机预留的 ID。
block_id:与切片关联的块 ID。
subblock_id:与切片关联的子块 ID。
provisioning_model:关联的预配模型。
protection_tier: 关联的保护模型。

如需查看 Compute Engine 生成的指标的完整列表,请参阅 Compute Engine 指标

AI Telemetry Collector

AI Telemetry Collector 会收集并发布使用 Compute Engine API 创建的 TPU 的 TPU 指标,这些指标位于 compute.googleapis.com 命名空间下。 这些指标是内置系统指标,可提供健康状况和性能方面的可见性。

AI Telemetry Collector 架构设计为轻量级、专用 OpenTelemetry (OTEL) 收集器。它使用两个主要接收器来捕获数据:

  • TPU 运行时接收器:当机器学习工作负载处于活跃状态时,直接从 TPU 运行时抓取运行时和工作负载指标(例如工作 周期和内存用量)。
  • TPU 主机接收器:直接从设备捕获硬件利用率指标(例如 TensorCore 利用率和内存带宽利用率),无论工作负载是否正在运行。

然后,AI Telemetry Collector 使用处理器自动应用必要的资源标记(例如 project_idinstance_idzone),并将遥测数据直接安全地导出到 Cloud Monitoring。

AI Telemetry Collector 预安装在 Google 的 TPU 优化型 Ubuntu LTS 映像中,并在虚拟机启动时自动运行。 如需使用此设置,请在创建 TPU 虚拟机实例或实例模板时指定 Google 的官方加速器映像项目和系列。虚拟机启动后,AI Telemetry Collector 会自动将指标发送到 Cloud Monitoring 信息中心。

如果您要构建自定义操作系统映像,则可以在安装并运行 ai-telemetry-collector Docker 映像后使用 AI Telemetry Collector。如需了解详情,请参阅使用自定义操作系统 映像

配置

AI Telemetry Collector 会自动将指标发送到 Cloud Monitoring 信息中心,无需任何额外的配置步骤。不过, 您可以配置 Snap 软件包Docker 映像,以添加 外部导出目标、更改指标收集间隔并添加 调试选项。

您可以将默认配置替换为新的配置文件,也可以将额外的配置文件附加到现有的默认配置。 添加配置时,系统会添加尚不存在的键,并覆盖已存在的键。不过,数组和列表不是累加的,因此新列表必须包含现有值和新值。

以下 YAML 文件将 AI Telemetry Collector 配置为将指标发送到 Prometheus(一个开源系统监控和 提醒工具包)。它还启用了调试选项,该选项会在控制台中输出指标。

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889

service:
  pipelines:
    metrics:
      exporters:
      -   prometheus # For more: https://prometheus.io/docs/introduction/overview/
      -   googlecloud # If you do not include this, you'll lose Google Cloud Monitoring
      -   debug # print metrics within the console

默认操作系统

如果您使用的是 Google 的 TPU 优化型 Ubuntu LTS 映像,请运行以下 Snap 命令,将新 配置文件添加到现有配置:

sudo snap set \
  ai-telemetry-collector \
  extra-flags="--config /home/username/additional-config.yaml"

如果您想覆盖并替换现有配置,请使用 config-path 标志而不是 extra-flags

sudo snap set \
  ai-telemetry-collector \
  config-path="/home/username/new-config.yaml"

snap set 命令应触发 AI Telemetry Collector 自动重启。如需验证收集器是否已重启并成功应用您的配置,请使用以下命令查看日志:

sudo snap logs -f ai-telemetry-collector

自定义操作系统

如果您使用的是自定义操作系统,请运行以下 Docker 命令,将新配置文件添加到现有配置:

# First apply the default configs via `--config=/etc/ai-telemetry-collector/config.yaml`
# Then apply your additional config by volume mount.

docker run --privileged --net=host                                                                   \
  -v <path>/additional-config.yaml:/etc/ai-telemetry-collector/additional-config.yaml \
  ai-telemetry-collector:latest                                                       \
  --config=/etc/ai-telemetry-collector/config.yaml                                    \
  --config=/etc/ai-telemetry-collector/additional-config.yaml

如果您想覆盖并替换现有配置,请使用以下 Docker 命令:

# Mount a volume (your config file) to `/etc/ai-telemetry-collector/config.yaml`
# The binary automatically picks up this file.

docker run --privileged --net=host                                               \
  -v <path>/my-config.yaml:/etc/ai-telemetry-collector/config.yaml   \
  ai-telemetry-collector:latest

审核日志

Google Cloud 服务会生成审核日志,以记录 资源中的管理和访问 活动。 Google Cloud 如需了解详情,请参阅 Compute Engine 审核日志记录