Anar al contingut

Aritmètica de precisió mixta

De L'Enciclopèdia, la wikipedia en valencià

En informàtica es denomina aritmètica de precisió mixta a una forma de maneig de senyes en menge flotant que utilisa números en amples variables en una sola operació.

Descripció general

[editar | editar còdic]

Un us comú de l'aritmètica de precisió mixta és operar en números de baixa precisió d'ample chicotet i expandir-los a una representació més gran i precisa. Per eixemple, dos números de menge flotant de mija precisió o bfloat16 (16 bits) es poden multiplicar per a obtindre un número de menge flotant de simple precisió (32 bits), de major precisió.[1] D'esta manera, l'aritmètica de precisió mixta s'aproxima a l'aritmètica de precisió arbitrària, encara que en un número reduït de precisió possibles.

Els algoritmes iterativos (de la mateixa manera que els métodos basats en el descens del gradient) són bons candidats per a l'aritmètica de precisió mixta. En un algoritme iterativo com el càlcul d'una raïl quadrada, es pot realisar una estimació aproximada de l'integral i refinar-la en moltes iteraciones fins que l'error de precisió faça que la suma o resta més chicoteta a l'estimació seguixca sent massa imprecisa per a ser una resposta acceptable. Quan açò succeïx, es pot aumentar la precisió, lo que permet utilisar increments més menuts per a l'aproximació.

Els algoritmes amprats en supercomputadoras, com Summit, utilisen aritmètica de precisió mixta per a ser més eficients sobre memòria, temps de processament i consum d'energia.[1][2][3]

Format de punt flotant

[editar | editar còdic]

Un número de punt flotant se sol empaquetar en una única cadena de bits (incloent el bit de signe, el camp de l'exponent i la mantissa o significant), d'esquerra a dreta. Per eixemple, un número de punt flotant estàndart de 32 bits IEEE 754 (FP32, float32 o binary32) s'empaqueta de la següent manera:


Archiu:Float example.svg


Els números de punt flotant binarios IEEE 754 són:

Tipo Bits Biaix de l'exponent Bits de

precisió

Número

de dígits decimals

Signe Exponent Significancia Total
Mija (IEEE 754-2008) 1 5 10 16 15 11 3.3
Simple 1 8 23 32 127 24 7.2
Doble 1 11 52 64 1023 53 15.9
x86 precisió estesa 1 15 64 80 16383 64 19.2
Cuádruple 1 15 112 128 16383 113 34.0

Aprenentage automàtic

[editar | editar còdic]

L'aritmètica de precisió mixta s'utilisa en el camp del aprenentage automàtic, ya que els algoritmes de descens del gradient poden usar números de menge flotant de precisió mija, que són més aproximats i eficients per a certes tasques, pero poden ser més precisos si usen números de menge flotant de precisió simple, que són més precisos pero més llents. Algunes plataformes, incloses les CPU i GPU NVIDIA, Intel i AMD, proporcionen aritmètica de precisió mixta per a este propòsit, usant números de menge flotant aproximats quan és possible, pero ampliant-los a major precisió quan és necessari.[1][2][4][5]

Precisió mixta automàtica

[editar | editar còdic]

La biblioteca de funcions PyTorch inclou la precisió mixta automàtica (AMP), que realisa conversió automàtica de tipos, escalat de gradient i escalat de pèrdua.[6][7]

  • Els pesos s'almagasenen en una còpia mestra en alta precisió, generalment en FP32.
  • Autocasting significa convertir automàticament un número de punt flotant entre diferents precisió, com de FP32 a FP16, durant l'entrenament. Per eixemple, les operacions de multiplicació de matrius a sovint es poden realisar en FP16 sense pèrdua de precisió, inclús si els pesos de la còpia mestra s'almagasenen en FP32. Els pesos de baixa precisió s'utilisen durant la passada cap a avant.
  • Gradient scaleing significa multiplicar les operacions de gradient per un factor constant durant l'entrenament, normalment abans de l'actualisació de l'optimisació de pesos. Açò es fa per a evitar que els gradient es desborden a zero quan s'utilisen tipos de senyes de baixa precisió com FP16. Matemàticament, si el gradient sense escalar és 𝐠, el gradient escalat és s𝐠, a on s és el factor d'escala. Durant l'actualisació del optimizador, el gradient escalat es convertix a una precisió major abans de reduir la seua escala (ya no presenta subdesbordamiento, en estar en una precisió major) per a actualisar els pesos.
  • Escalat de la pèrdua significa multiplicar la funció de pèrdua per un factor constant durant l'entrenament, normalment abans de la retropropagación. Açò es fa per a evitar que els gradient presenten subdesbordamiento a zero en usar tipos de senyes de baixa precisió. Si la pèrdua sense escalar és , la pèrdua escalada és k, a on k és el factor d'escala. Ya que l'escalat del gradient i l'escalat de la pèrdua són matemàticament equivalents segons (k)𝐰=k𝐰, l'escalat de la pèrdua és una implementació de l'escalat del gradient.


PyTorch AMP utilisa reculada exponencial per a ajustar automàticament el factor d'escala de la funció de pèrdua. És dir, ho incrementa periòdicament. Quan els gradient contenen NaN (que indica desbordament), s'omet l'actualisació dels pesos i es reduïx el factor d'escala.

Referències

[editar | editar còdic]
  1. 1,0 1,1 1,2 «Difference Between Single-, Double-, Multi-, Mixed-Precision». Consultat el 30 de decembre de 2020.
  2. 2,0 2,1 Plantilla:Cite arXiv
  3. «The US again has the world's most powerful supercomputer». Consultat el 20 de juliol de 2018.
  4. Plantilla:Cite arXiv
  5. «Mixed-Precision Training of Deep Neural Networks» (en en-us). Consultat el 10 de setembre de 2024.
  6. «Mixed Precision — PyTorch Training Performance Guide». Consultat el 10 de setembre de 2024.
  7. «What Every User Should Know About Mixed Precision Training in PyTorch» (en en). Consultat el 10 de setembre de 2024.


Referències

[editar | editar còdic]