O que é tudo sobre FP16, FP32 em Python? Meu potencial parceiro de negócios e eu estamos construindo uma configuração de aprendizado profundo para trabalhar com séries temporais. Ele criou “FP16 e FP32” enquanto procurava uma GPU. Parece que ele está falando sobre valores de ponto flutuante em 16 x 32 bits. (Nossos pontos de dados se parecem com isto: “5989.12345”, então tenho quase certeza de que 16 bits não são suficientes.)

É FP16 uma técnica especial que as GPUs usam para melhorar o desempenho ou é apenas um termo sofisticado para usar valores flutuantes de 16 bits em vez de 32 flutuantes padrão?

Comentários

  • Sim, FP16 significa 16 bits no contexto da GPU.

Resposta

FP32 e FP16 significam 32- ponto flutuante de bits e ponto flutuante de 16 bits. As GPUs originalmente focavam em FP32 porque esses são os cálculos necessários para jogos 3D. Hoje em dia, muitas GPUs têm suporte nativo de FP16 para acelerar o cálculo de redes neurais. Se você olhar alguns benchmarks ( https://blog.slavv.com/titan-rtx-quality-time-with-the-top-turing-gpu-fe110232a28e ) você verá que as GPUs que suportam FP16 são quase duas vezes mais rápidas calculando FP16 do que FP32. conta que as placas mais recentes que suportam FP16 (como a série NVidia 2080) também estão abo ut 20% mais rápido para FP32 em comparação com seu predecessor (1080), você obtém um aumento de 140% para treinar redes neurais FP16 em comparação com FP32 em placas anteriores.

Mas há uma ressalva. Sua rede neural precisa ser escrita usando FP16 e também deve ter a mesma precisão. FP16 tem menor precisão por design, porque eles têm muito menos bits para representar o mesmo número. Alguns optam por usar modelos de precisão mista para serem rápidos e precisos ( https://hackernoon.com/rtx-2080ti-vs-gtx-1080ti-fastai-mixed-precision-training-comparisons-on-cifar-100-761d8f615d7f ). Mas você vê no último link que a velocidade é mais rápida para precisão mista, mas não é 2 vezes mais rápida do que quando você usa FP16 puro. Você também pode teoricamente usar pesos FP32 e converter alguns deles em pesos FP16, mas a precisão pode cair.

Portanto, no final, você precisa entender se pode reescrever sua rede neural para usar FP16 total ou parcialmente . Caso contrário, você não obterá nenhum benefício adicional de cartões compatíveis com FP16.

O valor máximo para FP16 é 65504 e o mínimo é 5,96 × 10−8. A melhor precisão para 5989.12345 provavelmente será 5988.0 (reproduzido com bits em https://www.h-schmidt.net/FloatConverter/IEEE754.html ) Se esta precisão e magnitude forem não o suficiente para você, então você pode dimensionar seus dados antes de treinar para caber no FP16 e treinar com o dobro da velocidade. Ou use modelos de precisão mista onde você tem FP32 como entrada e, em seguida, reduza a precisão nas camadas posteriores.

Comentários

  • conteúdo de blog altamente informativo, obrigado por isso 🙂
  • Também incluí uma representação provável do seu número no FP16. Se você estiver satisfeito com a resposta, seria bom se você pudesse verificar a resposta como aceita e também votar positivamente, se quiser.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *