def METHOD_NAME(self, predict_dataset, predict_examples, ignore_keys=None, metric_key_prefix: str = "test"):
    predict_dataloader = self.get_test_dataloader(predict_dataset)
    compute_metrics = self.compute_metrics
    self.compute_metrics = None
    eval_loop = self.evaluation_loop
    try:
        output = eval_loop(
            predict_dataloader,
            description="Prediction",
            prediction_loss_only=True if compute_metrics is None else None,
            ignore_keys=ignore_keys,
        )
    finally:
        self.compute_metrics = compute_metrics
    if self.post_process_function is not None and self.compute_metrics is not None:
        pred_rst, gt_rst, eval_preds = self.post_process_function(
            predict_examples, predict_dataset, output.predictions, output.label_ids
        )
        self.save_predictions("test", pred_rst, gt_rst)
        metrics = self.compute_metrics(eval_preds)
        if self.convert_fn is not None:
            processed_metrics = self.convert_fn(pred_rst, self.args.output_dir)
            if processed_metrics is not None:
                metrics.update(processed_metrics)
        # Prefix all keys with metric_key_prefix + '_'
        for key in list(metrics.keys()):
            if not key.startswith(f"{metric_key_prefix}_"):
                metrics[f"{metric_key_prefix}_{key}"] = metrics.pop(key)
    else:
        metrics = {}
    return metrics