• 文档 >
  • 火炬分布式弹性 >
  • 指标
快捷键

指标

指标 API。

概述:

torchelastic 中的指标 API 用于发布遥测指标。它旨在供 torchelastic 的内部模块使用,以向最终用户发布指标,目的是提高可见性和帮助调试。然而,您也可以在您的作业中使用相同的 API 将指标发布到相同的指标 sink

一个 metric 可以被视为时间序列数据,并且由一个字符串值元组 (metric_group, metric_name) 唯一标识。

torchelastic 对 metric_group 是什么以及它与 metric_name 之间有什么关系没有任何假设。这两个字段的使用完全取决于用户,以唯一标识一个指标。

注意

索引组 torchelastic 由 torchelastic 保留,用于平台级别的指标,它产生。例如,torchelastic 可能会输出代理的重 rendezvous 操作的延迟(以毫秒为单位)作为 (torchelastic, agent.rendezvous.duration.ms)

使用指标组的一个合理方式是将它们映射到作业中的某个阶段或模块。您还可以将作业的某些高级属性(如区域或阶段(开发 vs 生产))编码到其中。

发布指标:

使用 torchelastic 的指标 API 类似于使用 Python 的日志框架。您首先需要配置一个指标处理器,然后再尝试添加指标数据。

下面的示例测量了 calculate() 函数的延迟。

import time
import torch.distributed.elastic.metrics as metrics

# makes all metrics other than the one from "my_module" to go /dev/null
metrics.configure(metrics.NullMetricsHandler())
metrics.configure(metrics.ConsoleMetricsHandler(), "my_module")


def my_method():
    start = time.time()
    calculate()
    end = time.time()
    metrics.put_metric("calculate_latency", int(end - start), "my_module")

您还可以使用 torch.distributed.elastic.metrics.prof 装饰器方便快捷地对函数进行性能分析。

# -- in module examples.foobar --

import torch.distributed.elastic.metrics as metrics

metrics.configure(metrics.ConsoleMetricsHandler(), "foobar")
metrics.configure(metrics.ConsoleMetricsHandler(), "Bar")


@metrics.prof
def foo():
    pass


class Bar:
    @metrics.prof
    def baz():
        pass

将发布以下指标

<leaf_module or classname>.success - 1 if the function finished successfully
<leaf_module or classname>.failure - 1 if the function threw an exception
<leaf_module or classname>.duration.ms - function duration in milliseconds

配置指标处理器:

torch.distributed.elastic.metrics.MetricHandler 负责将添加的指标值输出到特定的目的地。可以使用不同的指标处理器配置指标组。

默认情况下,torchelastic 将所有指标输出到 /dev/null 。通过添加以下配置, torchelasticmy_app 指标组将被打印到控制台。

import torch.distributed.elastic.metrics as metrics

metrics.configure(metrics.ConsoleMetricHandler(), group="torchelastic")
metrics.configure(metrics.ConsoleMetricHandler(), group="my_app")

编写自定义指标处理器:

如果您希望将指标输出到自定义位置,请实现 torch.distributed.elastic.metrics.MetricHandler 接口,并配置作业使用您的自定义指标处理器。

下面是一个玩具示例,将指标打印到 stdout

import torch.distributed.elastic.metrics as metrics


class StdoutMetricHandler(metrics.MetricHandler):
    def emit(self, metric_data):
        ts = metric_data.timestamp
        group = metric_data.group_name
        name = metric_data.name
        value = metric_data.value
        print(f"[{ts}][{group}]: {name}={value}")


metrics.configure(StdoutMetricHandler(), group="my_app")

现在,组 my_app 中的所有指标都将打印到 stdout,如下所示:

[1574213883.4182858][my_app]: my_metric=<value>
[1574213940.5237644][my_app]: my_metric=<value>

指标处理器 ¶

以下是 torchelastic 附带的一些指标处理器。

class torch.distributed.elastic.metrics.api.MetricHandler[source][source]
class torch.distributed.elastic.metrics.api.ConsoleMetricHandler[source][source]
class torch.distributed.elastic.metrics.api.空指标处理器[source][source] ¶

方法

torch.distributed.elastic.metrics.configure(handler, group=None)[source][source]
torch.distributed.elastic.metrics.prof(fn=None, group='torchelastic')[source][source]

@profile 装饰器为被装饰的函数发布 duration.ms、count、success、failure 指标。

默认情况下,指标名称为函数的限定名( class_name.def_name )。如果函数不属于类,则使用叶模块名称代替。

使用说明

@metrics.prof
def x():
    pass


@metrics.prof(group="agent")
def y():
    pass
torch.distributed.elastic.metrics.put_metric(metric_name, metric_value, metric_group='torchelastic')[source][source]

发布指标数据点。

使用说明

put_metric("metric_name", 1)
put_metric("metric_name", 1, "metric_group_name")

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,主题由 Read the Docs 提供。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源