CI dependency wheel caching
Author: LysandreJik
Pull request: yes

In the past week there has been a drastic increase of Circle CI test failures due to mismatching hash for large dependencies (Torch and TensorFlow), exemple [here](https://app.circleci.com/pipelines/github/huggingface/transformers/9954/workflows/2e3a66e6-8aa5-414a-9ee0-ba395be226cb/jobs/68258):
```
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    tensorflow from https://files.pythonhosted.org/packages/97/ae/0b08f53498417914f2274cc3b5576d2b83179b0cbb209457d0fde0152174/tensorflow-2.3.0-cp36-cp36m-manylinux2010_x86_64.whl#sha256=5c9f9a36d5b4d0ceb67b985486fe4cc6999a96e2bf89f3ba82ffd8317e5efadd (from transformers==3.0.2):
        Expected sha256 5c9f9a36d5b4d0ceb67b985486fe4cc6999a96e2bf89f3ba82ffd8317e5efadd
             Got        2b6dbd560e2f78ccad4c831d170a8612fb592a562a128c05aa6d64f84baa17e5
```
The issue stems from incomplete downloads when Circle CI downloads the wheels in order to install the dependencies. The download is halted, the file is incomplete which results in a different hash.

With this PR, the CirlceCI `~/.cache/pip` directory which contains the downloaded wheels is cached between runs, which means that the files won't be re-downloaded as long as the latest version is available in the cache. A cache is created for each workflow.

Unfortunately, CircleCI does not make it available to update the cache nor to delete the cache. If a new version of either Torch or TensorFlow is released, the cache won't be updated until we update either `setup.py`, the cache version, or until the cache expires 15 days after its creation.

If the cache works well enough, I'll include `~/.cache/torch` in the cache, so that all the downloads done during the tests are saved in the cache as well. This should prevent other flaky tests from happening due to missing models on the S3.

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

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

```diff
@@            Coverage Diff             @@
##           master    #6287      +/-   ##
==========================================
+ Coverage   79.68%   80.45%   +0.77%     
==========================================
  Files         146      146              
  Lines       26595    26595              
==========================================
+ Hits        21192    21397     +205     
+ Misses       5403     5198     -205     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/6287?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/file\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/6287/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9maWxlX3V0aWxzLnB5) | `80.05% <0.00%> (-0.26%)` | :arrow_down: |
| [src/transformers/tokenization\_dpr.py](https://codecov.io/gh/huggingface/transformers/pull/6287/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fZHByLnB5) | `57.65% <0.00%> (+4.50%)` | :arrow_up: |
| [src/transformers/generation\_tf\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/6287/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9nZW5lcmF0aW9uX3RmX3V0aWxzLnB5) | `86.46% <0.00%> (+5.76%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_gpt2.py](https://codecov.io/gh/huggingface/transformers/pull/6287/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9ncHQyLnB5) | `95.31% <0.00%> (+23.43%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_flaubert.py](https://codecov.io/gh/huggingface/transformers/pull/6287/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9mbGF1YmVydC5weQ==) | `88.19% <0.00%> (+63.97%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/6287?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/6287?src=pr&el=footer). Last update [d89acd0...f3776aa](https://codecov.io/gh/huggingface/transformers/pull/6287?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


> If the cache works well enough, I'll include `~/.cache/torch` in the cache, so that all the downloads done during the tests are saved in the cache as well. This should prevent other flaky tests from happening due to missing models on the S3.

If the model is missing on S3, it should be reported as a failure, shouldn't it?

I wouldn't include `~/.cache/torch` in the cache because layering multiple caches (files are already behind a CDN) tends to lead to hard to debug bugs

@julien-c These flaky failing tests are saying that the model is missing on S3, while it isn't. It's available, but since CircleCI has connection issues it reports those with an error. I'll link such a failing test here when there is one.