Clustering de peso

Mantido pelas ferramentas de ML da Arm

Este documento fornece uma visão geral sobre o clustering de peso para ajudar você a determinar como ele se adapta ao seu caso de uso.

Visão geral

O clustering ou compartilhamento de peso reduz o número de valores de peso únicos em um modelo, o que beneficia a implantação. Primeiro ele agrupa os pesos de cada camada em N clusters e compartilha o valor centroide do cluster para todos os pesos pertencentes ao cluster.

Essa técnica traz melhorias por meio da compactação do modelo. A compatibilidade com frameworks futuros pode reduzir o consumo de memória, fazendo uma diferença crucial para a implantação de modelos de aprendizado profundo em sistemas incorporados com recursos limitados.

Testamos o clustering em tarefas de visão e fala. Observamos melhorias de até cinco vezes na compressão do modelo com perda mínima de precisão, como demonstrado pelos resultados apresentados abaixo.

O clustering oferecerá benefícios reduzidos para convoluções e camadas densas que precedem uma camada de normalização em lote, além de uma combinação com quantização pós-treinamento por eixo.

Matriz de compatibilidade da API

Os usuários podem aplicar o clustering com as seguintes APIs:

  • Criação de modelos: tf.keras apenas com modelos sequenciais e funcionais
  • Versões do TensorFlow: TF 1.x para as versões 1.14 ou mais recentes e 2.x
    • tf.compat.v1 com um pacote TF 2.x e tf.compat.v2 com um pacote TF 1.x não são compatíveis.
  • Modo de execução do TensorFlow: grafo e rápido

Resultados

Classificação de imagens

Modelo original em cluster
Acurácia de primeiro nível (%) Tamanho do .tflite compactado (MB) Configuração No. de clusters Acurácia de primeiro nível (%) Tamanho do .tflite compactado (MB)
MobileNetV1 70,976 14,97
Seletiva (as últimas três camadas do Conv2D) 16, 16, 16 70,294 7,69
Seletiva (as últimas três camadas do Conv2D) 32, 32, 32 70,69 8,22
Completa (todas as camadas do Conv2D) 32 69,4 4,43
MobileNetV2 71,778 12,38
Seletiva (as últimas três camadas do Conv2D) 16, 16, 16 70,742 6,68
Seletiva (as últimas três camadas do Conv2D) 32, 32, 32 70,926 7,03
Completa (todas as camadas do Conv2D) 32 69,744 4,05

Os modelos foram treinados e testados no ImageNet.

Detecção de palavras-chave

Modelo original em cluster
Acurácia de primeiro nível (%) Tamanho do .tflite compactado (MB) Configuração No. de clusters Acurácia de primeiro nível (%) Tamanho do .tflite compactado (MB)
DS-CNN-L 95,233 1,46
Completa (todas as camadas do Conv2D) 32 95,09 0,39
Completa (todas as camadas do Conv2D) 8 94,272 0,27

O modelo foi treinado e testado no SpeechCommands v0.02.

  1. Serialize o modelo Keras em um arquivo .h5.
  2. Converta o arquivo .h5 em .tflite usando TFLiteConverter.from_keras_model_file().
  3. Compacte o arquivo .tflite em um arquivo ZIP.

Exemplos

Além do exemplo de clustering de peso no Keras, consulte os seguintes exemplos:

  • Faça clustering dos pesos de um modelo CNN treinado no conjunto de dados de classificação MNIST de dígitos escritos à mão: código.

A implementação de clustering de peso é baseada no artigo Compactação profunda: compactação de redes neurais profundas com remoção, quantização treinada e programação de Huffman (em inglês). Consulte o capítulo 3, chamado Quantização treinada e compartilhamento de peso.