ViTModel extract only last layer's attention weights
### Feature request

See: https://huggingface.co/docs/transformers/model_doc/vit#transformers.ViTModel

I propose a new keyword argument for `forward()`, `output_attention_layers: Tuple[int, ...] = (,)`, that allows one to specify which layers to extract attention weights for when `output_attentions=True`. When specified, other layers' attention weights are **immediately discarded to save VRAM**.

### Motivation

Setting `output_attentions=True` currently returns attention weights for all layers. When using a high resolution, this uses a prohibitive amount of VRAM, resulting in CUDA OOM.

For context, I am developing a model that could benefit from utilizing the last layer attention weights of DINO. However, I currently OOM when I try and train at a higher resolution. After experimenting with the various return options for `forward()`, I realised `output_attentions` and `output_hidden_states` use much more VRAM than just returning the last hidden state. As such, I am unable to feasibly train my model without pre-caching DINO's outputs.

### Your contribution

I might be able to work on a PR during the weekends.
Or you can adapt the modeling code of ViT to suit your needs. That is why each model is fully defined in their modeling file.<|||||>I see, okay then.