Articulo de referencia

Miniflotador

En informática , los minifloats son valores de punto flotante representados con muy pocos bits . Esta precisión reducida los hace poco adecuados para cálculos numéricos de propó...

En informática , los minifloats son valores de punto flotante representados con muy pocos bits . Esta precisión reducida los hace poco adecuados para cálculos numéricos de propósito general, pero son útiles para propósitos especiales como:

  • Gráficos por computadora, donde la percepción humana del color y los niveles de luz tienen baja precisión. [ 1 ] El formato de precisión media de 16 bits es muy popular.
  • El aprendizaje automático puede ser relativamente insensible a la precisión numérica. Cada vez se utilizan más números de coma flotante de 16 bits, 8 bits e incluso 4 bits. [ 2 ]

Además, se utilizan con frecuencia como herramienta pedagógica en cursos de informática para demostrar las propiedades y estructuras de la aritmética de punto flotante y los números IEEE 754 .

Dependiendo del contexto, minifloat puede significar cualquier tamaño menor a 32, cualquier tamaño menor o igual a 16, o cualquier tamaño menor a 16. El término microfloat puede significar cualquier tamaño menor o igual a 8. [ 3 ]

Notación

Esta página utiliza la notación ( SEM ) para describir un mini flotador:

  • S es la longitud del campo de signo (0 o 1).
  • E es la longitud del campo exponencial.
  • M es la longitud del campo de la mantisa (significando).

Los minifloats se pueden diseñar siguiendo los principios del estándar IEEE 754. Casi todos usan el exponente más pequeño para números subnormales y normales . Muchos usan el exponente más grande para infinito y NaN , indicado por (exponente especial) SE = 1. Algunos minifloats usan este valor de exponente normalmente, en cuyo caso SE = 0 .

El sesgo del exponente B = 2 E − 1SE . Este valor asegura que todos los números representables tengan un recíproco representable .

La notación se puede convertir a un formato ( B,P,L,U ) como (2, M + 1, SE − 2 E − 1 + 1, 2 E − 1 − 1) .

Una notación común utilizada en el campo del aprendizaje automático es FP n E e M m , donde las letras minúsculas se reemplazan por números. Por ejemplo, FP8-E4M3 es lo mismo que (1.4.3).

Uso

Muchas situaciones que requieren números de coma flotante no necesitan mucha precisión. Esto es típico en gráficos de alto rango dinámico y procesamiento de imágenes. También es típico en redes neuronales de gran tamaño, una propiedad que se ha aprovechado desde la década de 2020 para entrenar e implementar modelos de lenguaje cada vez más grandes . El ejemplo más general es el fp16 (1.5.10) en IEEE 754-2008 , denominado " media precisión " (en contraposición a la precisión simple de 32 bits y la doble precisión de 64 bits ).

El formato bfloat16 (1.8.7) son los primeros 16 bits de un número estándar de precisión simple y se utilizaba con frecuencia en el procesamiento de imágenes y el aprendizaje automático antes de que se añadiera compatibilidad de hardware para otros formatos.

Gráficos

Las GPU Radeon R300 y R420 usaban un formato de punto flotante "fp24" (1.7.16). [ 4 ] "Precisión completa" en Direct3D 9.0 es un formato de punto flotante propietario de 24 bits. La API gráfica D3D9 (Shader Model 2.0) de Microsoft inicialmente admitía tanto FP24 (como en el chip R300 de ATI) como FP32 (como en el chip NV30 de Nvidia) como "Precisión completa", así como FP16 como "Precisión parcial" para los cálculos de sombreado de vértices y píxeles realizados por el hardware gráfico.

En 2016, Khronos definió formatos sin signo de 10 bits (0.5.5) y 11 bits (0.5.6) para su uso con Vulkan. [ 5 ] [ 6 ] Estos se pueden convertir desde precisión media positiva truncando el signo y los dígitos finales.

Microcontrolador

Los minifloats también se utilizan comúnmente en dispositivos embebidos, como microcontroladores , donde se requiere emular números de coma flotante mediante software. Para acelerar el cálculo, la mantisa suele ocupar exactamente la mitad de los bits, por lo que el límite del registro direcciona automáticamente las partes sin desplazamiento (es decir, (1.3.4) en dispositivos de 4 bits).

Aprendizaje automático

En 2022, NVidia y otros anunciaron compatibilidad con el formato "fp8" (1.5.2, E5M2). Estos se pueden convertir desde precisión media truncando los dígitos finales. Este formato admite valores especiales como NaN e infinito. También anunciaron un formato sin infinito y con solo dos representaciones (positiva y negativa) para NaN, el FP8-E4M3 (1.4.3): después de todo, los valores especiales son innecesarios en la inferencia (propagación hacia adelante, a diferencia del entrenamiento mediante retropropagación ) de redes neuronales. [ 2 ] Los formatos se han convertido en un estándar industrial llamado OCP-FP8. [ 7 ] Otras compresiones, como FP4-E2M1 (1.2.1), también han demostrado ser fructíferas. [ 8 ]

Desde 2023, el Grupo de Trabajo P3109 de IEEE SA está trabajando en un estándar para minifloats optimizado para el aprendizaje automático mediante la sistematización de la práctica actual. El Informe Provisional versión 3.0 (agosto de 2025) define una familia de muchos formatos bajo el nombre sistemático "binario K p P [s/u][e/f]", donde K es la longitud total de bits, P es la precisión (número de bits de mantisa + 1), s/u (con signo/sin signo) se refiere a si hay un bit de signo presente, y e/f (extendido/finito) se refiere a si se incluye el infinito. Por convención, s y e pueden omitirse. Para ahorrar espacio para más números, no existe el concepto de "cero negativo", y solo hay una representación para NaN; para los formatos con signo, NaN puede usar el patrón de bits de lo que habría sido cero negativo. Por ejemplo, el formato FP4-E2M1 se puede aproximar como sigue en P3109: [ 9 ]

(Para binary4p2se, ± 6 se reemplazan por ± Infinito).

Una desventaja de los minifloats muy pequeños es que tienen un rango dinámico representable muy limitado . Para solucionar este problema, la industria del aprendizaje automático ha inventado los "formatos de microescalado" (MX), un tipo de punto flotante en bloque . En un formato MX, un grupo de 32 minifloats comparten un factor de escala adicional representado por un minifloat "E8M0" (que puede representar potencias de 2 entre 2 −127 y 2 127 ). MX se ha definido para FP8-E5M2, FP8-E4M3, FP6-E3M2 (1.3.2), FP6-E2M3 (1.2.3) y FP4-E2M1. [ 10 ]

Ejemplos

8 bits (1.4.3)

Aquí se muestra un minifloat en 1  byte (8 bits) con 1 bit de signo, 4 bits de exponente y 3 bits de mantisa (1.4.3). El sesgo del exponente se define como 7 para centrar los valores alrededor de 1 y que coincidan con otros floats IEEE 754 [ 11 ] [ 12 ] por lo que (para la mayoría de los valores) el multiplicador real para el exponente x es 2 x −7 . Todos los principios IEEE 754 deberían ser válidos. [ 13 ] Esta forma es bastante común para instrucciones.

El cero se representa como un exponente cero con una mantisa cero. El exponente cero significa que cero es un número subnormal con un prefijo "0." inicial, y con la mantisa cero todos los bits después del punto decimal son cero, lo que significa que este valor se interpreta como0.0002×26=0{\displaystyle 0.000_{2}\times 2^{-6}=0}Los números de punto flotante usan un cero con signo , por lo que0{\displaystyle -0}también está disponible y es igual a positivo0{\displaystyle 0}.

0 0000 000 = 0 1 0000 000 = −0

Para el exponente más bajo, la mantisa se extiende con "0." y el valor del exponente se trata como 1 más alto, como el número normalizado más pequeño:

0 0000 001 = 0.001 2 × 2 1 − 7 = 0.125 × 2 −6 = 0.001953125 (número subnormal mínimo) ... 0 0000 111 = 0.111 2 × 2 1 − 7 = 0.875 × 2 −6 = 0.013671875 (mayor número subnormal)

Todos los demás exponentes, la mantisa se extiende con "1".:

0 0001 000 = 1.000 2 × 2 1 − 7 = 1 × 2 −6 = 0.015625 (número normalizado mínimo) 0 0001 001 = 1.001 2 × 2 1 − 7 = 1.125 × 2 −6 = 0.017578125 ... 0 0111 000 = 1.000 2 × 2 7 − 7 = 1 × 2 0 = 1 0 0111 001 = 1.001 2 × 2 7 − 7 = 1.125 × 2 0 = 1.125 (valor mínimo superior a 1) ... 0 1110 000 = 1.000 2 × 2 14 − 7 = 1.000 × 2 7 = 128 0 1110 001 = 1.001 2 × 2 14 − 7 = 1.125 × 2 7 = 144 ... 0 1110 110 = 1.110 2 × 2 14 − 7 = 1.750 × 2 7 = 224 0 1110 111 = 1.111 2 × 2 14 − 7 = 1.875 × 2 7 = 240 (mayor número normalizado)

Los valores infinitos tienen el exponente más alto, con la mantisa establecida en cero. El bit de signo puede ser positivo o negativo.

0 1111 000 = +infinito 1 1111 000 = −infinito

Los valores NaN tienen el exponente más alto, con la mantisa distinta de cero.

s 1111 mmm = NaN (si mmm ≠ 000)

Esta es una tabla con todos los valores posibles para este ejemplo de número de coma flotante de 8 bits:

Solo hay 242 valores distintos que no son NaN (si se consideran diferentes +0 y −0), porque 14 de los patrones de bits representan NaN.

Para convertir números de coma flotante de 8 bits en lenguajes de programación, generalmente se requieren bibliotecas o funciones, ya que este formato no está estandarizado. Por ejemplo, aquí hay una implementación de ejemplo en C++ (dominio público).

8 bits (1.4.3) con B = −2

Para estos tamaños pequeños, otros valores de sesgo pueden resultar interesantes; por ejemplo, un sesgo de -2 hará que los números del 0 al 16 tengan la misma representación de bits que los enteros del 0 al 16, con la desventaja de que no se puedan representar valores no enteros.

0 0000 000 = 0.000 2 × 2 1 - (-2) = 0.0 × 2 3 = 0 (número subnormal) 0 0000 001 = 0.001 2 × 2 1 - (-2) = 0.125 × 2 3 = 1 (número subnormal) 0 0000 111 = 0.111 2 × 2 1 - (-2) = 0.875 × 2 3 = 7 (número subnormal) 0 0001 000 = 1.000 2 × 2 1 - (-2) = 1.000 × 2 3 = 8 (número normalizado) 0 0001 111 = 1.111 2 × 2 1 - (-2) = 1.875 × 2 3 = 15 (número normalizado) 0 0010 000 = 1.000 2 × 2 2 - (-2) = 1.000 × 2 4 = 16 (número normalizado)

8 bits (1.3.4)

Cualquier asignación de bits es posible. Un formato podría optar por asignar más bits al exponente si necesita mayor rango dinámico con menor precisión, o asignar más bits a la mantisa si necesita mayor precisión con menor rango dinámico. En el extremo opuesto, es posible asignar todos los bits al exponente (1.7.0), o todos menos uno a la mantisa (1.1.6), dejando al exponente con solo un bit. Al exponente se le debe asignar al menos un bit; de lo contrario, deja de tener sentido como número de coma flotante y se convierte simplemente en un número con signo .

Aquí se muestra una tabla con todos los valores posibles para (1.3.4). M 2 E − 1 garantiza que la precisión se mantenga al menos en 0,5 en todo el rango. [ 14 ]

Se pueden generar tablas como la anterior para cualquier combinación de valores SEMB (signo, exponente, mantisa/significando y sesgo) utilizando un script en Python o en GDScript .

6 bits (1.3.2)

Con tan solo 64 valores, es posible representarlos todos en un diagrama, lo cual puede resultar instructivo.

Estos gráficos muestran operaciones matemáticas con dos minifloats de 6 bits (1.3.2), siguiendo al pie de la letra las reglas de la norma IEEE 754. Las X verdes representan resultados NaN, las X cian, resultados +Infinito, y las X magenta, resultados -Infinito. El rango de los resultados finitos se rellena con curvas que unen valores iguales: azul para los positivos y rojo para los negativos.

4 bits (1.2.1)

El tamaño de punto flotante más pequeño posible que cumple con todos los principios IEEE, incluidos los números normalizados, los números subnormales, el cero con signo, el infinito con signo y los múltiples valores NaN, es un punto flotante de 4 bits con 1 bit de signo, 2 bits de exponente y 1 bit de mantisa. [ 15 ]

Este ejemplo de coma flotante de 4 bits es muy similar al formato FP4-E2M1 utilizado por Nvidia y a los formatos IEEE P3109 binary4p2s*, como se describió anteriormente, salvo por una asignación diferente de los valores especiales Infinito y NaN. Este ejemplo utiliza una asignación tradicional que sigue los mismos principios que otros tamaños de coma flotante. Las coma flotantes destinadas a casos de uso específicos de aplicaciones, en lugar de a la interoperabilidad de propósito general, pueden preferir utilizar esos patrones de bits para números finitos, según las necesidades de la aplicación.

Otros formatos de punto flotante de 4 bits incluyen MXFP4 y NVFP4 (luego intercambio de patrones de bits separados para más y menos Inf y NaN como se indicó anteriormente) "El valor en el formato varía aproximadamente de -6 a 6. Por ejemplo, los valores en el rango podrían incluir 0.0, 0.5, 1.0, 1.5, 2, 3, 4, 6 (lo mismo para el rango negativo)". [ 16 ] También tiene un formato de escala separado almacenado por separado por bloque.

3 bits (1.1.1)

Si no se requieren números normalizados, el tamaño se puede reducir a 3 bits disminuyendo el exponente a 1.

2 bits (0,1,1) y 3 bits (0,2,1)

En situaciones donde se puede excluir el bit de signo, cada uno de los ejemplos anteriores se puede reducir en 1 bit más, conservando solo la primera fila de las tablas anteriores. Un número de coma flotante de 2 bits con un exponente de 1 bit y una mantisa de 1 bit solo tendría los valores 0, 1, infinito y NaN.

1 bit (0.1.0)

Eliminar la mantisa solo permitiría dos valores: 0 e infinito. Eliminar el exponente no funciona, las fórmulas anteriores producen 0 y √2/2. El exponente debe ser de al menos 1 bit, de lo contrario ya no tiene sentido como un número de coma flotante (sería simplemente un número con signo ).

Véase también

Referencias

  1. Mocerino, Luca; Calimera, Andrea (24 de noviembre de 2021). "AxP: Un flujo de trabajo de codiseño HW-SW para redes neuronales convolucionales aproximadas energéticamente eficientes mediante emparejamiento asociativo" . Applied Sciences . 11 (23) 11164. doi : 10.3390/app112311164 .
  2. 1 2 https://developer.nvidia.com/blog/nvidia-arm-and-intel-publish-fp8-specification-for-standardization-as-an-interchange-format-for-ai/ (anuncio conjunto de Intel, NVIDIA y Arm); https://arxiv.org/abs/2209.05433 (artículo preimpreso escrito conjuntamente por investigadores de las tres empresas mencionadas)
  3. https://www.mrob.com/pub/math/floatformats.html#microfloat Microflotantes
  4. Buck, Ian (13 de marzo de 2005), «Capítulo 32. Adentrándose en la computación con GPU» , en Pharr, Matt (ed.), GPU Gems , Addison-Wesley, ISBN 0-321-33559-7Consultado el 5 de abril de 2018..
  5. Garrard, Andrew. "10.3. Números de punto flotante de 10 bits sin signo" . Especificación del formato de datos de Khronos v1.2 rev 1. Grupo Khronos . Consultado el 10 de agosto de 2023 .
  6. Garrard, Andrew. "10.2. Números de punto flotante sin signo de 11 bits" . Especificación del formato de datos de Khronos v1.2 rev 1. Grupo Khronos . Consultado el 10 de agosto de 2023 .
  7. "Especificación de punto flotante de 8 bits de OCP (OFP8), revisión 1.0" . Mayo de 2023.
  8. "Acelere la inferencia LLM en su PC local" .
  9. "Informe provisional del Grupo de Trabajo P3109 del IEEE sobre formatos binarios de punto flotante para aprendizaje automático" (PDF) . GitHub . Grupo de Trabajo P3109 del IEEE. 5 de agosto de 2025.( última versión )
  10. "Especificación de formatos de microescalado OCP (MX) versión 1.0" . Open Compute Project . Archivado del original el 24 de febrero de 2024. Consultado el 21 de febrero de 2025 .
  11. La precisión media IEEE tiene 5 bits de exponente con sesgo 15 (2511=15{\displaystyle 2^{5-1}-1=15}), la precisión simple IEEE tiene 8 bits de exponente con sesgo 127 (2811=127{\displaystyle 2^{8-1}-1=127}), la precisión doble IEEE tiene 11 bits de exponente con sesgo 1023 (21111=1023{\displaystyle 2^{11-1}-1=1023}), y la precisión cuádruple IEEE tiene 15 bits de exponente con sesgo 16383 (21511=16383{\displaystyle 2^{15-1}-1=16383}Consulte el artículo sobre el sesgo del exponente para obtener más detalles.
  12. O'Hallaron, David R.; Bryant, Randal E. (2010). Sistemas informáticos: una perspectiva del programador (2.ª ed.). Boston, Massachusetts, EE. UU.: Prentice Hall . ISBN  978-0-13-610804-7.
  13. Burch, Carl. "Representación de punto flotante" . Hendrix College . Consultado el 29 de agosto de 2023 .
  14. "Una representación de punto flotante de 8 bits" (PDF) . Archivado del original (PDF) el 8 de julio de 2024.
  15. Shaneyfelt, Dr. Ted. "El artilugio de construcción de punto flotante del Dr. Shaneyfelt" . Dr. Ted Shaneyfelt. Archivado del original el 15 de diciembre de 2024. Recuperado el 29 de agosto de 2023 .
  16. "Presentamos NVFP4 para una inferencia de baja precisión eficiente y precisa" . Blog técnico de NVIDIA . 24 de junio de 2025. Consultado el 15 de marzo de 2026 .
  • Munafo, Robert (15 de mayo de 2016). "Estudio de formatos de punto flotante" . Recuperado el 8 de agosto de 2016 .
  • Minifloats (en Panorama general de los formatos de punto flotante )