Articulo de referencia

Aritmética de precisión mixta

La aritmética de precisión mixta es una forma de aritmética de punto flotante que utiliza números con anchos variables en una sola operación. Descripción general Un uso común de...

La aritmética de precisión mixta es una forma de aritmética de punto flotante que utiliza números con anchos variables en una sola operación.

Descripción general

Un uso común de la aritmética de precisión mixta es operar con números imprecisos de pequeño tamaño y expandirlos a una representación más grande y precisa. Por ejemplo, dos números de coma flotante de precisión media o bfloat16 (16 bits) pueden multiplicarse para obtener un número de coma flotante de precisión simple (32 bits) más preciso. [ 1 ] De esta manera, la aritmética de precisión mixta se aproxima a la aritmética de precisión arbitraria , aunque con un número reducido de precisiones posibles.

Los algoritmos iterativos (como el descenso de gradiente ) son ideales para la aritmética de precisión mixta. En un algoritmo iterativo como la raíz cuadrada , se puede realizar una estimación aproximada de la integral y refinarla a lo largo de muchas iteraciones hasta que el error de precisión haga que la suma o resta más pequeña a la estimación siga siendo demasiado imprecisa para ser una respuesta aceptable. Cuando esto sucede, se puede aumentar la precisión, lo que permite utilizar incrementos más pequeños para la aproximación.

Las supercomputadoras como Summit utilizan aritmética de precisión mixta para ser más eficientes en cuanto a memoria y tiempo de procesamiento, así como en consumo de energía. [ 1 ] [ 2 ] [ 3 ]

Formato de punto flotante

Un número de punto flotante se suele empaquetar en una única cadena de bits, como el bit de signo, el campo del exponente y la mantisa o significando, de izquierda a derecha. Por ejemplo, un número de punto flotante de 32 bits estándar IEEE 754 ("FP32", "float32" o "binary32") se empaqueta de la siguiente manera:

Los números de coma flotante binarios IEEE 754 son:

Aprendizaje automático

La aritmética de precisión mixta se utiliza en el campo del aprendizaje automático , ya que los algoritmos de descenso de gradiente pueden usar números de coma flotante de precisión media, que son más gruesos y eficientes, para ciertas tareas, pero pueden ser más precisos si usan números de coma flotante de precisión simple, que son más precisos pero más lentos. Algunas plataformas, incluidas las CPU y GPU de Nvidia , Intel y AMD , proporcionan aritmética de precisión mixta para este propósito, usando números de coma flotante gruesos cuando es posible, pero ampliándolos a mayor precisión cuando es necesario. [ 1 ] [ 2 ] [ 4 ] [ 5 ]

Precisión mixta automática

PyTorch implementa precisión mixta automática (AMP), que realiza conversión automática, escalado de gradiente y escalado de pérdida. [ 6 ] [ 7 ]

  • Los pesos se almacenan en una copia maestra con alta precisión, generalmente en formato FP32.
  • La conversión automática consiste en convertir automáticamente un número de punto flotante entre diferentes precisiones, como de FP32 a FP16, durante el entrenamiento. Por ejemplo, las multiplicaciones de matrices a menudo se pueden realizar en FP16 sin pérdida de precisión, incluso si los pesos de la copia maestra se almacenan en FP32. Los pesos de baja precisión se utilizan durante la pasada hacia adelante.
  • El escalado de gradientes significa multiplicar los gradientes por un factor constante durante el entrenamiento, normalmente antes de la actualización del optimizador de pesos . Esto se hace para evitar que los gradientes se desborden a cero cuando se utilizan tipos de datos de baja precisión como FP16. Matemáticamente, si el gradiente sin escalar esgramo{\displaystyle \mathbf {g} }, el gradiente escalado essgramo{\displaystyle s\mathbf {g} }dóndes{\displaystyle s}es el factor de escala. Dentro de la actualización del optimizador, el gradiente escalado se convierte a una precisión mayor antes de ser reducido (ya no hay subdesbordamiento, ya que está en una precisión mayor) para actualizar los pesos.
  • El escalado de la pérdida significa multiplicar la función de pérdida por un factor constante durante el entrenamiento, normalmente antes de la retropropagación . Esto se hace para evitar que los gradientes se desborden a cero cuando se utilizan tipos de datos de baja precisión. Si la pérdida no escalada esL{\displaystyle {\mathcal {L}}}, la pérdida escalada eskL{\displaystyle k{\mathcal {L}}}dóndek{\displaystyle k}es el factor de escala. Dado que el escalado de gradiente y el escalado de pérdida son matemáticamente equivalentes por(kL)w=kLw{\displaystyle {\frac {\partial (k{\mathcal {L}})}{\partial \mathbf {w} }}=k{\frac {\partial {\mathcal {L}}}{\partial \mathbf {w} }}}El escalado de pérdida es una implementación del escalado de gradiente.

PyTorch AMP utiliza un retroceso exponencial para ajustar automáticamente el factor de escala de la función de pérdida. Es decir, incrementa periódicamente el factor de escala. Cuando los gradientes contienen un NaN (que indica desbordamiento), se omite la actualización de los pesos y se reduce el factor de escala.

Referencias

  1. 1 2 3 "Diferencia entre precisión simple, doble, múltiple y mixta" . Blog de NVIDIA . 15 de noviembre de 2019. Consultado el 30 de diciembre de 2020 .
  2. 1 2 Abdelfattah, Ahmad; Anzt, Hartwig; Boman, Erik G.; Carson, Erin; Cojean, Terry; Dongarra, Jack; Gates, Mark; Grützmacher, Thomas; Higham, Nicholas J.; Li, Sherry; Lindquist, Neil; Liu, Yang; Loe, Jennifer; Luszczek, Piotr; Nayak, Pratik; Pranesh, Sri; Rajamanickam, Siva; Ribizel, Tobias; Smith, Barry; Swirydowicz, Kasia; Thomas, Stephen; Tomov, Stanimire; Tsai, Yaohung M.; Yamazaki, Ichitaro; Urike Meier Yang (2020). "A Survey of Numerical Methods Utilizing Mixed Precision Arithmetic". arXiv : 2007.06674 [ cs.MS ].
  3. Holt, Kris (8 de junio de 2018). "Estados Unidos vuelve a tener la supercomputadora más potente del mundo" . Engadget . Consultado el 20 de julio de 2018 .
  4. Micikevicius, Paulius; Narang, Sharan; Alben, Jonah; Diamos, Gregory; Elsen, Erich; Garcia, David; Ginsburg, Boris; Houston, Michael; Kuchaiev, Oleksii (2018-02-15). "Entrenamiento de precisión mixta". arXiv : 1710.03740 [ cs.AI ].
  5. "Entrenamiento de precisión mixta de redes neuronales profundas" . Blog técnico de NVIDIA . 11 de octubre de 2017. Consultado el 10 de septiembre de 2024 .
  6. "Precisión mixta: guía de rendimiento de entrenamiento de PyTorch" . residentmario.github.io . Consultado el 10 de septiembre de 2024 .
  7. "Lo que todo usuario debería saber sobre el entrenamiento de precisión mixta en PyTorch" . PyTorch . Consultado el 10 de septiembre de 2024 .