def eval_step_get_features_cpu(
    outputs: Dict[str, Any], *,
    metric_params: Dict[str, Any],
    model_suffix_list: Iterable[str] = ('',),
    config: ml_collections.ConfigDict) -> EvalFeatureDictCPU:
  """Extract features on cpu to compute eval metrics.

  Args:
    outputs: Dict of original video, generated video and batch_mask.
    metric_params: Params for metric models.
    model_suffix_list: Tuple of model suffixes, '' for the default and '_ema'
      for the ema model.
    config: Configurations of the experiment.

  Returns:
    Extracted metric features. A dictionary mapping the feature name (e.g.
    fad_vggish_orig) to a dictionary of (str, np.array).
    Example:
    if config.eval.enable_fad_vggish == True
    features['fad_vggish_orig'] = {
        'vggish_embedding': [total_batch_size, 256]
        }
  """
  features = {}
  del metric_params, model_suffix_list


  if features:
    features = train_utils.all_gather_cpu(features)
  return features  # total_batch_size, ...
Extract features on cpu to compute eval metrics.

  Args:
    outputs: Dict of original video, generated video and batch_mask.
    metric_params: Params for metric models.
    model_suffix_list: Tuple of model suffixes, '' for the default and '_ema'
      for the ema model.
    config: Configurations of the experiment.

  Returns:
    Extracted metric features. A dictionary mapping the feature name (e.g.
    fad_vggish_orig) to a dictionary of (str, np.array).
    Example:
    if config.eval.enable_fad_vggish == True
    features['fad_vggish_orig'] = {
        'vggish_embedding': [total_batch_size, 256]
        }
  
videogvt/train_lib/eval_utils.py