Metric calculation across batches in seq2seq examples
### Who can help
@sshleifer, @patil-suraj

## Information

Currently, the seq2seq finetune script calculates the final metrics (bleu or rouge) per batch, and then simply averages these numbers across batches. Is it correct? For example, I just took a brief look at sacrebleu (which the script uses), and it seems that `corpus_bleu(preds, targets)` isn't necessarily equal to `(corpus_bleu(preds[:n], targets[:n] + corpus_bleu(preds[n:], targets[n:])/2`.
Definitely not correct. Additionally, the final batch might be much smaller (and still weighted evenly). To get "perfect" bleu scores use `run_distributed_eval.py`
<|||||>Right, that's what I thought as well. If we think saving all the intermediate output and computing the bleu score once at the end of each validation epoch is too memory-intensive, one solution would be to accumulate intermediate BLEU-internal metrics, and compute the BLEU score at the end. This way the asymptotic memory complexity wouldn't depend on the validation set size. C.f. the AllenNLP implementation. At the very least, I think we should give a warning or something so that people realize this is not a precise number and wouldn't use it, say, in a paper.<|||||>Hey @ZhaofengWu 

This is now fixed in the new `run_seq2seq.py` script.