[`Llava`] Add Llava to transformers
Author: younesbelkada
Pull request: yes

# What does this PR do?

Adds Llava -  a multimodal model in transformers library.
Llava is a multi-modal model that claims to have competitive performance than GPT-4 for multi-modal tasks. There are currently 3 main variants of this architecture:

- Llava - Llama 
- Llava - MPT 
- Llava - Mistral (known as Bakllava): https://github.com/SkunkworksAI/BakLLaVA 

This implementation leverages `AutoModelForCausalLM` , similarly as `Blip2` to load the correct language model. The goal of this PR is to make it agnostic across all language models architectures.

Closes https://github.com/huggingface/transformers/pull/25789 
Closes https://github.com/huggingface/transformers/pull/27221

Original llava author:  https://github.com/haotian-liu/LLaVA @haotian-liu
Original PR author: @shauray8 


```python
import requests
from PIL import Image

import torch
from transformers import AutoProcessor, LlavaForVisionText2Text

model_id = "llava-hf/llava-1.5-7b-hf"
processor = AutoProcessor.from_pretrained(model_id)

prompt = "<image>\n"
prompt += "USER: What are the things I should be cautious about when I visit this place?\nASSISTANT:"
image_file = "https://llava-vl.github.io/static/images/view.jpg"

model = LlavaForVisionText2Text.from_pretrained(model_id, torch_dtype=torch.float16, low_cpu_mem_usage=True).to(0)

raw_image = Image.open(requests.get(image_file, stream=True).raw)
inputs = processor(prompt, raw_image, return_tensors='pt').to(0, torch.float16)

output = model.generate(**inputs, max_new_tokens=200)
print(processor.decode(output[0][2:], skip_special_tokens=True))
>>> USER: What are the things I should be cautious about when I visit this place?
ASSISTANT: When visiting this place, which appears to be a dock or pier extending into a body of water, you should be cautious about several factors. First, be aware of the water depth and any potential hazards, such as submerged rocks or debris, that could pose a risk to your safety. Second, be mindful of the weather conditions, as sudden changes in weather can make the dock or pier unsafe to use. Third, be cautious of the surrounding environment, as there may be wildlife or other natural elements that could pose a threat. Finally, be aware of any local regulations or guidelines for using the dock or pier, as these may include rules about fishing, swimming, or other activities. By being cautious and following any applicable guidelines, you can ensure a safe and enjoyable experience at this location.
```

![Image](https://llava-vl.github.io/static/images/view.jpg)


Comments:
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_27662). All of your documentation changes will be reflected on that endpoint.

Bakllava weights successfully converted here: https://huggingface.co/ybelkada/BakLlava-v1-hf

All converted checkpoints are now under this organization: https://huggingface.co/llava-hf

Hello, can you tell me how to use `LlavaForConditionalGeneration` in transformers to train from scratch? I want to use the weights of Vicuna and Clip Vision Transformer for training, just like the original author did.