[GPT2, CTRL] Allow input of input_ids and past of variable length
Author: patrickvonplaten
Pull request: yes

## Description

This PR reverts the automatic cutting of input ids as introduced in PR: https://github.com/huggingface/transformers/pull/3734 and fixes issue https://github.com/huggingface/transformers/issues/4368 .

Currently, when `past` is used in combination with `input_ids`, the `input_ids` are cut to just the last token. This breaks certain functionality as explained in Issue: #4368. 

Also, the documentation is made more precise for GPT2 and CTRL.

## Backward Compatibility

This PR slightly breaks backward compatibility since `input_ids` now have to be input according to `past` and are **not** cut automatically for example for automatic language generation. So the functionality is as it was before version 2.8.0.

Comments:
# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=h1) Report
> Merging [#4581](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/4c6b21805647f3a96737a50390a4c3e9463d8ef7&el=desc) will **increase** coverage by `0.00%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/4581/graphs/tree.svg?width=650&height=150&src=pr&token=9qOlN6Hb1c)](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master    #4581   +/-   ##
=======================================
  Coverage   78.09%   78.09%           
=======================================
  Files         123      123           
  Lines       20617    20596   -21     
=======================================
- Hits        16100    16084   -16     
+ Misses       4517     4512    -5     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/modeling\_ctrl.py](https://codecov.io/gh/huggingface/transformers/pull/4581/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19jdHJsLnB5) | `98.64% <ø> (+0.83%)` | :arrow_up: |
| [src/transformers/modeling\_gpt2.py](https://codecov.io/gh/huggingface/transformers/pull/4581/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19ncHQyLnB5) | `86.21% <ø> (+0.01%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_ctrl.py](https://codecov.io/gh/huggingface/transformers/pull/4581/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9jdHJsLnB5) | `98.40% <ø> (ø)` | |
| [src/transformers/modeling\_tf\_gpt2.py](https://codecov.io/gh/huggingface/transformers/pull/4581/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9ncHQyLnB5) | `95.66% <ø> (+0.22%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/4581/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl91dGlscy5weQ==) | `88.66% <0.00%> (+0.16%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=footer). Last update [4c6b218...8350637](https://codecov.io/gh/huggingface/transformers/pull/4581?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


> LGTM, awesome!
> 
> Should we fix some examples or pipeline accordingly?

The generation method works fine, since `prepare_input_ids` for GPT2 and CTRL only took the last input_ids anyways. So all methods relying on `generate()` are fine including the pipeline and `run_generation` examples => so we should be good!