Avoid saving tied weights with sharded checkpoints
It seems that when sharding a checkpoint we untie weights which makes them take more space
```python
import torch
from transformers import GPT2LMHeadModel, GPT2Config

config = GPT2Config()
model = GPT2LMHeadModel(config)
assert id(model.transformer.wte.weight) == id(model.lm_head.weight)
model.save_pretrained("gpt2-tied-weights")

config.tie_word_embeddings = False
model = GPT2LMHeadModel(config)
assert id(model.transformer.wte.weight) != id(model.lm_head.weight)
model.save_pretrained("gpt2-untied-weights")

config = GPT2Config()
model = GPT2LMHeadModel(config)
assert id(model.transformer.wte.weight) == id(model.lm_head.weight)
model.save_pretrained("gpt2-tied-weights-sharded", max_shard_size="100MB")

config.tie_word_embeddings = False
model = GPT2LMHeadModel(config)
assert id(model.transformer.wte.weight) != id(model.lm_head.weight)
model.save_pretrained("gpt2-untied-weights-sharded", max_shard_size="100MB")
```

When checking the space taken by these checkpoints:
```
$ du -sh gpt2*
475M    gpt2-tied-weights
622M    gpt2-tied-weights-sharded   # MUST BE 475M
622M    gpt2-untied-weights
622M    gpt2-untied-weights-sharded
```
cc @ArthurZucker @thomasw21 
I don't think that developing the logic that would avoid this is really worth the time it will require, but we can leave this issue as a reference point.<|||||>Hum I don't think it should take that long. I can have a go at it. I do think it's an easy win.