Otimização do modelo

Os dispositivos de borda geralmente têm memória ou poder computacional limitados. 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 otimização da inferência.

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

Por que os modelos devem ser otimizados

Existem várias maneiras principais pelas quais a otimização de 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: modelos menores ocupam menos espaço de armazenamento nos dispositivos de seus usuários. Por exemplo, um aplicativo Android usando um modelo menor ocupará menos espaço de armazenamento no dispositivo móvel de um usuário.
  • Tamanho de download menor: Modelos menores exigem menos tempo e largura de banda para download nos dispositivos dos usuários.
  • Menos uso de memória: modelos menores usam menos RAM quando são executados, o que libera memória para uso de outras partes do seu aplicativo e pode se traduzir em melhor desempenho e estabilidade.

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

Redução de latência

A 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 ter um impacto no 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 à custa 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 exigem 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.

Trocas

As otimizações podem potencialmente 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 uma pequena quantidade 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

Atualmente, o TensorFlow Lite oferece suporte à otimização por meio de quantização, poda e agrupamento.

Eles fazem parte do TensorFlow Model Optimization Toolkit , que fornece recursos para técnicas de otimização de modelos 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 compatível
Quantização float16 pós-treinamento Sem dados Até 50% Perda de precisão insignificante CPU, GPU
Quantização de faixa dinâmica pós-treinamento Sem dados Até 75% Menor perda de precisão CPU, GPU (Android)
Quantização inteira pós-treinamento Amostra representativa não rotulada Até 75% Pequena perda de precisão CPU, GPU (Android), EdgeTPU, Hexagon DSP
Treinamento de quantização Dados de treinamento rotulados Até 75% Menor perda de precisão CPU, GPU (Android), EdgeTPU, Hexagon DSP

A árvore de decisão a seguir ajuda a selecionar os esquemas de quantização que você deseja usar para seu modelo, simplesmente com base no tamanho e na precisão do modelo esperado.

árvore de decisão de quantização

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 de grande núcleo. À medida que o kit de ferramentas melhora, os números aqui também melhorarão:

Modelo Precisão Top 1 (Original) Precisão Top-1 (quantizada pós-treinamento) Precisão Top-1 (Treinamento de Quantização) Latência (Original) (ms) Latência (quantizada pós-treinamento) (ms) Latência (treinamento de 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 de modelo para modelos CNN selecionados

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 no TFLite para este esquema de quantização, portanto, por padrão, o desempenho será lento em comparação com kernels int8. Atualmente, todas as vantagens deste modo podem ser acessadas por meio de hardware especializado ou software personalizado.

Abaixo estão os resultados de precisão para alguns modelos que se beneficiam deste 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
Mobile Bert 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 menor em suas previsões. Os modelos removidos são do mesmo tamanho em disco e têm a mesma latência de tempo de execução, mas podem ser compactados com mais eficiência. 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 removidos.

Agrupamento

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 do centroide 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, pois ela é 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 ao acelerador de hardware é importante, o treinamento com reconhecimento de quantização é a melhor opção. Consulte técnicas de otimização adicionais no Kit de ferramentas de otimização de modelo do TensorFlow .

Se você quiser reduzir ainda mais o tamanho do seu modelo, tente remover e/ou agrupar antes de quantizar seus modelos.