Enforce same behavior as PyTorch 2.0 for older versions
# What does this PR do?

The default of `set_to_none` will change in PyTorch 2.0 because it is slightly better in terms of memory consumption. This PR uses it for all versions of PyTorch in the Trainer.
_The documentation is not available anymore as the PR was closed or merged._<|||||>hmm, that didn't work on DS side - perhaps they have an old pytorch - checking

```
2023-03-13T21:25:45.7750922Z Traceback (most recent call last):
2023-03-13T21:25:45.7751317Z   File "/tmp/actions-runner/_work/DeepSpeed/DeepSpeed/transformers/examples/pytorch/translation/run_translation.py", line 664, in <module>
2023-03-13T21:25:45.7751409Z     main()
2023-03-13T21:25:45.7751794Z   File "/tmp/actions-runner/_work/DeepSpeed/DeepSpeed/transformers/examples/pytorch/translation/run_translation.py", line 581, in main
2023-03-13T21:25:45.7751970Z     train_result = trainer.train(resume_from_checkpoint=checkpoint)
2023-03-13T21:25:45.7752299Z   File "/tmp/actions-runner/_work/DeepSpeed/DeepSpeed/transformers/src/transformers/trainer.py", line 1631, in train
2023-03-13T21:25:45.7752421Z     return inner_training_loop(
2023-03-13T21:25:45.7752790Z   File "/tmp/actions-runner/_work/DeepSpeed/DeepSpeed/transformers/src/transformers/trainer.py", line 1814, in _inner_training_loop
2023-03-13T21:25:45.7752913Z     model.zero_grad(set_to_none=True)
2023-03-13T21:25:45.7753166Z TypeError: zero_grad() got an unexpected keyword argument 'set_to_none'
```<|||||>They are using torch==1.8.2 and it fails, which means that this change will break for any user with older pytorch versions - let me find out when `set_to_none` was added.

Using this as a test:
```
python -c 'import torch; m=torch.nn.Linear(1,1); m.zero_grad(set_to_none=True)'
```