O formato numérico bfloat16

O uso de números de ponto flutuante de precisão reduzida é um método comum usado para diminuir o tempo de convergência sem perder a precisão. As TPUs usam o formato de número bfloat16 ao realizar operações de matriz. Operações de multiplicação de matriz são executadas em valores bfloat16, e acumulações são realizadas em valores float32 do IEEE.

bfloat16 é um formato de ponto flutuante personalizado de 16 bits para o machine learning composto de um bit de sinal, oito bits expoentes e sete bits mantissa. O diagrama a seguir mostra os componentes internos de três formatos de ponto flutuante: float32: precisão única de IEEE, float16: meia precisão de IEEE e bfloat16.

imagem

O intervalo dinâmico de bfloat16 é o mesmo que float32 e ocupa metade da quantidade de memória. A pesquisa mostra as convergências dos formatos bfloat16 e float32, aumentando o desempenho e reduzindo o uso de memória.

Como escolher bfloat16

A equipe de hardware do Google escolheu bfloat16 para Cloud TPUs para melhorar a eficiência do hardware e manter a capacidade de treinar modelos de aprendizado profundo com precisão, tudo com custos mínimos de mudança no float32. O tamanho físico de um multiplicador de hardware é escalonado com o quadrado da largura da mantissa. Com menos bits mantissa do que FP16, os multiplicadores bfloat16 têm cerca de metade do tamanho em silício de um multiplicador FP16 típico, e são oito vezes menores que um float32 multiplicador.

As redes neurais são muito mais sensíveis ao tamanho do expoente do que à mantissa. Para garantir um comportamento idêntico para subfluxos, estouros e NaNs, bfloat16 tem o mesmo tamanho do expoente que float32. bfloat16 processa desnormalizações de maneira diferente de float32. Ele as limpa para zero. Ao contrário de float16, que normalmente requer tratamento especial, como escalonamento de perdas, bfloat16 é uma substituição drop-in para float32 ao treinar e executar redes neurais profundas.

Treinamento de precisão mista

Para a maioria dos cálculos em uma rede neural profunda, não é essencial calcular, por exemplo, o 18o dígito de cada número; A rede pode realizar uma tarefa com a mesma precisão usando uma aproximação de precisão mais baixa. Alguns modelos podem até mesmo alcançar uma maior precisão com menor precisão.

Ao programar Cloud TPUs, o ambiente de execução da TPU fornece conversão automática de formato. Os valores são convertidos perfeitamente entre float32 e bfloat16 pelo compilador XLA. Isso permite que você grave modelos usando o formato float32 por padrão e atinja alguns benefícios de desempenho sem alterações no código.

Portabilidade de modelo

Os valores dos parâmetros e ativações em um modelo podem ser armazenados em formato completo de 32 bits, porque o hardware de TPU pode transmitir automaticamente esses valores para bfloat16. Os checkpoints recebidos de um modelo treinado em Cloud TPUs podem ser implantados em outras plataformas de hardware, como inferência ou ajuste em CPUs ou GPUs, sem conversões manuais extensas.

Como melhorar o desempenho com o bfloat16

Embora a conversão automática de formato em TPUs permita evitar a pensar na precisão numérica, outras melhorias de desempenho podem ser alcançadas ao transmitir valores explicitamente para bfloat16. Há dois motivos para fazer a transmissão explícita de valores para bfloat16:

  1. Armazenar valores no formato bfloat16 economiza memória no chip, permitindo que as Cloud TPUs treinem modelos maiores ou usem tamanhos de lote maiores.

  2. Algumas operações são vinculadas à largura de banda, o que significa que o tempo necessário para carregar dados da memória pode diminuir o tempo total gasto na execução do cálculo. Armazenar operandos e saídas dessas operações no formato bfloat16 reduz a quantidade de dados que precisam ser transferidos, melhorando a velocidade geral.

Para começar,recomendamos que você tenha alguma experiência prática com um dos modelos de referência habilitados para bfloat16 que otimizamos para Cloud TPUs. Depois disso, nosso guia de desempenho, o guia de ferramentas de criação de perfil e o guia de solução de problemas fornecerão informações técnicas detalhadas para ajudar você a criar e otimizar modelos de aprendizado de máquina por conta própria.