Melhore o desempenho do seu modelo com o bfloat16

Por predefinição, as TPUs realizam operações de multiplicação de matrizes com valores bfloat16 e acumulações com valores IEEE float32. A utilização de números de vírgula flutuante de precisão reduzida diminui o tempo de convergência sem perder precisão.

O intervalo dinâmico de bfloat16 e float32 é equivalente. No entanto, bfloat16 usa metade do espaço de memória. Para mais informações sobre o bfloat16desempenho, consulte Um estudo do BFLOAT16 para a preparação de aprendizagem profunda.

Use bfloat16 explicitamente

Embora a conversão automática de formatos nas UTPs lhe permita não ter de pensar na precisão numérica, pode conseguir melhorias no desempenho ao converter explicitamente valores em bfloat16. Existem dois motivos para converter explicitamente valores em bfloat16:

  1. O armazenamento de valores no formato bfloat16 poupa memória no chip, o que permite às TPUs na nuvem formar modelos maiores ou usar tamanhos de lotes maiores.

  2. Algumas operações estão limitadas pela largura de banda da memória, o que significa que a quantidade de tempo necessária para carregar dados da memória pode abrandar o tempo total gasto na realização do cálculo. O armazenamento de operandos e resultados dessas operações no formato bfloat16 reduz a quantidade de dados que têm de ser transferidos, o que melhora a velocidade geral.

Para começar, recomendamos que ganhe alguma experiência com um dos modelos de referência da TPU na nuvem. Depois disso, o guia de criação de perfis e o guia de resolução de problemas fornecem informações técnicas detalhadas para ajudar a criar e otimizar modelos de aprendizagem automática de forma autónoma.

Formatar detalhes de conversão

A conversão de formato de float32 para bfloat16 é inserida automaticamente pelo compilador XLA. Na TPU, o esquema de arredondamento na conversão é arredondar para o número par mais próximo e transbordar para inf. Além disso, o bfloat16 no Cloud TPU não suporta subnormais, pelo que todos os subnormais são eliminados para zero durante a conversão. Os valores especiais, como NaN e inf, são preservados na conversão.

A conversão de formato de bfloat16 para float32 também é inserida automaticamente pelo compilador XLA. Uma vez que float32 pode representar todos os valores exatos em bfloat16, a conversão preenche com 16 zeros os bits da mantissa. Os valores especiais são preservados na conversão.

Os pontos de verificação obtidos a partir de um modelo preparado em TPUs do Google Cloud podem ser implementados noutras plataformas de hardware (por exemplo, inferência ou ajuste fino em CPUs ou GPUs) sem conversões manuais extensivas.