Got it - so is there a difference between EpochMetric and custom metrics with respect to distributed training? And what case scenarios (i.e. not scalars) can I not use ignite if I’m using distributed training? For example, I’m assuming the following won’t work?
class Correlation(Metric):
    def __init__(self, output_transform=lambda x: x):

        self._list_of_ETC = []
        self._list_of_errors = []
        super(Correlation, self).__init__(output_transform=output_transform)

    @reinit__is_reduced
    def reset(self):
        self._list_of_ETC = []
        self._list_of_errors = []
        super(Correlation, self).reset()

    @reinit__is_reduced
    def update(self, output):

        mini_list_of_ETC, mini_list_of_errors = output

        self._list_of_ETC.append(mini_list_of_ETC)
        self._list_of_errors.append(mini_list_of_errors)
        pdb.set_trace()

    @sync_all_reduce("_list_of_ETC", "_list_of_errors")
    def compute(self):

        if len(self._list_of_ETC) == 0:
            raise NotComputableError(
                "ETC must have at least 1 element."
            )

        if len(self._list_of_errors) == 0:
            raise NotComputableError(
                "ETC must have at least 1 element."
            )

        if len(self._list_of_ETC) != len(self._list_of_errors):
            raise NotComputableError(
                "Number of ETC must be equal to number of errors!"
            )

        corr, p_value = pearsonr(self._list_of_ETC, self._list_of_errors)

        return corr


Is there anyway to use Ignite and distributed training in this case? I’m 99% of the time going to be using more than 1 gpu in the near future.
Thanks!