Trainer callbacks such as on_epoch_end do not pass in the documented eval dataloader
Author: scowan1995
Pull request: no

## Environment info
<!-- You can run the command `transformers-cli env` and copy-and-paste its output below.
     Don't forget to fill out the missing fields in that output! -->

- `transformers` version: 4.4.2
- Platform: ubuntu 20
- Python version: 3.8.5
- PyTorch version (GPU?): Happens on GPU and no GPU
- Tensorflow version (GPU?): not used
- Using GPU in script?: I check if it is available and use it if it is
- Using distributed or parallel set-up in script?: no

### Who can help


@sgugger 


## Information

Model I am using (Bert, XLNet ...): Bert

The problem arises when using:
* [ ] the official example scripts: (give details below)
* [X] my own modified scripts: (give details below)

The tasks I am working on is:
* [ ] an official GLUE/SQUaD task: (give the name)
* [X ] my own task or dataset: (give details below)

## To reproduce
Create an on_epoch_end callback and attempt to use the documented eval_dataloader. You will find it is not passed in.
Even printing out the kwargs shows the training dataloader but not the eval dataloader. If you look at trainer.py at line 1048 you will see that all the correct arguments are attached to the callback except the eval_dataloader.

Additionally the documentation on the website is wrong as it describes the eval dataloader as the dataloader used for training just like the train dataloader.

Steps to reproduce the behavior:

1. Create on_epoch_end callback
2.attempt to use the documented eval_dataloader

<!-- If you have code snippets, error messages, stack traces please provide them here as well.
     Important! Use code tags to correctly format your code. See https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting
     Do not use screenshots, as they are hard to read and (more importantly) don't allow others to copy-and-paste your code.-->

## Expected behavior
I would expect thee able to access the eval dataloader in the callback


I am happy to help with this if it is as simple as it seems.


Comments:
It seems like the solution would be to just add
```
self.callback_handler.eval_dataloader = eval_dataloader
```
below line 1051 in trainer.py and then fix the documentation. 

I see the eval_dataloader can be attached in the prediction_loop function but that doesn't seem to take effect when my callback is called during training. I want to see how my metrics change at the end of every epoch so I need to use the eval dataloader.

The evaluation dataloader does not exist at this step, it is only accessible in the evaluation loop, which is why it's attached [here only](https://github.com/huggingface/transformers/blob/5bf5d50c8dae2e54327a754aa476f13a0308f844/src/transformers/trainer.py#L1892). 

It will exist and be passed to the `on_epoch_end` event but only if one evaluation loop has run before. The problem you might be encountering is that if you have set your `evaluation_strategy` to `epochs`, the evaluation dataloader will not be present at the first `on_epoch_end`: that's because this is the event that triggers the evaluation after each epoch in the main `DefaultFlowCallback`. 

This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/master/CONTRIBUTING.md) are likely to be ignored.