Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/pt-br/lite/performance/model_optimization.md
25118 views

Otimização de modelo

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

O TensorFlow Lite e o Kit de ferramentas para otimização de modelo do TensorFlow fornece ferramentas para reduzir a complexidade de otimizar a inferência.

É recomendável considerar a otimização do modelo durante o processo de desenvolvimento do seu aplicativo. Este documento descreve algumas práticas recomendadas para otimizar modelos do TensorFlow para a implantação de hardware de borda.

Por que os modelos devem ser otimizados

A otimização de modelo pode ajudar com o desenvolvimento de aplicativos de várias maneiras.

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:

  • Menor tamanho de armazenamento: modelos menores ocupam menos espaço de armazenamento nos dispositivos dos 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.

  • Menor tamanho de download: modelos menores exigem menos tempo e largura de banda para serem baixados nos dispositivos dos usuários.

  • Menos uso da memória: modelos menores usam menos RAM quando são executados, o que libera a memória para que seja usada por outras partes do seu aplicativo e pode resultar em melhor desempenho e estabilidade.

A quantização pode reduzir o tamanho de um modelo em todos esses casos, possivelmente à custa de um pouco de exatidão. O pruning e o clustering podem reduzir o tamanho de um modelo para download ao torná-lo mais facilmente compressí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 realizar a inferência usando um modelo, resultando em menor latência. A latência também pode ter um impacto no consumo de energia.

No momento, a quantização pode ser usada para reduzir a latência ao simplificar os cálculos que ocorrem durante a inferência, possivelmente à custa de um pouco de exatidão.

Compatibilidade com os aceleradores

Alguns aceleradores de hardware, como o Edge TPU, podem realizar a inferência de forma extremamente rápida com modelos que foram otimizados de maneira correta.

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

Trade-offs

As otimizações podem resultar possivelmente em mudanças na exatidão do modelo, o que precisa ser considerado durante o processo de desenvolvimento do aplicativo.

As mudanças na exatidão dependem do modelo individual que está sendo otimizado e são difíceis de prever com antecedência. Geralmente, os modelos otimizados para o tamanho ou a latência perdem um pouco da exatidão. Dependendo do seu aplicativo, isso pode afetar ou não a experiência dos seus usuários. Em casos raros, alguns modelos podem ganhar um pouco de exatidão como resultado do processo de otimização.

Tipos de otimização

Atualmente, o TensorFlow Lite aceita a otimização por quantização, pruning e clustering.

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

Quantização

A quantização funciona ao reduzir 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 menor tamanho de modelo e uma computação mais rápida.

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

TécnicaRequisitos de dadosRedução de tamanhoExatidãoHardware compatível
Quantização float16 pós-treinamentoNenhum dadoAté 50%Perda de exatidão insignificanteCPU, GPU
Quantização de intervalo dinâmico pós-treinamentoNenhum dadoAté 75%Perda de exatidão mínimaCPU, GPU (Android)
Quantização de números inteiros pós-treinamentoAmostra representativa não rotuladaAté 75%Perda de exatidão pequenaCPU, GPU (Android), EdgeTPU, DSP Hexagon
Treinamento consciente de quantizaçãoDados de treinamento rotuladosAté 75%Perda de exatidão mínimaCPU, GPU (Android), EdgeTPU, DSP Hexagon

A seguinte árvore de decisão ajuda você a selecionar os esquemas de quantização que talvez queira usar para seu modelo, simplesmente com base no tamanho e na exatidão esperados do modelo.

Árvore de decisão de quantização

Confira abaixo os resultados de latência e exatidão para a quantização pós-treinamento e o treinamento consciente 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. Conforme o kit de ferramentas melhorar, os números aqui também vão:

Model Top-1 Accuracy (Original) Top-1 Accuracy (Post Training Quantized) Top-1 Accuracy (Quantization Aware Training) Latency (Original) (ms) Latency (Post Training Quantized) (ms) Latency (Quantization Aware Training) (ms) Size (Original) (MB) Size (Optimized) (MB)
Mobilenet-v1-1-2240.7090.6570.70 1241126416.94.3
Mobilenet-v2-1-2240.7190.6370.709 899854143.6
Inception_v30.780.7720.775 113084554395.723.9
Resnet_v2_1010.7700.768N/A 39732868N/A178.344.9
Table 1 Benefits of model quantization for select CNN models

Quantização de números inteiros com ativações int16 e pesos int8

A quantização com ativações int16 é um esquema de quantização de números inteiros com ativações em int16 e pesos em int8. Esse modo pode melhorar a exatidão do modelo quantizado em comparação com o esquema de quantização de números inteiros com as ativações e os pesos em int8, mantendo um tamanho de modelo semelhante. É recomendado quando as ativações são sensíveis à quantização.

OBSERVAÇÃO: no momento, somente implementações de kernels de referência não otimizados estão disponíveis no TFLite para esse esquema de quantização. Então, por padrão, o desempenho será lento em comparação aos kernels int8. Os benefícios completos desse modo podem ser acessados por hardware especializado ou software personalizado.

Confira os resultados de exatidão para alguns modelos que se beneficiam desse modo.

Model Accuracy metric type Accuracy (float32 activations) Accuracy (int8 activations) Accuracy (int16 activations)
Wav2letterWER6.7%7.7% 7.2%
DeepSpeech 0.5.1 (unrolled)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1Top-1 Accuracy0.70620.694 0.6936
MobileNetV2Top-1 Accuracy0.7180.7126 0.7137
MobileBertF1(Exact match)88.81(81.23)2.08(0) 88.73(81.15)
Table 2 Benefits of model quantization with int16 activations

Pruning

O pruning atua removendo os parâmetros de um modelo que só têm um impacto menor nas suas previsões. Os modelos que passaram pelo pruning têm o mesmo tamanho em disco e a mesma latência de runtime, mas podem ser comprimidos com mais eficiência. Isso faz com que o pruning seja uma técnica útil para reduzir o tamanho de download do modelo.

No futuro, o TensorFlow Lite proporcionará a redução da latência para modelos após o pruning.

Clustering

O clustering atua agrupando os pesos de cada camada de um modelo em um número predefinido de clusters e, depois, compartilhando os valores de centroides para os pesos que pertencem a cada cluster individual. Isso reduz o número de valores de pesos únicos em um modelo, diminuindo sua complexidade.

Como resultado, os modelos que passaram pelo clustering podem ser comprimidos com mais eficiência, oferecendo benefícios semelhantes ao pruning para a implantação.

Fluxo de trabalho de desenvolvimento

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

Para os casos em que os alvos de exatidão e latência não forem atingidos ou o suporte ao acelerador de hardware for importante, o treinamento consciente de quantização{:.external} é a melhor opção. Veja as técnicas de otimização adicionais no Kit de ferramentas para a otimização de modelo do TensorFlow.

Se você quiser reduzir ainda mais o tamanho do modelo, experimente o pruning e/ou clustering antes da quantização.