O Dia da Comunidade de ML é dia 9 de novembro! Junte-nos para atualização de TensorFlow, JAX, e mais Saiba mais

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.

TensorFlow Lite eo TensorFlow modelo de otimização Toolkit fornecer ferramentas para minimizar a complexidade de otimizar inferência.

É 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: Modelos menores ocupam menos espaço de armazenamento em dispositivos de seus 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 menor download: Modelos menores requerem menos tempo e largura de banda para download para dispositivos dos usuários.
  • Uso de memória menos: modelos menores usam menos memória RAM quando são executados, o que libera memória para outras partes do seu aplicativo para uso, e pode se traduzir em um 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 a borda TPU , pode executar a inferência extremamente rápido com modelos que foram corretamente otimizados.

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.

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

Quantização

Quantização trabalha 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% Menor perda de precisão CPU, GPU (Android)
Quantização inteira pós-treinamento Amostra representativa sem etiqueta Até 75% Pequena perda de precisão 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

A árvore de decisão a seguir ajuda a selecionar os esquemas de quantização que você pode querer 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 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 (quantificado 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
A Tabela 1 Benefícios do modelo quantização para determinados modelos CNN

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

Quantização com activações Int16 é um esquema de quantização inteiro cheio com activaçõ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: implementações de kernel de referência Atualmente, apenas não-otimizados estão disponíveis em TFLite para este esquema de quantização, então 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 Vantagens do modelo de quantificao com activações Int16

Poda

Poda obras removendo parâmetros dentro de um modelo que tem apenas um impacto menor 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

Clustering obras agrupando os pesos de cada camada em um modelo para um número pré-definido de aglomerados, em seguida, partilhar os valores centróide para os pesos que pertencem a cada grupo 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 eficácia, 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 trabalhar para sua aplicação. Se não, nós recomendamos que os usuários começam com a ferramenta de quantização pós-treino uma vez que este é amplamente aplicável e não requer dados de treinamento.

Para os casos onde a precisão e as metas de latência não são cumpridas, ou suporte acelerador de hardware é importante, formação de quantização-aware é a melhor opção. Veja técnicas de otimização adicionais sob o TensorFlow modelo de otimização Toolkit .

Se você quiser reduzir ainda mais o seu tamanho do modelo, você pode tentar poda e / ou agrupamento antes da quantização seus modelos.