Visualizador de padrões de bits FP16 e bfloat16
Visualize os padrões de bits de ponto flutuante de meia precisão (FP16, IEEE 754 binary16) e bfloat16. Converta de decimal para bits e vice-versa, com sinal, expoente e mantissa destacados por cores. Útil para aprender sobre quantização de ML e aceleração de inferência.
Estrutura de FP16 vs. bfloat16
Ambos os formatos somam 16 bits no total, mas distribuem esses bits entre expoente e mantissa de forma muito diferente, dando a cada um um intervalo representável e precisão muito distintos.
| Item | FP16 (IEEE 754 meia precisão) | bfloat16 |
|---|---|---|
| Total de bits | 16 | 16 |
| Bits de expoente | 5 | 8 |
| Bits de mantissa | 10 | 7 |
| Intervalo representável | Aproximadamente ±6,1×10⁻⁵ a ±65504 (intervalo mais estreito, mas mais bits de mantissa para precisão) | Aproximadamente ±1,2×10⁻³⁸ a ±3,4×10³⁸ (mesmo intervalo amplo do float32, mas menor precisão) |
| Uso principal | Processamento de imagens, gráficos e inferência com economia de memória (treinamento em meia precisão) | Treinamento de deep learning (TPUs e GPUs modernas) — sem se preocupar com estouro do expoente ao converter de float32 |
O bfloat16 compartilha a largura do expoente (8 bits) e o viés (127) do float32, o que significa que pode ser obtido a partir de um valor float32 simplesmente truncando a mantissa — um atalho de implementação prático.
Ver como os bits se dispõem em FP16 e bfloat16
Embora ambos ocupem dezesseis bits, o FP16, isto é o IEEE 754 binary16, e o bfloat16 repartem esses bits de maneiras bem distintas. Esta ferramenta converte entre valores decimais e padrões de bits e colore em separado o sinal, o expoente e a mantissa, de modo que a diferença possa ser vista e não apenas lida.
**A chave está na repartição. O FP16 dá cinco bits ao expoente e dez à mantissa, ao passo que o bfloat16 dá oito ao expoente e sete à mantissa.** Oito bits de expoente é exatamente o que a precisão simples usa, e daí decorrem duas propriedades. A primeira é que **o bfloat16 abrange o mesmo intervalo de valores que o FP32**, e a segunda é que **converter a partir do FP32 se reduz a truncar aos dezesseis bits superiores.** Por isso o aprendizado de máquina prefere o bfloat16: há muito menos risco de um valor sair do intervalo e arruinar um treinamento. O preço é uma mantissa de apenas sete bits, de modo que **a precisão sai mais grosseira que a do FP16.** Escolha o FP16 onde importar a precisão e o bfloat16 onde importar o intervalo.
Como se usa
- Escolha o sentido da conversão De decimal para bits e de bits para decimal estão ambos disponíveis.
- Insira um valor Servem por igual um número decimal ou uma cadeia de uns e zeros.
- Leia os bits coloridos **O sinal, o expoente e a mantissa aparecem cada um com a sua própria cor.**
- Confronte FP16 com bfloat16 **Representar o mesmo valor em ambos os formatos mostra exatamente onde eles se separam.**
Dicas para aproveitar melhor
- Mesmo para o mesmo valor, como 0.1, FP16 e bfloat16 o arredondam de forma bem diferente. Alterne os formatos e compare os padrões de bits da mantissa.
- Como o bfloat16 compartilha a largura do expoente e o viés do float32, ele resiste a estouros mesmo com valores grandes acima de 65504. Já o FP16 estoura para infinito assim que ultrapassa 65504.
- Converter "70000" para FP16 estoura para infinito, enquanto o bfloat16 o representa bem (com precisão reduzida).
- Ao quantizar modelos em frameworks como PyTorch ou TensorFlow, o bfloat16 se converte facilmente a partir do float32, enquanto o intervalo mais estreito do FP16 às vezes exige um escalonamento prévio.
- Para converter bits de volta para decimal, digite um valor hexadecimal de 4 dígitos com prefixo `0x`, ou um valor binário de 16 dígitos (o prefixo `0b` é opcional).
Quando é útil
Entender quanto custa a quantização
**Você pode estabelecer em concreto até onde um valor é arredondado ao baixar um modelo para dezesseis bits.**
Decidir entre os formatos
Dá-lhe o material para pesar se o seu caso precisa de intervalo ou de precisão.
Achar onde começa o transbordo
**Você pode provar, com valores reais, o que ocorre assim que se ultrapassa o maior número representável em FP16.**
Aprender como funciona a vírgula flutuante
Você pode seguir, bit a bit, como um expoente e uma mantissa se combinam para exprimir um só número.
Termos da vírgula flutuante
- Bit de sinal
- O único bit mais alto, que dá o sinal: 0 para positivo e 1 para negativo.
- Expoente
- A parte que exprime a magnitude do valor. **O FP16 lhe atribui cinco bits e o bfloat16 oito.**
- Mantissa
- A parte que corresponde aos algarismos significativos. **O FP16 tem dez bits e o bfloat16 sete, e essa distância é justamente a diferença de precisão.**
- Bfloat16
- **Um formato de dezesseis bits que mantém o expoente nos oito bits do FP32.** Reduz à metade o armazenamento sem sacrificar o intervalo.
- Número subnormal
- A representação empregada quando o expoente está no seu mínimo, que permite valores extremamente próximos de zero.
- Quantização
- A prática de exprimir os pesos de um modelo com menos bits. **Baixam o armazenamento e o cômputo, e com eles a precisão.**
Perguntas frequentes
Curiosidade — Por que o machine learning quis uma representação numérica "menos precisa"
Por volta de 2018, o Google projetou um novo formato de ponto flutuante de 16 bits chamado bfloat16 para suas Unidades de Processamento Tensorial (TPUs). O FP16 (meia precisão IEEE 754) já existia e era usado em processamento de imagens e gráficos, mas seus meros 5 bits de expoente lhe davam um intervalo representável estreito, pouco adequado aos gradientes que desaparecem ou explodem durante o treinamento de deep learning.
A ideia de projeto do bfloat16 é direta: sacrificar precisão na mantissa, mas manter o expoente exatamente tão largo quanto os 8 bits do float32, para lidar com segurança com os valores extremamente grandes e pequenos que surgem durante o treinamento. O nome "Brain Floating Point" vem do Google Brain, a equipe de pesquisa em machine learning que o criou.
Na ciência da computação convencional, reduzir a precisão de ponto flutuante sempre foi tratado como um terreno fértil para bugs. Mas os modelos de deep learning têm uma propriedade incomum: um erro numérico modesto raramente prejudica muito a precisão final das previsões. Aproveitar essa propriedade de "um tanto impreciso, mas que funciona no conjunto" — e reduzir pela metade o custo de memória e computação com um formato de 16 bits — representa uma otimização própria do machine learning, bem distante da sabedoria tradicional da ciência da computação.