Fix gradient clipping on XLA device
# What does this PR do?
This PR fixed the gradient clipping logic on XLA device. We found all_reduce is wrongfully disabled in fp16 mode when `max_grad_norm=0` on XLA gpu device. To be consistent with native pytorch behavior, all_reduce should be placed immediately after calling `self.training_step`.

Tested with the run_mlm.py example script on 8 Nvidia V100 GPU:
```sh
GPU_NUM_DEVICES=8 python -m torch_xla.distributed.xla_spawn --num_gpus 8 run_mlm.py \
    --model_name_or_path bert-base-uncased \
    --dataset_name wikitext \
    --dataset_config_name wikitext-2-raw-v1 \
    --overwrite_output_dir true \
    --output_dir /tmp/test-mlm \
    --per_gpu_train_batch_size 16 \
    --do_eval \
    --fp16 true \
    --max_grad_norm 0 \
    --do_train \
    --num_train_epochs 3
```
Results of final training losses:
| Backend | fp16 | fp32       | fp16+max_grad_norm=0| fp32+max_grad_norm=0|
| --- | ----------- | --------| ----------- | --------| 
| pytorch cuda| 1.8649 | 1.8575 | 1.8753 | 1.8694 |
| torch_xla cuda| 1.86 | 1.8576 | 1.8694 | 1.867|

cc @sgugger
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_20116). All of your documentation changes will be reflected on that endpoint.<|||||>This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.