捷徑

Metrics

Metrics API。

概述:

torchelastic 中的 metrics API 用於發布遙測指標。它旨在供 torchelastic 的內部模組使用,以向最終使用者發布指標,從而提高可見性並協助偵錯。 但是,您可以在您的 jobs 中使用相同的 API,將指標發布到相同的 metrics sink

一個 metric 可以被認為是時間序列資料,並由字串值元組 (metric_group, metric_name) 唯一標識。

torchelastic 不假設 metric_group 是什麼,以及它與 metric_name 有什麼關係。 完全由使用者決定使用這兩個欄位來唯一標識一個指標。

注意

度量群組 torchelastic 由 torchelastic 保留,用於它產生的平台層級度量。例如,torchelastic 可能會將代理程式重新協商操作的延遲(以毫秒為單位)輸出為 (torchelastic, agent.rendezvous.duration.ms)

使用度量群組的合理方式是將它們映射到您作業中的階段或模組。您也可以對作業的某些高階屬性進行編碼,例如區域或階段(開發 vs 生產)。

發布度量:

使用 torchelastic 的度量 API 類似於使用 Python 的 logging 框架。您必須先配置度量處理器,然後才能嘗試添加度量資料。

下面的範例測量 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

@metrics.prof 將發布以下度量

<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.NullMetricHandler[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 的完整開發人員文件

檢視文件

教學

取得針對初學者和進階開發人員的深入教學

檢視教學

資源

尋找開發資源並獲得問題解答

查看資源