class_docstr: TrainLoop contains the core training loop logic.
class_docstr_tok: ["TrainLoop","contains","the","core","training","loop","logic","."]
docstr: Sync training metrics across workers.
  
  A handful of special cases are handled as exceptions, and the remaining metrics
  are simply averaged across workers.
docstr_tok: ["Sync","training","metrics","across","workers",".","A","handful","of","special","cases","are","handled","as","exceptions",",","and","the","remaining","metrics","are","simply","averaged","across","workers","."]
code: def _sync_metrics(self, metrics):
      """
      Sync training metrics across workers.
  
      A handful of special cases are handled as exceptions, and the remaining metrics
      are simply averaged across workers.
      """
      if not is_distributed():
          # nothing special needed
          return metrics
      all_versions = all_gather_list(metrics)
      return aggregate_unnamed_reports(all_versions)
  
imports: import copy
  import random
  import torch
  import json
  import os
  import signal
  from typing import Tuple
  import numpy
  import parlai.utils.logging
  from parlai.core.agents import create_agent, create_agent_from_shared
  from parlai.core.exceptions import StopTrainException
  from parlai.core.logs import TensorboardLogger, WandbLogger, ClearMLLogger
  from parlai.core.metrics import Metric
  from parlai.core.metrics import aggregate_named_reports, aggregate_unnamed_reports, dict_report
  from parlai.core.opt import Opt
  from parlai.core.params import ParlaiParser, print_announcements
  from parlai.core.script import ParlaiScript, register_script
  from parlai.core.worlds import create_task, World
  from parlai.scripts.build_dict import build_dict, setup_args
  from parlai.scripts.eval_model import get_task_world_logs
  from parlai.utils.distributed import sync_object, is_primary_worker, all_gather_list, is_distributed, get_rank, num_workers
  from parlai.utils.io import PathManager
  from parlai.utils.misc import Timer, nice_report
  from parlai.utils.world_logging import WorldLogger
label_desc: Use image node_id 8 for calling the TrainLoop obj's underlying member method code with example usage: obj._sync_metrics(metrics) and returns: aggregate_unnamed_reports, metrics