add GPTSAN model
Author: tanreinama
Pull request: yes

# Model description

GPTSAN is a Japanese language model using Switch Transformer. It has the same structure as the model introduced as Prefix LM in the T5 paper, and works with both Test Generation and Masked Language Model.

To add this model to the transformer, I did the following:
Porting GPTSAN to PyTorch. Model conversion. Creating model cards in HuggingFace Hub. Porting generation code.
The model card has already been uploaded. (https://huggingface.co/Tanrei/GPTSAN-japanese/)

Tokenizer uses GPT-NeoX-Japanese, and only new vocabulary files are uploaded to the model card. Minor differences are absorbed within the generation algorithm in the model's source code.

GPTSAN repository is:
https://github.com/tanreinama/GPTSAN

Discussion of HuggingFace integration is:
https://github.com/tanreinama/GPTSAN/issues/2

Thanks to: @ArthurZucker and @younesbelkada


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

generate() now works with greedy_gen_mode, but I want contrastive_search to be the default. Is there any reference code somewhere for that?

Yes, contrastive search should be supported in `transformers` but I think you need to tweak the caching mechanism. Maybe @gante can help here as I am not really sure 🙏 

ok. I was confused about contrastive_search. This will work almost fine.
```
model.config.use_cache=True
model.config.do_sample=True
c = model.generate(x_tok, logits_processor=LogitsProcessorList([TopKLogitsWarper(120)]))
```

I would like to override _get_logits_processor and add TopKLogitsWarper to the default logs_processor.
```
logits_processor = super()._get_logits_processor(...)
if generation_config.top_k is not None:
    logits_processor.append(TopKLogitsWarper(generation_config.top_k))
return logits_processor
```

There was also a misunderstanding about the caching mechanism. I thought that cache saves everything up to the last time, and that SequenceLength is 1 every time forward is called, but it seems that's not the case. I can make it compatible.

@tanreinama @younesbelkada contrastive search _should_ work out of the box if the model uses the usual caching mechanism. Prefix LM models are not the case, sadly (it's probably the same issue as GIT, which is also a prefix LM model) 😅 

I'd suggest to skip contrastive search for now, and to fix it in a subsequent PR (skip = skip tests and override `contrastive_search` such that an informative exception is thrown). I should be able to give better advice after I see what's happening with GIT :)

@ArthurZucker @younesbelkada
I have committed some updates in response to your comments.

In unit tests, the `wav2vec2_with_lm` module is causing errors. Is this due to conflicts? I didn't touch the this package...

The failing test is not related to you! If you pull from main it might get resolved! However you have `FAILED tests/models/gptsan_japanese/test_modeling_gptsan_japanese.py::GPTSANJapaneseForConditionalGenerationTest::test_logits - Failed: Timeout >120.0s` which means either the test should be marked as `#slow` or there is an issue int his test 👍🏻 

I sync and pull from main so it closed automatically. I'll create new PR from merged code. thx,