Treinamento consciente de quantização

Mantido pela otimização do modelo TensorFlow

Existem duas formas de quantização: quantização pós-treinamento e treinamento consciente de quantização. Comece com a quantização pós-treinamento , pois é mais fácil de usar, embora o treinamento com reconhecimento de quantização geralmente seja melhor para a precisão do modelo.

Esta página fornece uma visão geral do treinamento com reconhecimento de quantização para ajudá-lo a determinar como ele se adapta ao seu caso de uso.

Visão geral

O treinamento com reconhecimento de quantização emula a quantização em tempo de inferência, criando um modelo que as ferramentas posteriores usarão para produzir modelos realmente quantizados. Os modelos quantizados usam precisão mais baixa (por exemplo, 8 bits em vez de float de 32 bits), gerando benefícios durante a implantação.

Implante com quantização

A quantização traz melhorias por meio da compactação do modelo e redução da latência. Com os padrões da API, o tamanho do modelo diminui em 4x e normalmente vemos melhorias de 1,5 a 4x na latência da CPU nos back-ends testados. Eventualmente, melhorias na latência podem ser vistas em aceleradores de aprendizado de máquina compatíveis, como EdgeTPU e NNAPI.

A técnica é usada na produção em casos de uso de fala, visão, texto e tradução. O código atualmente suporta um subconjunto desses modelos .

Experimente quantização e hardware associado

Os usuários podem configurar os parâmetros de quantização (por exemplo, número de bits) e, até certo ponto, os algoritmos subjacentes. Observe que, com essas alterações nos padrões da API, atualmente não há caminho compatível para implantação em um back-end. Por exemplo, a conversão TFLite e as implementações de kernel suportam apenas quantização de 8 bits.

APIs específicas para esta configuração são experimentais e não estão sujeitas a compatibilidade com versões anteriores.

Compatibilidade de API

Os usuários podem aplicar a quantização com as seguintes APIs:

  • Construção de modelos: keras apenas com modelos Sequenciais e Funcionais.
  • Versões do TensorFlow: TF 2.x para tf-nightly.
  • Modo de execução do TensorFlow: execução antecipada

Está em nosso roteiro adicionar suporte nas seguintes áreas:

  • Construção de modelo: esclareça como os modelos subclasses têm suporte limitado ou nenhum
  • Treinamento distribuído: tf.distribute

Matriz de apoio geral

O suporte está disponível nas seguintes áreas:

  • Cobertura do modelo: modelos usando camadas da lista de permissões , BatchNormalization quando segue as camadas Conv2D e DepthwiseConv2D e, em casos limitados, Concat .
  • Aceleração de hardware: nossos padrões de API são compatíveis com aceleração em backends EdgeTPU, NNAPI e TFLite, entre outros. Veja a advertência no roteiro.
  • Implante com quantização: apenas a quantização por eixo para camadas convolucionais, e não a quantização por tensor, é atualmente suportada.

Está em nosso roteiro adicionar suporte nas seguintes áreas:

  • Cobertura do modelo: estendida para incluir RNN/LSTMs e suporte geral de Concat.
  • Aceleração de hardware: garanta que o conversor TFLite possa produzir modelos inteiros completos. Consulte este problema para obter detalhes.
  • Experimente casos de uso de quantização:
    • Experimente algoritmos de quantização que abrangem camadas Keras ou exigem a etapa de treinamento.
    • Estabilize APIs.

Resultados

Classificação de imagens com ferramentas

Modelo Precisão Top-1 não quantizada Precisão quantizada de 8 bits
Rede MóvelV1 224 71,03% 71,06%
Resnet v1 50 76,3% 76,1%
Rede MóvelV2 224 70,77% 70,01%

Os modelos foram testados no Imagenet e avaliados no TensorFlow e no TFLite.

Classificação de imagens por técnica

Modelo Precisão Top-1 não quantizada Precisão quantizada de 8 bits
Nasnet-Mobile 74% 73%
Resnet-v2 50 75,6% 75%

Os modelos foram testados no Imagenet e avaliados no TensorFlow e no TFLite.

Exemplos

Além do exemplo de treinamento com reconhecimento de quantização , veja os exemplos a seguir:

  • Modelo CNN na tarefa de classificação de dígitos manuscritos MNIST com quantização: código

Para obter informações básicas sobre algo semelhante, consulte o artigo Quantização e treinamento de redes neurais para inferência eficiente somente de números inteiros . Este artigo apresenta alguns conceitos que esta ferramenta utiliza. A implementação não é exatamente a mesma e existem conceitos adicionais utilizados nesta ferramenta (por exemplo, quantização por eixo).