Files
ray-project--ray/python/ray/train/v2/_internal/callbacks/user_callback.py
T
2026-07-13 13:17:40 +08:00

55 lines
1.7 KiB
Python

from typing import Any, Dict, List
from ray.train.v2._internal.execution.callback import (
ReportCallback,
WorkerGroupCallback,
)
from ray.train.v2._internal.execution.context import TrainRunContext
from ray.train.v2._internal.execution.training_report import _TrainingReport
from ray.train.v2._internal.execution.worker_group import WorkerGroupPollStatus
from ray.train.v2.api.callback import UserCallback
class UserCallbackHandler(WorkerGroupCallback, ReportCallback):
"""Responsible for calling methods of subscribers implementing
the `UserCallback` interface.
"""
def __init__(
self, user_callbacks: List[UserCallback], train_run_context: TrainRunContext
):
self._user_callbacks = user_callbacks
self._train_run_context = train_run_context
# --------------------------
# ReportCallback
# --------------------------
def after_report(
self,
training_report: _TrainingReport,
metrics: List[Dict[str, Any]],
):
for user_callback in self._user_callbacks:
user_callback.after_report(
run_context=self._train_run_context,
metrics=metrics,
checkpoint=training_report.checkpoint,
)
# --------------------------
# WorkerGroupCallback
# --------------------------
def after_worker_group_poll_status(
self, worker_group_status: WorkerGroupPollStatus
):
if not worker_group_status.errors:
return
for user_callback in self._user_callbacks:
user_callback.after_exception(
run_context=self._train_run_context,
worker_exceptions=worker_group_status.errors,
)