RSVP para seu evento TensorFlow Everywhere local hoje!
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Otimização de modelo

Dispositivos de borda geralmente têm memória limitada ou poder computacional. Várias otimizações podem ser aplicadas aos modelos para que possam ser executados dentro dessas restrições. Além disso, algumas otimizações permitem o uso de hardware especializado para inferência acelerada.

O TensorFlow Lite e o TensorFlow Model Optimization Toolkit fornecem ferramentas para minimizar a complexidade da inferência de otimização.

É recomendável que você considere a otimização do modelo durante o processo de desenvolvimento de seu aplicativo. Este documento descreve algumas práticas recomendadas para otimizar modelos do TensorFlow para implantação em hardware de ponta.

Por que os modelos devem ser otimizados

Existem várias maneiras principais pelas quais a otimização do modelo pode ajudar no desenvolvimento de aplicativos.

Redução de tamanho

Algumas formas de otimização podem ser usadas para reduzir o tamanho de um modelo. Modelos menores têm os seguintes benefícios:

  • Tamanho de armazenamento menor: os modelos menores ocupam menos espaço de armazenamento nos dispositivos dos usuários. Por exemplo, um aplicativo Android usando um modelo menor ocupará menos espaço de armazenamento no dispositivo móvel do usuário.
  • Tamanho de download menor: modelos menores exigem menos tempo e largura de banda para fazer download nos dispositivos dos usuários.
  • Menos uso de memória: os modelos menores usam menos RAM quando são executados, o que libera memória para outras partes do aplicativo usarem e pode resultar em melhor desempenho e estabilidade.

A quantização pode reduzir o tamanho de um modelo em todos esses casos, potencialmente às custas de alguma precisão. A remoção e o armazenamento em cluster podem reduzir o tamanho de um modelo para download, tornando-o mais facilmente compactável.

Redução de latência

Latência é a quantidade de tempo que leva para executar uma única inferência com um determinado modelo. Algumas formas de otimização podem reduzir a quantidade de computação necessária para executar a inferência usando um modelo, resultando em menor latência. A latência também pode afetar o consumo de energia.

Atualmente, a quantização pode ser usada para reduzir a latência, simplificando os cálculos que ocorrem durante a inferência, potencialmente às custas de alguma precisão.

Compatibilidade do acelerador

Alguns aceleradores de hardware, como o Edge TPU , podem executar inferências de forma extremamente rápida com modelos que foram otimizados corretamente.

Geralmente, esses tipos de dispositivos requerem que os modelos sejam quantizados de uma maneira específica. Consulte a documentação de cada acelerador de hardware para saber mais sobre seus requisitos.

Trade-offs

As otimizações podem resultar em mudanças na precisão do modelo, que devem ser consideradas durante o processo de desenvolvimento do aplicativo.

As alterações de precisão dependem do modelo individual que está sendo otimizado e são difíceis de prever com antecedência. Geralmente, os modelos otimizados para tamanho ou latência perderão um pouco de precisão. Dependendo do seu aplicativo, isso pode ou não afetar a experiência dos usuários. Em casos raros, certos modelos podem ganhar alguma precisão como resultado do processo de otimização.

Tipos de otimização

O TensorFlow Lite atualmente oferece suporte à otimização por meio de quantização, poda e clustering.

Eles fazem parte do TensorFlow Model Optimization Toolkit , que fornece recursos para técnicas de otimização de modelo compatíveis com o TensorFlow Lite.

Quantização

A quantização funciona reduzindo a precisão dos números usados ​​para representar os parâmetros de um modelo, que por padrão são números de ponto flutuante de 32 bits. Isso resulta em um tamanho de modelo menor e computação mais rápida.

Os seguintes tipos de quantização estão disponíveis no TensorFlow Lite:

Técnica Requisitos de dados Redução de tamanho Precisão Hardware suportado
Quantização pós-treinamento float16 Sem dados Até 50% Perda de precisão insignificante CPU, GPU
Quantização de faixa dinâmica pós-treinamento Sem dados Até 75% Perda de precisão CPU, GPU (Android)
Quantização inteira pós-treinamento Amostra representativa sem etiqueta Até 75% Perda de precisão menor CPU, GPU (Android), EdgeTPU, Hexagon DSP
Treinamento ciente de quantização Dados de treinamento rotulados Até 75% Menor perda de precisão CPU, GPU (Android), EdgeTPU, Hexagon DSP

Abaixo estão os resultados de latência e precisão para quantização pós-treinamento e treinamento com reconhecimento de quantização em alguns modelos. Todos os números de latência são medidos em dispositivos Pixel 2 usando uma única CPU big core. À medida que o kit de ferramentas melhora, o mesmo acontece com os números aqui:

Modelo Precisão principal (original) Precisão principal (quantização pós-treinamento) Precisão principal (treinamento com reconhecimento de quantização) Latência (original) (ms) Latência (quantização pós-treinamento) (ms) Latência (treinamento com reconhecimento de quantização) (ms) Tamanho (original) (MB) Tamanho (otimizado) (MB)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16,9 4,3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3,6
Inception_v3 0,78 0,772 0,775 1130 845 543 95,7 23,9
Resnet_v2_101 0,770 0,768 N / D 3973 2868 N / D 178,3 44,9
Tabela 1 Benefícios da quantização do modelo para modelos selecionados da CNN

Quantização inteira completa com ativações int16 e pesos int8

A quantização com ativações int16 é um esquema de quantização inteiro completo com ativações em int16 e pesos em int8. Este modo pode melhorar a precisão do modelo quantizado em comparação com o esquema de quantização inteiro completo com ativações e pesos em int8 mantendo um tamanho de modelo semelhante. É recomendado quando as ativações são sensíveis à quantização.

NOTA: Atualmente, apenas implementações de kernel de referência não otimizadas estão disponíveis em TFLite para este esquema de quantização, portanto, por padrão, o desempenho será lento em comparação com kernels int8. Todas as vantagens deste modo podem ser acessadas via hardware especializado ou software personalizado.

Abaixo estão os resultados de precisão para alguns modelos que se beneficiam desse modo.

Modelo Tipo de métrica de precisão Precisão (ativações float32) Precisão (ativações int8) Precisão (ativações int16)
Wav2letter NÓS SOMOS 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (desenrolado) CER 6,13% 43,67% 6,52%
YoloV3 mAP (IOU = 0,5) 0,577 0,563 0,574
MobileNetV1 Precisão principal 0,7062 0,694 0,6936
MobileNetV2 Precisão principal 0,718 0,7126 0,7137
MobileBert F1 (correspondência exata) 88,81 (81,23) 2,08 (0) 88,73 (81,15)
Tabela 2 Benefícios da quantização do modelo com ativações int16

Poda

A poda funciona removendo parâmetros dentro de um modelo que têm apenas um impacto mínimo em suas previsões. Os modelos podados têm o mesmo tamanho no disco e têm a mesma latência de tempo de execução, mas podem ser compactados com mais eficácia. Isso torna a poda uma técnica útil para reduzir o tamanho do download do modelo.

No futuro, o TensorFlow Lite fornecerá redução de latência para modelos podados.

Clustering

O clustering funciona agrupando os pesos de cada camada em um modelo em um número predefinido de clusters e, em seguida, compartilhando os valores de centróide para os pesos pertencentes a cada cluster individual. Isso reduz o número de valores de peso exclusivos em um modelo, reduzindo assim sua complexidade.

Como resultado, os modelos em cluster podem ser compactados com mais eficiência, fornecendo benefícios de implantação semelhantes à remoção.

Fluxo de trabalho de desenvolvimento

Como ponto de partida, verifique se os modelos em modelos hospedados podem funcionar para seu aplicativo. Caso contrário, recomendamos que os usuários comecem com a ferramenta de quantização pós-treinamento, uma vez que é amplamente aplicável e não requer dados de treinamento.

Para casos em que as metas de precisão e latência não são atendidas ou o suporte do acelerador de hardware é importante, o treinamento com reconhecimento de quantização é a melhor opção. Veja outras técnicas de otimização no TensorFlow Model Optimization Toolkit .

Se você deseja reduzir ainda mais o tamanho do seu modelo, pode tentar podar e / ou agrupar antes de quantizar seus modelos.