FP8
Aprende o que é o FP8, como funcionam o E4M3 e o E5M2, e como o dimensionamento, o suporte de hardware e a precisão mista melhoram o treino e a inferência de IA.
O FP8, ou ponto flutuante de 8 bits, é um formato numérico de baixa precisão que armazena cada valor em oito bits. Os sistemas de IA usam o FP8 para reduzir o tráfego de memória e acelerar multiplicações de matrizes, convoluções e outras operações custosas em hardware compatível. Em comparação com o FP16 ou o FP32, ele representa menos valores distintos, portanto, fluxos de trabalho de FP8 bem-sucedidos combinam computação rápida de baixa precisão com dimensionamento e operações seletivas de maior precisão para preservar a qualidade do modelo.
Link to this sectionComo o FP8 representa números#
Um valor de ponto flutuante contém um sinal, um expoente que controla o intervalo e uma mantissa que controla os detalhes. O FP8 aparece comumente em dois formatos documentados pelos tipos de dados de ponto flutuante do PyTorch:
- E4M3: Um bit de sinal, quatro bits de expoente e três bits de mantissa. Ele fornece mais detalhes numéricos, mas um intervalo mais estreito.
- E5M2: Um bit de sinal, cinco bits de expoente e dois bits de mantissa. Ele cobre um intervalo mais amplo, mas arredonda os valores de forma mais agressiva.
O E4M3 é frequentemente adequado para pesos e ativações, enquanto o E5M2 pode acomodar melhor gradientes com grandes intervalos de valores. As variantes exatas diferem entre as plataformas, conforme mostrado na documentação de ponto flutuante de baixa precisão da AMD, portanto, um modelo em FP8 não é automaticamente portátil entre todos os aceleradores e tempos de execução.
Como oito bits não conseguem representar todo o intervalo e os detalhes originais de um tensor, as estruturas geralmente multiplicam os valores por um fator de escala antes da conversão. A introdução ao dimensionamento de FP8 da NVIDIA descreve estratégias como o dimensionamento atrasado, que deriva escalas futuras de valores máximos observados anteriormente. O dimensionamento limita o estouro (overflow), o subfluxo (underflow) e a saturação sem exigir que cada operação seja executada em maior precisão.
Link to this sectionFP8 vs formatos relacionados#
O FP8 ocupa uma posição intermediária entre os tipos de dados de IA comuns:
- FP16 ou meia precisão: Usa o dobro de bits, oferecendo maior detalhe numérico e treinamento geralmente mais simples. O FP8 pode reduzir ainda mais o armazenamento e a largura de banda, mas exige um dimensionamento mais cuidadoso.
- BF16: Mantém um amplo intervalo de expoentes, fornecendo menos detalhes fracionários do que o FP16. É frequentemente usado como o componente de maior precisão no treinamento em FP8.
- INT8: Representa inteiros em vez de valores de ponto flutuante. A quantização de modelos em INT8 normalmente depende de escalas para mapear valores reais em níveis inteiros fixos, enquanto o FP8 retém um expoente para um espaçamento naturalmente não uniforme.
- FP4: Usa apenas quatro bits e pode fornecer maior compactação, mas seu intervalo e granularidade extremamente limitados geralmente tornam a preservação da precisão mais difícil.
O FP8 faz parte frequentemente de um fluxo de trabalho de precisão mista em vez de ser o tipo de data para todos os tensores. A acumulação, a normalização, o estado do otimizador ou as camadas sensíveis podem permanecer em BF16, FP16 ou FP32. Além disso, a precisão numérica é diferente da métrica de avaliação de precisão, que mede quantas previsões positivas do modelo estão corretas.
Link to this sectionAplicações no Mundo Real#
Duas aplicações práticas ilustram por que o FP8 é importante:
-
Treinamento de grandes modelos: O treinamento de Transformer realiza repetidamente grandes multiplicações de matrizes. Uma estrutura compatível com FP8 pode converter pesos e ativações elegíveis em FP8, mantendo uma precisão maior onde a estabilidade exigir. Isso reduz a demanda de largura de banda e pode aumentar a taxa de transferência do treinamento. O fluxo de trabalho de treinamento quantizado do TorchAO inclui opções de dimensionamento por tensor e por linha que equilibram a velocidade máxima com um melhor tratamento de valores discrepantes.
-
Inferência de visão de alto rendimento: Um data center pode executar a detecção de objetos em centenas de fluxos de vídeo de varejo, tráfego ou manufatura. Kernels compatíveis com FP8 podem reduzir o tempo e a memória usados pelas camadas elegíveis do modelo, reduzindo potencialmente a latência de inferência e aumentando a capacidade de fluxos simultâneos. O guia de tipos quantizados do TensorRT explica como as operações explícitas de quantização e desquantização descrevem a execução em FP8.
Link to this sectionRiscos numéricos e suporte de hardware#
Um dimensionamento deficiente pode fazer com que valores grandesaturem e valores pequenos sejam arredondados para zero. Valores discrepantes são especialmente problemáticos quando uma única escala cobre um tensor inteiro. Esses efeitos podem alterar as pontuações de confiança, desestabilizar o treinamento ou reduzir a precisão da detecção, portanto, os desenvolvedores devem validar o modelo convertido em relação à sua linha de base de maior precisão.
O suporte de hardware nativo é igualmente importante. A arquitetura NVIDIA Hopper introduziu a aceleração por Tensor Core para FP8, enquanto a mais antiga GPU NVIDIA A100 oferece suporte a FP16, BF16 e INT8, mas não à computação nativa em FP8. A matriz de suporte de hardware do TensorRT deve, portanto, ser verificada antes de selecionar a precisão de implantação.
Link to this sectionTrabalhando com FP8 na prática#
Este pequeno exemplo em PyTorch demonstra a conversão para E4M3 e o erro de arredondamento produzido quando os valores em FP8 são restaurados para FP32:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))O fluxo de trabalho de exportação do TensorRT da Ultralytics documentado fornece opções de FP16 e INT8 calibrado para o Ultralytics YOLO, em vez de uma exportação de FP8 com um único argumento. A implantação de FP8, portanto, requer uma cadeia de ferramentas de conversão downstream compatível. Qualquer que seja a precisão selecionada, usa o modo de benchmark da Ultralytics na GPU de destino para comparar latência, taxa de transferência, uso de memória e precisão da tarefa antes da implantação em produção.






