{ "

Adam Optimizer for Half Precision Training

\n": "

\u0d85\u0da9\u0d9a\u0dca\u0db1\u0dd2\u0dbb\u0dc0\u0daf\u0dca\u0dba\u0dad\u0dcf\u0dc0 \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0 \u0dc3\u0db3\u0dc4\u0dcf \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba

\n", "

Adam Optimizer for Half Precision Training

\n

We extend Adam Optimizer but use FP32 to store gradients and moments.

\n": "

\u0d85\u0da9\u0d9a\u0dca\u0db1\u0dd2\u0dbb\u0dc0\u0daf\u0dca\u0dba\u0dad\u0dcf\u0dc0 \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0 \u0dc3\u0db3\u0dc4\u0dcf \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba

\n

\u0d85\u0db4\u0dd2 \u0d87\u0da9\u0db8\u0dca \u0d94\u0db4\u0dca\u0da7\u0dd2\u0db8\u0dba\u0dd2\u0dc3\u0dbb\u0dca \u0daf\u0dd3\u0dbb\u0dca extend \u0d9a\u0dbb\u0db1 \u0db1\u0db8\u0dd4\u0dad\u0dca \u0dc1\u0dca\u0dbb\u0dda\u0dab\u0dd2 \u0dc3\u0dc4 \u0db8\u0ddc\u0dc4\u0ddc\u0dad \u0d9c\u0db6\u0da9\u0dcf \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf FP32 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db8\u0dd4.

\n", "

Gradient Scaler with half precision gradients

\n

We extend PyTorch gradient scaler to use FP32 gradients.

\n": "

\u0d85\u0dbb\u0dca\u0db0\u0db1\u0dd2\u0dbb\u0dc0\u0daf\u0dca\u0dba\u0dad\u0dcf \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0dc3\u0dc4\u0dd2\u0dad \u0d9c\u0dca\u0dbb\u0dda\u0da9\u0dd2\u0dba\u0db1\u0dca\u0da7\u0dca \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba

\n

FP32\u0dc1\u0dca\u0dbb\u0dda\u0dab\u0dd2\u0dba\u0dda \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0d85\u0db4\u0dd2 \u0db4\u0dba\u0dd2\u0da7\u0ddd\u0da0\u0dca \u0dc1\u0dca\u0dbb\u0dda\u0dab\u0dd2\u0dba\u0dda \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0daf\u0dd2\u0d9c\u0dd4 \u0d9a\u0dbb\u0db8\u0dd4.

\n", "

Initialize a parameter state

\n\n

All the state tensors use FP32.

\n": "

\u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dad\u0dad\u0dca\u0dc0\u0dba\u0d9a\u0dca \u0d86\u0dbb\u0db8\u0dca\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n
  • _^_2_^_ \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba tensor \u0dc0\u0dda _^_3_^_
  • \n

    \u0dc3\u0dd2\u0dba\u0dbd\u0dd4\u0db8\u0dbb\u0dcf\u0da2\u0dca\u0dba \u0d86\u0dad\u0dad\u0dd3\u0db1\u0dca FP32 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0dba\u0dd2.

    \n", "

    Take an update step for a given parameter tensor

    \n\n": "

    \u0daf\u0dd3\u0d87\u0dad\u0dd2 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2 \u0da7\u0dd9\u0db1\u0dca\u0dc3\u0dbb\u0dba\u0d9a\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0dba\u0dcf\u0dc0\u0dad\u0dca\u0d9a\u0dcf\u0dbd\u0dd3\u0db1 \u0db4\u0dd2\u0dba\u0dc0\u0dbb\u0d9a\u0dca \u0d9c\u0db1\u0dca\u0db1

    \n
  • _^_5_^_ \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba tensor \u0dc0\u0dda _^_6_^_
  • \n", "

    \n": "

    \n", "

    Calculate weight decay

    \n": "

    \u0db6\u0dbb\u0d9a\u0dca\u0dc2\u0dba \u0dc0\u0dd3\u0db8 \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Call the Adam Optimizer initializer

    \n": "

    \u0d87\u0da9\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab \u0d86\u0dbb\u0db8\u0dca\u0db7\u0d9a\u0dba \u0d85\u0db8\u0dad\u0db1\u0dca\u0db1

    \n", "

    Exponential moving average of gradients, _^_0_^_

    \n": "

    \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a\u0d9a \u0d9d\u0dcf\u0dad\u0dd3\u0dba \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0dc0\u0db1 \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0dba, _^_0_^_

    \n", "

    Exponential moving average of squared gradient values, _^_0_^_

    \n": "

    \u0dc0\u0dbb\u0dca\u0d9c\u0db5\u0dbd\u0dba \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0dc0\u0da7\u0dd2\u0db1\u0dcf\u0d9a\u0db8\u0dca \u0d9d\u0dcf\u0dad\u0dd3\u0dba \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0dc0\u0db1 \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0dba, _^_0_^_

    \n", "

    Get _^_0_^_ and _^_1_^_

    \n": "

    \u0dbd\u0db6\u0dcf _^_0_^_ \u0d9c\u0db1\u0dca\u0db1 _^_1_^_

    \n", "

    Get the FP32 gradients if available

    \n": "

    \u0dbd\u0db6\u0dcf\u0d9c\u0dad \u0dc4\u0dd0\u0d9a\u0dd2 \u0db1\u0db8\u0dca FP32 \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

    \n", "

    Get the FP32 parameters

    \n": "

    FP32\u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

    \n", "

    If we are using the _^_0_^_ optimizer set _^_1_^_ to the FP32 gradients

    \n": "

    \u0d85\u0db4\u0dd2FP32 \u0dc1\u0dca\u0dbb\u0dda\u0dab\u0dd2\u0dba\u0dda _^_0_^_ \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab \u0d9a\u0da7\u0dca\u0da7\u0dbd\u0dba _^_1_^_ \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1\u0dda \u0db1\u0db8\u0dca

    \n", "

    Increment _^_0_^_ the number of optimizer steps

    \n": "

    \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0db4\u0dd2\u0dba\u0dc0\u0dbb \u0d9c\u0dab\u0db1 \u0dc0\u0dd0\u0da9\u0dd2 _^_0_^_ \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Loop through parameters

    \n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca\u0dc4\u0dbb\u0dc4\u0dcf \u0dbd\u0dd6\u0db4\u0dca

    \n", "

    Maintain a FP32 copy of the parameters

    \n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca\u0d9c\u0ddaFP32 \u0db4\u0dd2\u0da7\u0db4\u0dad\u0d9a\u0dca \u0db4\u0dc0\u0dad\u0dca\u0dc0\u0dcf \u0d9c\u0db1\u0dca\u0db1

    \n", "

    Not implemented for sparse tensors

    \n": "

    \u0dc0\u0dd2\u0dbb\u0dbd\u0d86\u0dad\u0dad\u0dd3\u0db1\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0db1\u0ddc\u0dc0\u0dda

    \n", "

    Otherwise, convert the gradients to FP32

    \n": "

    \u0d91\u0dc3\u0dda\u0db1\u0ddc\u0db8\u0dd0\u0dad\u0dd2\u0db1\u0db8\u0dca, \u0dc1\u0dca\u0dbb\u0dda\u0dab\u0dd2\u0dba FP32 \u0db6\u0dc0\u0da7 \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Otherwise, do not convert the gradients to FP32

    \n": "

    \u0d91\u0dc3\u0dda\u0db1\u0ddc\u0db8\u0dd0\u0dad\u0dd2\u0db1\u0db8\u0dca, \u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a FP32 \u0db6\u0dc0\u0da7 \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0db1\u0ddc\u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "

    Parameter to store 32 bit gradients. This get populated by the _^_0_^_ defined below.

    \n": "

    \u0db6\u0dd2\u0da7\u0dca\u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a 32 \u0d9a\u0dca \u0d9c\u0db6\u0da9\u0dcf \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba. \u0db4\u0dc4\u0dad _^_0_^_ \u0d85\u0dbb\u0dca\u0dae \u0daf\u0d9a\u0dca\u0dc0\u0dcf \u0d87\u0dad\u0dd2 \u0db4\u0dbb\u0dd2\u0daf\u0dd2 \u0db8\u0dd9\u0dba \u0da2\u0db1\u0dcf\u0d9a\u0dd3\u0dbb\u0dca\u0dab \u0dc0\u0dda.

    \n", "

    Perform Adam update

    \n": "

    \u0d86\u0daf\u0db8\u0dca \u0dba\u0dcf\u0dc0\u0dad\u0dca\u0d9a\u0dcf\u0dbd\u0dd3\u0db1 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0dd2\u0daf\u0dd4

    \n", "

    Set the parameters

    \n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca\u0dc3\u0d9a\u0dc3\u0db1\u0dca\u0db1

    \n", "

    Skip non-trainable parameters

    \n": "

    \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0d9a\u0dc5 \u0db1\u0ddc\u0dc4\u0dd0\u0d9a\u0dd2 \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd3\u0db1\u0dca \u0db8\u0d9f \u0dc4\u0dbb\u0dd2\u0db1\u0dca\u0db1

    \n", "

    This is the number of optimizer steps taken on the parameter, _^_0_^_

    \n": "

    \u0db4\u0dbb\u0dcf\u0db8\u0dd2\u0dad\u0dd2\u0dba\u0db8\u0dad \u0d9c\u0dd9\u0db1 \u0d87\u0dad\u0dd2 \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0dd2\u0d9a\u0dbb\u0dab \u0db4\u0dd2\u0dba\u0dc0\u0dbb \u0d9c\u0dab\u0db1 \u0db8\u0dd9\u0dba\u0dba\u0dd2, _^_0_^_

    \n", "

    Unscale all the gradients

    \n": "

    \u0dc3\u0dd2\u0dba\u0dbd\u0dd4\u0db8\u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

    \n", "A simple PyTorch implementation/tutorial of Adam optimizer": "\u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dcf\u0dbb\u0d9a\u0dba\u0dda \u0dc3\u0dbb\u0dbd \u0db4\u0dba\u0dd2\u0da7\u0ddd\u0da0\u0dca \u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0db1\u0dd2\u0db6\u0db1\u0dca\u0db0\u0db1\u0dba", "Adam Optimizer for Half Precision Training": "\u0d85\u0da9\u0d9a\u0dca \u0db1\u0dd2\u0dbb\u0dc0\u0daf\u0dca\u0dba\u0dad\u0dcf\u0dc0 \u0db4\u0dd4\u0dc4\u0dd4\u0dab\u0dd4\u0dc0 \u0dc3\u0db3\u0dc4\u0dcf \u0d86\u0daf\u0db8\u0dca \u0db4\u0dca\u0dbb\u0dc1\u0dc3\u0dca\u0dad\u0d9a\u0dbb\u0dab\u0dba" }