Метрики
Создано: 4 мая 2021 г. | Последнее обновление: 7 мая 2026 г.
API метрик.
Обзор:
API метрик в torchelastic используется для публикации телеметрических метрик. Он предназначен для использования внутренними модулями torchelastic, чтобы публиковать метрики для конечного пользователя с целью повышения прозрачности и упрощения отладки. Однако вы можете использовать тот же API в своих заданиях для публикации метрик в тот же sink.
metric можно рассматривать как данные временных рядов; он однозначно определяется кортежем строковых значений (metric_group, metric_name).
torchelastic не делает никаких предположений о том, что представляет собой metric_group и как он связан с metric_name. Пользователь сам решает, как использовать эти два поля для однозначной идентификации метрики.
Примечание
Группа метрик torchelastic зарезервирована torchelastic для метрик уровня платформы, которые она формирует. Например, torchelastic может выводить задержку (в миллисекундах) операции повторного rendezvous от агента как (torchelastic, agent.rendezvous.duration.ms)
Разумный способ использовать группы метрик — сопоставить их с этапом или модулем вашего задания. Вы также можете закодировать некоторые высокоуровневые свойства задания, например регион или этап (dev или prod).
Публикация метрик:
Использование API метрик torchelastic похоже на использование logging-фреймворка 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
@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. Если добавить следующую конфигурацию метрик, группы метрик torchelastic и my_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[исходный код]
-
class torch.distributed.elastic.metrics.api.ConsoleMetricHandler[исходный код]
-
class torch.distributed.elastic.metrics.api.NullMetricHandler[исходный код]
Методы
-
torch.distributed.elastic.metrics.configure(handler, group=None)[исходный код]
-
torch.distributed.elastic.metrics.prof(fn=None, group='torchelastic')[исходный код] -
Декоратор @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')[исходный код] -
Опубликовать точку данных метрики.
Использование
put_metric("metric_name", 1) put_metric("metric_name", 1, "metric_group_name")
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/elastic/metrics.html