O2 style amp for gpt3 ptuning
1. Fixes a precision bug for ptuning which improves perf by  ~25% 
- If model is in bf16, Pytorch autocasting currently unnecessarily casts operations to be in fp16 from bf16, and casts the output back again to bf16 
- This fix keeps the precision in bf16, removing many unnecessary casts

2. Implements amp O2 which improves convergence times

- O2 accumulates prompt encoder gradients in fp32 master weights, rather than in bf16 or fp16 currently


![Capture](https://user-images.githubusercontent.com/67203904/202251706-4ff787fb-c1ee-4fab-8d16-201c26801a0b.PNG)
(validation loss of GPT3 530b on 7 nodes, O2 (orange) vs baseline (pink))
