Contents
Welkom terug bij de DNN-modeloptimalisatiereeks! Ons recente artikel over de unieke optimalisatiesoftware van Deeplite, Neutrino™, heeft de prijs “Best Deployed System” gewonnen op Innovatieve toepassingen van kunstmatige intelligentie 2021. Voor deze gelegenheid hebben we besloten om dit nummer van de serie DNN-modeloptimalisatie te wijden aan een diepe duik in de kampioen onderzoekspaper.
AI en deep learning, met name voor edge-apparaten, winnen aan kracht en beloven de digitalisering van veel verticale markten mogelijk te maken. Ondanks alle opwinding is het inzetten van deep learning makkelijker gezegd dan gedaan! In een van onze vorige blogposts hebben we al gekeken waarom je je DNN-modellen moet optimaliseren. Laten we eens kijken naar 'hoe' het Neutrino™-framework van Deeplite de optimalisatie van de steeds grotere AI-modellen aanpakt en de weg vrijmaakt voor eenvoudige implementaties in randapparaten met steeds meer beperkingen.
Neutrino™ is een end-to-end black-box-platform voor volledig geautomatiseerde DNN-modelcompressie die de modelnauwkeurigheid handhaaft. Het kan naadloos en soepel worden geïntegreerd in elke ontwikkelings- en implementatiepijplijn, zoals weergegeven in de onderstaande afbeelding. Geleid door de beperkingen en vereisten van de eindgebruiker, produceert Neutrino™ het geoptimaliseerde model dat verder kan worden gebruikt voor inferentie, ofwel direct geïmplementeerd op het edge-apparaat of in een cloudomgeving.
Deeplite's unieke manier om DNN-modellen te comprimeren
Wat heb je nodig om te beginnen?
- Je vooraf getrainde DNN-model, M,
- De feitelijke splitsing van treintestgegevens die u hebt gebruikt om het model, DLtrain en DLtest te trainen, en
- De volgende reeks vereisten om de optimalisatie te begeleiden:
- Delta: De acceptabele tolerantie van nauwkeurigheidsdaling ten opzichte van het originele model, bijvoorbeeld 1%.
- Stage: De twee verschillende compressiefasen, terwijl fase 1 minder intensieve compressie vereist minder rekenbronnen, fase 2 biedt agressievere compressie met meer bronnen en tijd.
- Apparaat: voer de volledige optimalisatie en modelinferentie uit in CPU, GPU of multi-GPU ( gedistribueerde GPU-omgeving).
- Modulariteit: De eindgebruiker kan meerdere delen van het optimalisatieproces voor Neutrino™ aanpassen aan complexere scenario's. Deze aanpassing omvat gespecialiseerde data-loaders, aangepaste backpropagation-optimizers en ingewikkelde verliesfuncties die hun eigen bibliotheekimplementatie mogelijk maakt.
Het algoritme dat we hebben gebruikt om het DNN-model automatisch te begrijpen, analyseren en comprimeren voor een bepaalde dataset wordt hieronder uitgelegd.
De vier componenten van Neutrino™
- Neutrino™ Model Zoo: om het gebruik voor de eindgebruiker te vergemakkelijken, een verzameling populaire DNN-architecturen met getrainde gewichten op verschillende benchmark-datasets worden geleverd als Neutrino™ Zoo.
- Dirigent: Het doel van de dirigent is om alle geleverde inputs te verzamelen, de gegeven vereisten te begrijpen en de hele optimalisatiepijplijn dienovereenkomstig te orkestreren.
- Verkenning: het is een grove compressiefase op hoog niveau, waar de componist selecteert verschillende transformatiefuncties voor de verschillende lagen in het DNN-model.
- Uitgloeien: het is een fijnkorrelige agressieve compressiefase om de maximaal mogelijke compressie te verkrijgen binnen de vereiste tolerantie van nauwkeurigheid.
Het proces
In een van onze blogposts hebben we de top 10 vragen over het modelcompressieproces al beantwoord. Om het kort uit te leggen, bij Deeplite combineren we dynamisch verschillende optimalisatiemethoden voor verschillende lagen in een model om een prachtig resultaat te creëren, waarbij maximale compressie wordt bereikt met minimaal nauwkeurigheidsverlies (en als we minimaal zeggen, menen we het! Bekijk de resultaten hieronder).
Laten we hier een voorbeeld bekijken. Ons vooraf getrainde model heeft Noptimaliseerbare lagen: {L1, L2, …, LN}. In een typisch CNN-model kunnen de convolutionele lagen en de volledig verbonden lagen worden geoptimaliseerd, terwijl de rest van de lagen worden genegeerd in het optimalisatieproces. De dirigent analyseert de grootte van de trainingsgegevens, het aantal uitvoerklassen, de modelarchitectuur en optimalisatiecriteria, delta, en produceert een samengestelde lijst, CL = {c1, c2, …, cN} van verschillende transformatiefuncties voor verschillende lagen in het model. Voor elke laag, Li, in het model, ziet de samengestelde functie ci er als volgt uit:
De uitdaging is om een ideale maat r te vindendat zorgt voor een goede compressie met behoud van de robuustheid van het model. Wanneer r gelijk is aan de werkelijke grootte van de gewichtstensor van de laag, r = grootte (Wi), is er een overmatige benadering van de transformatie met een zeer lage compressie. Een zeer kleine afmeting, r → 0, produceert echter een hoge compressie met een verliesgevende reconstructie van de transformatie.
Fase 2 optimalisatie is gericht op het uitvoeren van agressieve compressie en het verkrijgen van de maximaal mogelijke compressie in de vereiste nauwkeurigheidstolerantie. Als de delta van nauwkeurigheid bijvoorbeeld 1% is en fase 1 een compressie van 4x produceert met een nauwkeurigheidsdaling van 0,6%, probeert fase 2 de compressie te bevorderen met een delta die zo dicht mogelijk bij 1% komt.
Hoe meten we de optimalisatie- en compressieprestaties?
Hier zijn de statistieken die we gebruiken om de mate van optimalisatie en prestaties van Neutrino™ te meten.
Nauwkeurigheid: We meten de top-1 nauwkeurigheid (%) van het model. Succesvolle optimalisatie behoudt de nauwkeurigheid van het oorspronkelijke model.
Modelgrootte: We meten de schijfgrootte (MB) die wordt ingenomen door de trainbare parameters van het model. Dankzij de kleinere modelgrootte kunnen modellen worden geïmplementeerd in apparaten met geheugenbeperkingen.
MAC's: we meten de rekencomplexiteit van het model aan de hand van het aantal (miljarden) Multiply-Accumulate Operation (MAC) berekend over de lagen van het model. Hoe lager het aantal MAC's, hoe beter het model is geoptimaliseerd.
Aantal parameters: We meten het totale aantal (miljoenen) trainbare parameters (gewichten en biases) in het model. Optimalisatie is bedoeld om het aantal parameters te verminderen.
Geheugenvoetafdruk: we meten het totale geheugen (MB) dat nodig is om de inferentie uit te voeren op een batch gegevens, inclusief het geheugen dat nodig is voor de trainbare parameters en de laagactiveringen. Een lagere geheugenvoetafdruk wordt bereikt door betere optimalisatie.
Uitvoertijd: We meten de tijd (ms) die nodig is om een voorwaartse pass op een batch gegevens uit te voeren. Geoptimaliseerde modellen hebben een kortere uitvoeringstijd.
DNN-modelcompressieresultaten met Neutrino™
Alle optimalisatie-experimenten worden uitgevoerd met een eindgebruikerseis van nauwkeurigheidsdelta van 1%. De experimenten worden uitgevoerd met een mini-batchgrootte van 1024, terwijl de statistieken zijn genormaliseerd voor een mini-batchgrootte van 1. Alle experimenten worden uitgevoerd op vier parallelle GPU's, met behulp van Horovod, en elke GPU is een Tesla V100 SXM2 met 32GB geheugen.
Boog | Model | Nauwkeurigheid (%) | Grootte (MB) | FLOP's (miljarden) | #Params (miljoenen) | Geheugen (MB) | Uitvoeringstijd (ms) |
Resnet 18 | Origineel | 76.8295 | 42.8014 | 0.5567 | 11.2201 | 48.4389 | 0.0594 |
Fase 1 | 76.7871 | 7,5261 | 0,1824 | 1,9729 | 15,3928 | 0,0494 | |
Fase 2 | 75.8008 | 3.4695 | 0.0790 | 0.9095 | 10.3965 | 0.0376 | |
Verbeteren | -0.9300x | 12.34x | 7,05x | 12,34x | 4,66x | 1,58x | |
Resnet50 | Origineel | 78.0657 | 90.4284 | 1.3049 | 23.7053 | 123.5033 | 3.9926 |
Fase 1 | 78.7402 | 25.5877 | 0.6852 | 6.7077 | 65.2365 | 0.2444 | |
Fase 2 | 77.1680 | 8.4982 | 2.2278 | 43.7232 | 0.1772 | ||
Verbeteren | -0.9400 | 10.64x | 6,31x | 10,64x | 2,82x | 1,49x | |
VGG19 | Origineel | 72.3794 | 76.6246 | 0.3995 | 20.0867 | 80.2270 | 1.4238 |
Fase 1 | 71.5918 | 3.3216 | 0.0631 | 0.8707 | 7.5440 | 0,0278 | |
Fase 2 | 71,6602 | 2,6226 | 0,0479< | 0,6875 | 6.7399 | 0.0263 | |
Verbeteren | -0.8300 | 29,22x | 8,34x | 29,22x | 11,90x | 1,67x |
  ;
Boog | Model | Nauwkeurigheid (%) | Grootte (MB) | FLOP's (miljarden) | #Params (miljoenen) | Uitvoertijd (ms) | |
DenseNet121 | Origineel | 78.4612 | 26.8881 | 0.8982 | 7.0485 | 66.1506 | 10.7240 |
Fase 1 | 79.0348 | 15.7624 | 0.5477 | 4.132 | 61.8052 | 0.2814 | |
Fase 2 | 77,8085 | 6,4246 | 0,1917 | 1,6842 | 48,3280 | ||
Verbeteren | -0.6500 | 4,19x | 4,69x | 4,19x | 1,37 x | 1,17x | |
GoogleNet | Origineel | 79.3513 | 23.8743 | 1.5341 | 6.2585 | 64.5977 | 5.7186 |
Fase 1 | 79.4922 | 12.6389 | 0.8606 | 3.3132 | 62.1568 | 0.2856 | |
Fase 2 | 78.8086 | 6.1083 | 0.3860 | 1.6013 | 51.3652 | 0.2188 | |
Verbeteren | -0.4900 | 3.91x | 3,97x | 3,91x | 1,26x | 1,28x | |
MobileNet v1 | Origineel | 66.8414 | 12.6246 | 0.0473 | 3.3095 | 16.6215 | 1.8147 |
Etage 1 | 66,4355 | 6,4211 | 0,0286 | 1,6833 | 10,5500 | 0.0306 | |
Fase 2 | 66.6211 | 3.2878 | 0.0170 | 0.8619 | 7.3447 | 0.0286 | |
Verbeteren | -0.4000 | 3,84x | 2,78x | 3,84x | 2,26x | 1,13x |
Boog: Resnet18
Dataset |
Model | Nauwkeurigheid (%) | Grootte (MB) | FLOP's (miljarden) | #Params (miljoenen) | Geheugen (MB) | Uitvoertijd ( ms) |
Imagenet16 | Origineel | 94.4970 | 42.6663 | 1.8217 | 11.1847 | 74.6332 | 0.2158 |
Fase 1 | 93.8179 | 3.3724 | 0.5155 | 0.8840 | 41.0819 | ||
Fase 2 | 93.6220 | 1.8220 | 0.3206 | 0.4776 | 37.4608 | 0.1341 | |
Verbeteren | -0.8800 | 23,42x | 5,68x | 23,42x | 1,99x | 1,61x | |
VWW (Visual Wake Words) | Origineel | 93.5995 | 42.6389 | 1.8217 | 11.1775 | 74.6057 | 0.2149 |
Fase 1 | 93,8179 | 3,3524 | 0,4014 | 0,8788 | 39,8382 | 0,1445 | |
Fase 2 | 92,6220 | 1,8309 | 0,2672 | 0.4800 | 36.6682 | 0.1296 | |
Verbeteren | <-0.9800 | 23.29x | 6.82x | 23,29x | 2,03x | 1,66x |
Afhankelijk van de architectuur van het originele model, kan worden vastgesteld dat de modelgrootte ergens tussen ∼3x en ∼30x kan worden gecomprimeerd. VGG19 staat bekend als een van de sterk overgeparametriseerde CNN-modellen. Zoals verwacht, bereikte het een 29,22x reductie in het aantal parameters met bijna ∼12x compressie in de totale geheugenvoetafdruk en ∼een 8,3x reductie in rekencomplexiteit. Het resulterende VGG19-model neemt slechts 2,6 MB in beslagin vergelijking met het oorspronkelijke model dat 76,6 MB vereist.
De prestaties van Neutrino™ op grootschalige vision-datasets produceren ongeveer ∼23,5x compressie van ResNet18 op Imagenet16- en VWW-datasets. Het geoptimaliseerde model vereist slechts 1,8 MB in vergelijking met de 42,6 MB die nodig is voor het originele model.
Stage 1 vs. Stage 2 compressie
Cruciaal is dat kan worden opgemerkt dat Stage 2 het model minstens 2x meer comprimeert dan Stage 1 compressie. De totale tijd die nodig is voor optimalisatie door Neutrino™, inclusief fase 1 en fase 2, wordt weergegeven in de onderstaande afbeelding. Het kan worden opgemerkt dat de meeste modellen in minder dan ∼ 2 uur konden worden geoptimaliseerd. Complexe architecturen met langere trainingstijden, zoals Resnet50 en DenseNet121, nemen ongeveer ∼6 uur en ∼13 uur in beslag voor optimalisatie.
Productieresultaten van Neutrino™
Deeplite's Neutrino™ wordt ingezet in verschillende productieomgevingen en de resultaten van de verschillende verkregen use-cases zijn samengevat in de onderstaande tabel. Om de efficiëntie van de prestaties van Neutrino™ te demonstreren, worden de optimalisatieresultaten vergeleken met andere populaire frameworks op de markt, zoals (i) Microsoft's Neural Network Interface (NNI), Intel's Neural Network Distiller en (iii) Tensorflow Lite Micro. Er kan worden vastgesteld dat Neutrino™ consequent beter presteert dan de concurrenten door hogere compressie en een betere nauwkeurigheid te bereiken.
Gebruiksvoorbeeld | Arch | Model | Nauwkeurigheid (%) | Grootte (bytes) | FLOP's (miljoenen) | #Params (miljoenen) |
Andes Technology Inc. | MobileNetv1(VWW) | Origineel | 88.1 | 12.836.104 | 105.7 | 3.2085 |
Neutrino™ | 87,6 | 188.000 | 24,6 | 0.1900 | ||
TensorFlow LM | 84.0 | 860.000 | – | 0.2134 | ||
Prod #1 | MobilNetV2-0.35x (Imagenet Small) | Origineel | 80,9 | 1.637,076 | 66,50 | 0,4094 |
Neutrino™ | 80,4 | 675.200 | 50,90 | 0.1688 | ||
Intel Distiller | 80.4 | 1.637.076 | 66.50 | 0.2562 | ||
Microsoft NNI | 77.4 | 1.140.208 | 52.80 | 0.2851 | ||
Prod. #2 | MobileNet v2-1.0x (Imagenet Small) | Origineel | 90.9 | 8.951.804 | 312.8 | 2.2367 |
Neutrino™ | 82.0 | 1.701.864 | 134.0 | 0.4254 | ||
Intel-distilleerder | 82,0 | 8,951,804 | 312,86 | 0,2983 |
Hoe Neutrino™ gebruiken?
Het Neutrino™-framework is volledig geautomatiseerd en kan elke op convolutionele neurale netwerk (CNN) gebaseerde architectuur optimaliseren zonder menselijke tussenkomst. Neutrino™-framework wordt gedistribueerd als Python PyPI-bibliotheek of Docker-container, met productieondersteuning voor PyTorch en vroege ontwikkelingsondersteuning voor TensorFlow/Keras.
Dat was het voor nu, mensen! Onthoud dat compressie een cruciale eerste stap is om deep learning toegankelijker te maken voor technici en eindgebruikers op edge-apparaten. Het ontsluiten van zeer compacte, zeer nauwkeurige intelligentie op apparaten die we elke dag gebruiken, van telefoons tot auto's en koffiezetapparaten, zal een ongekende impact hebben op hoe we nieuwe technologieën gebruiken en vormgeven.
Heb je een vraag of wens ons om naar andere AI-modeloptimalisatieonderwerpen te kijken? Laat hier een reactie achter. We helpen u graag verder!
Geïnteresseerd om u aan te melden voor een demo van Neutrino™? Raadpleeg deze link.
Anush Sankaran
Senior onderzoekswetenschapper, Deeplite
Anastasia Hamel
Digital Marketing Manager, Deeplite