paint-brush
Entfesseln Sie die doppelte Beschleunigung für DNNs: Transformieren Sie Modelle mit integralen neuronalen Netzen in nur 1 Minutevon@thestage
1,231 Lesungen
1,231 Lesungen

Entfesseln Sie die doppelte Beschleunigung für DNNs: Transformieren Sie Modelle mit integralen neuronalen Netzen in nur 1 Minute

von TheStage AI6m2023/08/31
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

In diesem Artikel führen wir Sie durch den Prozess der Umwandlung eines 4x-Bild-EDSR-Modells mit Superauflösung in ein INN und zeigen Ihnen dann, wie Sie eine strukturierte Bereinigung des Modells erreichen. Schließlich werden wir die INN wieder in eine diskrete DNN umwandeln und sie für eine effiziente Inferenz auf einer Nvidia-GPU bereitstellen.
featured image - Entfesseln Sie die doppelte Beschleunigung für DNNs: Transformieren Sie Modelle mit integralen neuronalen Netzen in nur 1 Minute
TheStage AI HackerNoon profile picture
0-item
1-item


Integrale neuronale Netze (INNs) sind flexible Architekturen, die einmal trainiert werden und ohne Feinabstimmung in eine beliebige benutzerdefinierte Größe umgewandelt werden können. Da Schallwellen (Musik) mit jeder gewünschten Abtastrate (Klangqualität) abgetastet werden können, können INNs die Form von Daten und Parametern (DNN-Qualität) dynamisch ändern.


INNs-Anwendungen. Bei der Inferenz kann man die Größe des Netzwerks je nach Hardware- oder Datenbedingungen dynamisch ändern. Die Größenreduzierung ist strukturiert und führt automatisch zu einer Kompression und Beschleunigung des neuronalen Netzwerks.



Das Team von TheStage.ai präsentierte seinen Artikel „Integral Neural Networks“ auf der IEEE/CVF CVPR 2023-Konferenz. Diese Arbeit wurde als eine von nur 12 „Award Candidate“-Arbeiten ausgezeichnet, die auf der Veranstaltung vorgestellt wurden. INNs sind eine neue Klasse neuronaler Netze, die kontinuierliche Parameter und Integraloperatoren kombinieren, um grundlegende Schichten darzustellen. Während der Inferenzphase werden INNs durch diskrete Stichproben aus kontinuierlichen Gewichten in eine Vanilla-DNN-Darstellung umgewandelt. Die Parameter solcher Netzwerke sind entlang der Filter- und Kanaldimensionen kontinuierlich, was zu einer strukturierten Bereinigung ohne Feinabstimmung allein durch Neudiskretisierung entlang dieser Dimensionen führt.


In diesem Artikel führen wir Sie durch den Prozess der Umwandlung eines 4x-Bild-EDSR-Modells mit Superauflösung in ein INN und zeigen Ihnen dann, wie Sie eine strukturierte Bereinigung des Modells erreichen. Schließlich werden wir die INN wieder in eine diskrete DNN umwandeln und sie für eine effiziente Inferenz auf einer Nvidia-GPU bereitstellen. Dieser Artikel wird wie folgt ablaufen:


  1. Eine kurze Einführung in INNs.
  2. Überblick über das EDSR-Netzwerk für Super-Resolution-Aufgaben.
  3. TorchIntegra-Framework-Anwendung, um integrales EDSR in einer einzigen Codezeile zu erhalten.
  4. Strukturelle Beschneidung von INN ohne INN-Feinabstimmung (schnelle Pipeline).
  5. Stellen Sie bereinigte Modelle auf Nvidia-GPUs bereit.


Weitere Informationen und Aktualisierungen finden Sie in den folgenden Ressourcen:

INN-Projektseite

INN-Projekt Github

Supportcode dieses Artikels


Feature-Maps von diskretem EDSR.


Feature-Karten von INN EDSR. Es ist leicht zu erkennen, dass Kanäle in INNs kontinuierlich organisiert sind.


INNs für DNNs-Beschneidung ohne Feinabstimmung

Schichten in INNs werden durch Integraloperatoren ersetzt, aber die praktische Auswertung von Integraloperatoren erfordert die Diskretisierung von Eingangssignalen für die Verwendung numerischer Integrationsmethoden. Es stellt sich heraus, dass die Schichten in INNs so gestaltet sind, dass sie nach der Diskretisierung mit klassischen DNN-Schichten (vollständig verbunden, Faltungen) übereinstimmen.


Überblick über die integrale, vollständig verbundene Schichtbewertung.


EDSR 4x Bild-Super-Resolution-Beschneidung

Die Superauflösung von Bildern ist eine bekannte Computer-Vision-Aufgabe, bei der ein Bild mit einem bekannten oder unbekannten Verschlechterungsoperator verbessert werden soll. Wir betrachten die klassische Superauflösungsform mit bikubischem Downsampling als Degradationsoperator.


Viele Architekturen können für Bild-Superauflösungsaufgaben verwendet werden, einschließlich hochwertiger neuronaler Netze, die auf Diffusionsmodellen und Transformatoren basieren. In diesem Dokument konzentrieren wir uns auf die 4x EDSR-Architektur. Die EDSR-Architektur ist für unsere Demonstration gut geeignet, da sie ResNet (das bei vielen Deep-Learning-Problemen weit verbreitet ist) und einen 4x-Upsampling-Block am Ende umfasst. Eine schematische Beschreibung von EDSR finden Sie in den folgenden Abbildungen.


EDSR-Architektur. Die EDSR-Architektur besteht aus einer Folge von Restblöcken, gefolgt von einem Upsample-Block. Dieser Upsample-Block besteht aus mehreren Faltungen und Upsample-Schichten.


Links: Restblockarchitektur. Rechts: Upsampling-Block für 4-fache Superauflösung, jede Upsample-Ebene hat eine 2-fache Skalierung.


Besonderheiten der EDSR-Architekturbereinigung

Das strukturierte Bereinigen, bei dem ganze Filter oder Kanäle gelöscht werden, hat einzigartige Auswirkungen auf Restblöcke, die als primäre Bausteine in EDSR dienen. Da jeder Zustand durch Hinzufügen eines Conv -> ReLU -> Conv-Blocks zum Eingang aktualisiert wird, müssen die Eingangs- und Ausgangssignale die gleiche Anzahl von Parametern haben. Dies kann in TorchIntegral effizient verwaltet werden, indem ein Pruning-Abhängigkeitsdiagramm erstellt wird. Die folgende Abbildung zeigt, dass die zweite Faltung jedes Restblocks eine einzelne Gruppe bildet.


Abhängigkeitsgruppen beschneiden. In einer Folge von Restblöcken bildet die zweite Faltung eine einzelne Gruppe.


Um die zweite Faltung in einem Restblock zu beschneiden, müssen alle zweiten Faltungen in jedem Restblock beschnitten werden. Für einen flexibleren Aufbau bereinigen wir jedoch die Filter der ersten Faltungen und damit die Kanäle der zweiten Faltungen in allen Restblöcken.


Konvertierung des EDSR-Modells in INN EDSR

Für Konvertierungen aus den vorab trainierten DNNs verwenden wir unseren speziellen Filterkanal-Permutationsalgorithmus mit weiterer glatter Interpolation. Der Permutationsalgorithmus bewahrt die Modellqualität und sorgt gleichzeitig dafür, dass die Gewichte der DNNs so aussehen, als wären sie aus kontinuierlichen Funktionen entnommen.


Konvertierung von DNN in INN. Wir verwenden die Problemformulierung des Handlungsreisenden, um diskrete Gewichte zu permutieren. Nach der Permutation erhielten wir glattere Gewichte, ohne dass die Qualität des vorab trainierten DNN abfiel.


 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()


Optimierung des Integrationsgitters: Strukturierte Bereinigung von DNNs nach dem Training

Bei der Optimierung des Integrationsgitters handelt es sich um die Operation, die Parametertensoren (unter SGD-Optimierung) reibungslos auswählt, deren Filter für benutzerdefinierte Zahlen abgetastet werden sollen. Im Gegensatz zu den Filter-/Kanallöschmethoden generieren INNs Filter, die aufgrund der Interpolationsoperation mehrere diskrete Filter kombinieren können.


INNs führen eine Soft-Select-by-Index-Operation für den Tensor von Parametern entlang der Filter- und Kanaldimensionen ein.


 # 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)


Die Optimierung des Integrationsgitters ist ein schneller Optimierungsprozess , der mit einem kleinen Kalibrierungssatz durchgeführt werden kann. Das Ergebnis dieser Optimierung ist ein strukturell komprimiertes DNN. Tests an einem einzelnen Nvidia A4000 zeigen, dass die Optimierung des Integrationsrasters für den gesamten Div2k-Datensatz 4 Minuten erfordert . Ein verteilter Aufbau auf 4x A4000 zeigt eine fast vierfache Geschwindigkeitssteigerung, was zu einer Optimierungszeit von nur 1 Minute führt.


Während unserer Experimente haben wir herausgefunden, dass 500 Bilder das gleiche Ergebnis liefern wie ein vollständiger Div2k-Zugsatz mit 4000 Bildern.


Leistung

Das resultierende INN-Modell kann problemlos in ein diskretes Modell umgewandelt und auf jeder NVIDIA-GPU bereitgestellt werden. Wir bieten Bilder pro Sekunde (FPS) auf der RTX A4000 mit einer Eingangsauflösung von 64x64. Das komprimierte Modell erreicht eine fast zweifache Geschwindigkeitssteigerung. Um das beschnittene INN-Modell in ein diskretes Modell umzuwandeln, kann die folgende Codezeile verwendet werden:


 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') 


Links. 4x bikubisch hochskaliertes Bild. Rechts. 50 % komprimiertes EDSR-Modell mit INN.


Modell

Größe FP16

FPS RTX A4000

PSNR

EDSR Orig.

75 MB

170

30.65

INN EDSR 30 %

52 MB

230

30.43

INN EDSR 40 %

45 MB

270

30.34

INN EDSR 50 %

37 MB

320

30.25

Abschluss

In diesem Artikel haben wir einen Überblick über das CVPR2023-Kandidatenpapier „Integrale neuronale Netze“ gegeben. Es wurde für die Bereinigung des 4x-EDSR-Modells nach dem Training angewendet und erreichte mit einer einzigen Codezeile und einer einminütigen Feinabstimmung des Integrationsrasters eine fast zweifache Beschleunigung.


In unseren zukünftigen Artikeln werden wir weitere Anwendungen der INNs vorstellen und weitere Details zur effizienten Modellbereitstellung behandeln. Bleiben Sie dran:


INN-Projektseite

INN-Projekt Github

Supportcode dieses Artikels


Danke für Ihre Aufmerksamkeit!


Auch hier veröffentlicht.