paint-brush
Libérer une accélération 2x pour les DNN : transformer des modèles avec des réseaux de neurones intégraux en seulement 1 minutepar@thestage
1,231 lectures
1,231 lectures

Libérer une accélération 2x pour les DNN : transformer des modèles avec des réseaux de neurones intégraux en seulement 1 minute

par TheStage AI6m2023/08/31
Read on Terminal Reader

Trop long; Pour lire

Dans cet article, nous vous guiderons à travers le processus de transformation d'un modèle EDSR de super-résolution d'image 4x en un INN, puis vous montrerons comment réaliser un élagage structuré du modèle. Enfin, nous reconvertirons l'INN en un DNN discret et le déploierons sur un GPU Nvidia pour une inférence efficace.
featured image - Libérer une accélération 2x pour les DNN : transformer des modèles avec des réseaux de neurones intégraux en seulement 1 minute
TheStage AI HackerNoon profile picture
0-item
1-item


Les réseaux de neurones intégraux (INN) sont des architectures flexibles qui, formées une fois, peuvent être transformées en une taille arbitraire définie par l'utilisateur sans aucun réglage précis. Comme les ondes sonores (musique) peuvent être échantillonnées à n’importe quelle fréquence d’échantillonnage souhaitée (qualité du son), les DCI peuvent modifier dynamiquement la forme des données et des paramètres (qualité DNN).


Applications DCI. Lors de l'inférence, on peut modifier dynamiquement la taille du réseau en fonction des conditions matérielles ou des données. La réduction de taille est structurée et entraîne automatiquement une compression et une accélération du réseau neuronal.



L'équipe de TheStage.ai a présenté son article « Integral Neural Networks » lors de la conférence IEEE/CVF CVPR 2023. Ce travail a été reconnu comme l'un des 12 seuls articles « candidats au prix » présentés lors de l'événement. Les DCI sont une nouvelle classe de réseaux neuronaux qui combinent des paramètres continus et des opérateurs intégraux pour représenter les couches de base. Au cours de l'étape d'inférence, les DCI sont convertis en une représentation DNN vanille par échantillonnage discret à partir de poids continus. Les paramètres de tels réseaux sont continus le long des dimensions du filtre et du canal, ce qui conduit à un élagage structuré sans réglage fin simplement par re-discrétisation le long de ces dimensions.


Dans cet article, nous vous guiderons à travers le processus de transformation d'un modèle EDSR de super-résolution d'image 4x en un INN, puis vous montrerons comment réaliser un élagage structuré du modèle. Enfin, nous reconvertirons l'INN en un DNN discret et le déploierons sur un GPU Nvidia pour une inférence efficace. Cet article se déroulera comme suit :


  1. Une brève introduction aux DCI.
  2. Vue d'ensemble du réseau EDSR pour les tâches de super-résolution.
  3. Application-cadre TorchIntegral pour obtenir l'EDSR intégral en une seule ligne de code.
  4. Élagage structurel de l'INN sans réglage fin de l'INN (pipeline rapide).
  5. Déployez des modèles élagués sur les GPU Nvidia.


Pour plus d’informations et de mises à jour, veuillez consulter les ressources suivantes :

Site du projet INN

Projet INN Github

Code de support de cet article


Cartes de fonctionnalités d'EDSR discrets.


Cartes des fonctionnalités de INN EDSR. Il est facile de voir que les canaux des DCI sont organisés en permanence.


DCI pour l'élagage des DNN sans réglage fin

Les couches des DCI sont remplacées par des opérateurs intégraux, mais l'évaluation pratique des opérateurs intégraux nécessite la discrétisation des signaux d'entrée pour l'utilisation de méthodes d'intégration numérique. Il s’avère que les couches des DCI sont conçues de manière à coïncider avec les couches DNN classiques (entièrement connectées, convolutions) après discrétisation.


Présentation de l’évaluation intégrale de la couche entièrement connectée.


Taille d'image super-résolution EDSR 4x

La super-résolution d'image est une tâche de vision par ordinateur bien connue dans laquelle une image doit être améliorée avec un opérateur de dégradation connu ou inconnu. Nous considérons la forme classique de super-résolution utilisant le sous-échantillonnage bicubique comme opérateur de dégradation.


De nombreuses architectures peuvent être utilisées pour des tâches de super-résolution d’images, notamment des réseaux de neurones haut de gamme basés sur des modèles de diffusion et des transformateurs. Dans ce document, nous nous concentrerons sur l'architecture 4x EDSR. L'architecture EDSR est bien adaptée à notre démonstration car elle comprend ResNet (qui est largement utilisé dans de nombreux problèmes d'apprentissage profond) et un bloc de suréchantillonnage 4x à la fin. Une description schématique de l’EDSR peut être trouvée dans les figures suivantes.


Architecture EDSR. L'architecture EDSR se compose d'une séquence de blocs résiduels, suivie d'un bloc de suréchantillonnage. Ce bloc de suréchantillonnage est composé de plusieurs convolutions et couches de suréchantillonnage.


À gauche : architecture de blocs résiduels. À droite : bloc de suréchantillonnage pour une super-résolution 4x, chaque couche de suréchantillonnage a une échelle 2x.


Spécificités de l’élagage de l’architecture EDSR

L'élagage structuré, qui implique la suppression de filtres ou de canaux entiers, a des implications uniques pour les blocs résiduels, qui servent de principaux éléments de base dans EDSR. Étant donné que chaque état est mis à jour en ajoutant un bloc Conv -> ReLU -> Conv à l'entrée, les signaux d'entrée et de sortie doivent avoir le même nombre de paramètres. Cela peut être géré efficacement dans TorchIntegral en créant un graphique de dépendances d'élagage . La figure ci-dessous illustre que la deuxième convolution de chaque bloc résiduel forme un seul groupe.


Élagage des groupes de dépendances. Dans une séquence de blocs résiduels, la deuxième convolution forme un seul groupe.


Pour élaguer la deuxième convolution dans un bloc résiduel, il est nécessaire d’élaguer toutes les secondes convolutions dans chaque bloc résiduel. Cependant, pour une configuration plus flexible, nous élaguons les filtres des premières convolutions, et donc les canaux des secondes convolutions, dans tous les blocs résiduels.


Conversion du modèle EDSR en INN EDSR

Pour les conversions à partir des DNN pré-entraînés, nous utilisons notre algorithme spécial de permutation des canaux de filtre avec une interpolation plus fluide. L'algorithme de permutation préserve la qualité du modèle tout en donnant l'impression que les poids des DNN sont échantillonnés à partir de fonctions continues.


Conversion DNN en INN. Nous utilisons la formulation du problème du voyageur de commerce pour permuter les poids discrets. Après permutation, nous avons obtenu des poids plus fluides sans baisse de qualité du DNN pré-entraîné.


 import torch import torchintegral as inn from super_image import EdsrModel # creating 4x EDSR model model = EdsrModel.from_pretrained("eugenesiow/edsr", scale=4).cuda() # Transform model layers to integral. # continous_dims and discrete dims define which dimensions # of parameters tensors should be parametrized continuously # or stay fixed size as in discrete networks. # In our case we make all filter and channel dimensions # to be continuous excluding convolutions of the upsample block. model = inn.IntegralWrapper(init_from_discrete=True)( model, example_input, continuous_dims, discrete_dims ).cuda()


Réglage de la grille d'intégration : élagage structuré post-formation des DNN

Le réglage de la grille d'intégration est l'opération qui sélectionne en douceur (sous optimisation SGD) les tenseurs de paramètres dont les filtres doivent être échantillonnés pour les nombres définis par l'utilisateur. Contrairement aux méthodes de suppression de filtre/canal, les DCI génèrent des filtres qui peuvent combiner plusieurs filtres discrets grâce à l'opération d'interpolation.


Les DCI introduisent une opération de sélection douce par index sur le tenseur des paramètres selon les dimensions du filtre et du canal.


 # Set trainable gird for each integral layer # Each group should have the same grid # During the sum of continuous signals # We need to sample it using the same set of points for group in model.groups: new_size = 224 if 'operator' in group.operations else 128 group.reset_grid(inn.TrainableGrid1D(new_size)) # Prepare model for tuning of integration grid model.grid_tuning() # Start training train(model, train_data, test_data)


Le réglage de la grille d'intégration est un processus d'optimisation rapide qui peut être effectué sur un petit ensemble d'étalonnage. Le résultat de cette optimisation est un DNN structurellement compressé. Les tests sur un seul Nvidia A4000 montrent que le réglage de la grille d'intégration sur l'ensemble de données Div2k complet nécessite 4 minutes . Une configuration distribuée sur 4x A4000 démontre une accélération presque 4x, ce qui se traduit par un temps d'optimisation de seulement 1 minute .


Au cours de nos expériences, nous avons constaté que 500 images donnent le même résultat qu’un train Div2k complet de 4000 images.


Performance

Le modèle INN résultant peut être facilement converti en un modèle discret et déployé sur n'importe quel GPU NVIDIA. Nous fournissons des images par seconde (FPS) sur le RTX A4000 avec une résolution d'entrée de 64x64. Le modèle compressé atteint une accélération presque 2x. Pour convertir le modèle INN élagué en un modèle discret, la ligne de code suivante peut être utilisée :


 model = model.transform_to_discrete() # then model can be compiled, for instance # compilation can add an additional 1.4x speedup for inference model = torch.compile(model, backend='cudagraphs') 


Gauche. Image mise à l'échelle 4x Bicubic. Droite. Modèle EDSR compressé à 50 % utilisant INN.


Modèle

Taille FP16

FPS RTX A4000

PSNR

EDSR orig.

75 Mo

170

30h65

AUBERGE EDSR 30%

52 Mo

230

30.43

AUBERGE EDSR 40%

45 Mo

270

30.34

AUBERGE EDSR 50%

37 Mo

320

30h25

Conclusion

Dans cet article, nous avons présenté un aperçu de l'article candidat au prix CVPR2023, « Réseaux de neurones intégraux ». Il a été appliqué pour l'élagage post-formation du modèle EDSR 4x, atteignant une accélération de près de 2x avec une seule ligne de code et un réglage fin d'une minute de la grille d'intégration.


Dans nos prochains articles, nous présenterons plus d'applications des DCI et couvrirons plus de détails sur le déploiement efficace de modèles. Restez à l'écoute:


Site du projet INN

Projet INN Github

Code de support de cet article


Merci pour votre attention!


Également publié ici .