def METHOD_NAME(logging_outputs):
    """Aggregate logging outputs from data parallel training."""
    correct_sum = sum(log.get("correct", 0) for log in logging_outputs)
    total_sum = sum(log.get("total", 0) for log in logging_outputs)
    loss_sum = sum(log.get("loss", 0) for log in logging_outputs)
    ntokens = sum(log.get("ntokens", 0) for log in logging_outputs)
    nsentences = sum(log.get("nsentences", 0) for log in logging_outputs)
    sample_size = sum(log.get("sample_size", 0) for log in logging_outputs)
    nframes = sum(log.get("nframes", 0) for log in logging_outputs)
    agg_output = {
        "loss": loss_sum / sample_size / math.log(2) if sample_size > 0 else 0.0,
        # if args.sentence_avg, then sample_size is nsentences, then loss
        # is per-sentence loss; else sample_size is ntokens, the loss
        # becomes per-output token loss
        "ntokens": ntokens,
        "nsentences": nsentences,
        "nframes": nframes,
        "sample_size": sample_size,
        "acc": correct_sum * 100.0 / total_sum if total_sum > 0 else 0.0,
        "correct": correct_sum,
        "total": total_sum,
        # total is the number of validate tokens
    }
    if sample_size != ntokens:
        agg_output["nll_loss"] = loss_sum / ntokens / math.log(2)
    # loss: per output token loss
    # nll_loss: per sentence loss
    return agg_output