Otimização do modelo

Os dispositivos Edge 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 considerar a otimização do modelo durante o processo de desenvolvimento do aplicativo. Este documento descreve algumas práticas recomendadas para otimizar 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 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: 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 requerem menos tempo e largura de banda para fazer 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 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 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 necessária 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 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 extremamente rápidas 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.

Compensações

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

As mudanças na 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 impactar 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, remoção 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 float16 pós-treinamento Sem dados Até 50% Perda insignificante de precisão 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 com reconhecimento 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 o seu modelo, simplesmente com base no tamanho e na precisão esperados do modelo.

á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 melhoram:

Modelo Precisão principal (original) Precisão principal (quantizada pós-treinamento) Precisão principal (treinamento consciente de quantização) Latência (Original) (ms) Latência (quantizada pós-treinamento) (ms) Latência (treinamento consciente 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
Início_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 modelos 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 de número 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 de número 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 os 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)
Letra Wav2 NÓS SOMOS 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (desenrolado) RCE 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 de um modelo que têm apenas um impacto menor em suas previsões. Os modelos removidos têm o mesmo tamanho em disco e 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 de download do modelo.

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

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 centróide para os pesos pertencentes a cada cluster individual. Isto reduz o número de valores de peso exclusivos em um modelo, reduzindo assim sua complexidade.

Como resultado, os modelos clusterizados podem ser compactados de forma mais eficaz, proporcionando benefícios de implantação semelhantes aos da remoção.

Fluxo de trabalho de desenvolvimento

Como ponto de partida, verifique se os modelos hospedados podem funcionar para sua aplicação. 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 do 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 quiser reduzir ainda mais o tamanho do seu modelo, você pode tentar podar e/ou agrupar antes de quantizar seus modelos.