Change create_model_card to use best eval_results when args.load_best_model_at_end==True
# 🚀 Feature request

When I use Trainer.push_to_hub, the model card that gets generated uses my most recent checkpoint's eval_results.  However, if I include load_best_model_at_end=True in my TrainingArguments, then the model that is being pushed can often be from an earlier checkpoint (right?).  The suggestion is to change create_model_card (and parse_log_history) to use the best loss when appropriate.

## Motivation

So that the reported evaluation results on the model card match the correct checkpoint of the model pushed to the hub.

## Contribution

Happy to submit a PR, with some guidance on where to make the changes.  Would it make sense to pass the trainer as an optional argument to parse_log_history and then use the training args load_best_model_at_end, metric_for_best_model, and greater_is_better to return the best loss as the eval_results if appropriate?

cc @sgugger <|||||>I don't think there is an easy way to get that loss and metrics. However, note that if you run a last `trainer.evaluate()` (as is done in all the example scripts) the loss and metrics reported will be the ones from the final model, so I would suggest doing this.<|||||>@sgugger that makes sense.  Thanks!