Melhorar a performance do modelo com o bfloat16
Por padrão, as TPUs executam
operações de multiplicação de matriz com valores bfloat16
e acumulações com valores float32
do IEEE. O uso de números de ponto flutuante de precisão reduzida diminui o tempo de
convergência sem perder a precisão.
O intervalo dinâmico de bfloat16
e float32
são equivalentes. No entanto, bfloat16
usa metade do espaço de memória. Para mais informações sobre o desempenho de bfloat16
,
consulte Um estudo do BFLOAT16 para treinamento de aprendizado profundo.
Usar bfloat16 explicitamente
Embora a conversão automática de formato em TPUs permita evitar a pensar na precisão
numérica, é possível alcançar melhorias de desempenho ao transmitir valores explicitamente
para bfloat16
. Há dois motivos para converter valores explicitamente em bfloat16
:
Armazenar valores no formato
bfloat16
economiza memória no chip, permitindo que as Cloud TPUs treinem modelos maiores ou usem tamanhos de lote maiores.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 com um dos modelos de referência do Cloud TPU. Depois disso, o guia de ferramentas de criação de perfil e o guia de solução de problemas fornecem informações técnicas detalhadas para ajudar você a criar e otimizar modelos de aprendizado de máquina por conta própria.
Formatar detalhes da 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 é
arredondado para o número par mais próximo
e transborda para inf
. Além disso, o bfloat16
no Cloud TPU não oferece suporte a
subnormais, portanto, todos os subnormais são zerados durante a conversão.
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. Como float32
pode representar todos os valores exatos em bfloat16
,
a conversão preenche 16 zeros nos bits de mantissa. Os valores especiais são
preservados na conversão.
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.