De populariteit van modellen voor convolutionele neurale netwerken (CNN) en de alomtegenwoordigheid van CPU’s betekent dat betere inferentieprestaties aanzienlijke voordelen kunnen opleveren voor een groter aantal gebruikers dan ooit tevoren. Aangezien multi-coreprocessors de norm worden, is efficiënte threading vereist om parallellisme te benutten. Deze blogpost behandelt recente ontwikkelingen in de Intel® Distribution of OpenVINO™-toolkit threading-ondersteuning en bijbehorende prestatieverbeteringen.

De Intel Distribution of OpenVINO-toolkit (een ontwikkelaarstoolsuite voor high-performance deep learning op Intel®-architectuur) biedt een multi-threading-model dat draagbaar is en vrij is van low-level details. Het is niet nodig voor gebruikers om expliciet (bijvoorbeeld inferentie) threads te starten en te stoppen, of zelfs te weten hoeveel processors of cores er worden gebruikt. Dit resulteert in geoptimaliseerde CPU-prestaties voor CNN’s, op elk ondersteund doel, dat gemakkelijk uit de doos kan worden geïmplementeerd.

Real-life toepassingen vereisen meer dan een enkele CNN, en het combineren van meerdere netwerken in een enkele dynamische pijplijn vereist verschillende componenten om efficiënt te coördineren, te delen en te synchroniseren. Het uitvoeren van bepaalde voorbewerkingen (bijv. kleurconversie, formaat wijzigen of bijsnijden) en inferentie-nabewerkingstaken (bijv. het ontleden van uitvoerresultaten) met componenten van derden kan complicaties opleveren als het gaat om het hergebruik van verwerkingsthreads. Zoals hieronder beschreven, heeft de Intel Distribution of OpenVINO-toolkit een oplossing ontwikkeld om deze problemen met componeren aan te pakken door gebruik te maken van de Intel® Threading Building Blocksbibliotheek (Intel® TBB) als een gemeenschappelijke threading-laag.

Geheugenbeheer en thread-organisatie zijn nog belangrijker in systemen met meerdere kernen en een grote geheugencapaciteit. Op NUMA-systemen heeft de locatie van een thread in vergelijking met het geheugen waartoe het toegang heeft een aanzienlijke invloed op de prestaties, dus hardwarebewustzijn is cruciaal. Hieronder bespreken we ook hoe de Intel Distribution of OpenVINO-toolkit de planningsstrategie en geheugentoewijzing aanpakt bij het verwerken van NUMA.

Composibiliteit en prestatiepijlers

Vóór de 2019 R1-release was de Intel Distribution of OpenVINO-toolkit uitgerust met OpenMPruntime, die de verwerkingsthreads actief houdt om de snelle start van parallelle regio’s te vergemakkelijken. De toolkit was oorspronkelijk ontworpen om voor elk netwerk een aparte pool op de CPU te hebben, zodat netwerken gelijktijdig kunnen worden afgeleid en geconfigureerd om verschillende aantallen threads te gebruiken. Met OpenMP kunnen deze pools leiden tot zware overabonnementen, wat een negatieve invloed heeft op de prestaties, zelfs voor minder complexe pijplijnen met slechts twee of drie componenten.

Met planning op basis van de Intel TBB-bibliotheek die beschikbaar is vanaf de Intel Distribution of OpenVINO-toolkit 2019 R1-release, composability is ingeschakeld. De twee functies van de Intel TBB-bibliotheek die primair verantwoordelijk zijn voor de samenstelling, zijn de globale threadpool en individuele(bijv. per netwerk) taakarena’s, terwijl Intel TBB tijdens runtime beslist hoe (inferentie)taken worden toegewezen aan hardware (threads).

In feite kan de Intel TBB-bibliotheek andere parallelle taken in de toepassing orkestreren, zonder gevolgtrekking. Een specifieke manier om de applicatieprestaties verder te optimaliseren, is bijvoorbeeld om de Intel Distribution of OpenVINO-toolkit beeldvoorbewerking te laten uitvoeren. De ondersteunde voorbewerking omvat het wijzigen van de grootte, kleurindeling, conversie van gegevenstypes, gemiddelde aftrekking, enzovoort. Hoewel het geen deel uitmaakt van de inferentie zelf (omdat het wordt uitgevoerd voordat een beeldtensor naar het netwerk wordt gevoerd), is de voorbewerking ook van schroefdraad voorzien. En aangezien de implementatie van de threading-pool nu volledig is gebaseerd op de Intel TBB, worden de worker-threads gedeeld met de inferentie-runtime, waardoor overabonnement wordt vermeden.

Bovendien zijn bibliotheken vaak niet eenvoudig parallel samen te stellen. Hier volgt de Intel Distribution of OpenVINO-toolkit een eenvoudige vuistregel door hetzelfde threading-model te gebruiken voor alle meegeleverde modules of bibliotheken. OpenCV, een populaire en ondersteunde computerbibliotheek die standaard pthreads gebruikt, is bijvoorbeeld een andere potentiële bron van extra threadpools en overabonnementen. Om dit te voorkomen, zal de Intel Distribution of OpenVINO-toolkit nu OpenCV leveren, gecompileerd met Intel® TBB om volledige composability tussen componenten te ondersteunen.

Alles bij elkaar, is het onderstaande diagram een ​​voorbeeld van de Security Barrier Demo-pijplijn met OpenCV, preprocessing en gevolgtrekking van meerdere modellen:

Figuur 1. Voorbeeld pijplijn van de Security Barrier Demo. Merk op dat classificatieonderdelen zowel 1) voorwaardelijk zijn (bijv. Voertuig kan worden gedetecteerd, maar de kentekenplaat niet, en 2) iteratief, bijv. loop over detecties van het eerste netwerk. Alle blauwe en donkerblauwe componenten gebruiken de Intel TBB en delen de pool van threads.

Het gebruik van demo’s voor verschillende gebruiksscenario’s, van beveiliging tot slimme klaslokalen, als voorbeeldpijplijnen, levert het gebruik van de Intel TBB-bibliotheek aanzienlijke prestatieverbeteringen op. Hoe meer CNN-netwerken worden gebruikt (en mogelijk parallel uitgevoerd) in een pijplijn, hoe groter de winst. Prestatiebenchmarks worden regelmatig getest op verschillende op Intel-architectuur gebaseerde platforms om deze claims aan te tonen. Blijf op de hoogte voor benchmarks die prestatieverbeteringen aantonen met behulp van de Intel TBB-bibliotheek hier.

Een specifiek voorbeeld waarbij het OpenMP-codepad potentieel beter presteert dan Intel TBB, bevindt zich in een volledig statisch scenario met één netwerk dat hetzelfde (enkele) netwerk ontelbare keren draait en vereist geen dynamische aanpassingen. Om deze reden kunnen traditionele benchmarks in High-Performance Computing (HPC)-stijl het dynamische karakter van Intel® TBB als een lichte prestatievermindering beschouwen. De nieuwste release, Intel-distributie van OpenVINO-toolkit 2020.1, brengt aanzienlijke prestatieverbeteringen voor het Intel TBB-codepad. Nu is de Intel TBB in alle topologieën volledig vergelijkbaar of slechts marginaal langzamer dan OpenMP.

Daarom zijn we van plan om het OpenMP-codepad te verwijderen uit toekomstige releases van de Intel Distribution of OpenVINO-toolkit. We stellen dat elk voordeel dat eerder werd gezien van volledig statische planning zeldzaam wordt voor praktijkgevallen, zoals inferentiepijplijnen die in deze demo’s worden gebruikt.

NUMA-bewustzijn: meer prestaties op tafel

Een belangrijke uitdaging waarmee ontwikkelaars van inferentietoepassingen voor CPU-gebaseerde platforms worden geconfronteerd, zijn geheugencontrollers per socket, wat leidt tot niet-uniforme geheugentoegang (NUMA). Het benutten van de prestaties op NUMA-systemen vereist voor:

  1. ontdekken wat uw platformtopologie is,
  2. controleren op welk NUMA-knooppunt uw gegevens worden geplaatst, en
  3. controleren waar uw werk wordt uitgevoerd (knooppuntaffiniteit).

Als reactie hierop introduceerde de Intel Distribution of OpenVINO-toolkit een runtime-planning die NUMA-bewust is. Tijdelijke gegevens, zoals tussenbuffers voor individuele CNN-lagen, worden toegewezen in de NUMA-bewuste methode, terwijl alleen-lezen gegevens, zoals gewichten, zorgvuldig worden gekloond per NUMA-knooppunt. Als gevolg hiervan vindt alle uitvoering plaats op NUMA-lokaal geheugen (met uitzondering van netwerkinvoer die van elk NUMA-knooppunt kan komen).

Aanvankelijk werd de NUMA-ondersteuning geïmplementeerd als een combinatie van

  • TBB::task_arena die gelijktijdigheid beperkt door een beperkt aantal slots voor werkthreads te bieden, en
  • TBB::task_scheduler_observer die NUMA-nodes-affiniteit toewijst aan werkthreads die zich bij de arena’s voegen.

De hoofd- (of master-)threads werden ook gedwongen om de CNN-grafieken via overeenkomstige arena’s te laden, zodat grafiekgeheugens ook werden toegewezen (en het eerst werden aangeraakt) op het juiste NUMA-knooppunt. Deze aanpak is geïntroduceerd met de Intel Distribution of OpenVINO toolkit 2019 R2 release. Deze initiële implementatie was alleen beschikbaar voor Linux, maar vertoonde veelbelovende prestaties. Daarom hebben we officiële ondersteuning voor deze methode geïmplementeerd in de eerste Intel TBB 2020-release. Specifiek werden de volgende nieuwe klassen geïntroduceerd:

  • TBB:: Intel TBB::task_arena::beperkingen die de arena beperken tot het specifieke NUMA-knooppunt
  • TBB::info ::numa_nodes die beschikbare (d.w.z. met betrekking tot het procesmasker) NUMA-knooppunten rapporteert, intern met behulp van de hwloc.

Deze klassen hebben de code aanzienlijk vereenvoudigd, aangezien ad-hoc systeemconfiguratie-parsing, verwerking van procesmaskers, aangepaste task_scheduler_observer en dergelijke niet langer nodig zijn.

Tot slot, op basis van deze nieuwe Intel TBB-bibliotheekfuncties, bevat de nieuwe Intel-distributie van OpenVINO-toolkit 2020.1 NUMA-ondersteuning voor alle OS-doelen (d.w.z. buiten Linux). Het belangrijkste is dat het kant-en-klare NUMA-ondersteuning biedt voor Windows Server (2016 of 2019), een besturingssysteem dat veel wordt gebruikt in veel industriële implementaties, zoals die in de gezondheidszorg.

Daarom, met meer en meer use-cases mogelijk gemaakt met deep learning, zoals medische beeldvorming, wordt inferentie met behulp van de toolkit sneller, waardoor nieuwe en geavanceerde algoritmen mogelijk worden.

De nieuwste release van de toolkit ook introduceert een nieuwe NUMA threads-bindmodus. Het is adaptiever en lichter in vergelijking met de (standaard) binding van threads-to-cores, waardoor het besturingssysteem meer ruimte heeft om threads te plannen. We raden aan deze modus te gebruiken in alle zwaar bevochten scenario’s met CPU-inferentie op de NUMA-systemen.

Conclusies

In dit bericht hebben we besproken hoe Intel TBB de Intel-distributie van OpenVINO-toolkit zo’n betrouwbare oplossing voor complexe toepassingen met veel dynamische inferentiepijplijnen. Bovendien zijn real-life applicaties ontworpen met meerdere componenten die gelijktijdig worden uitgevoerd. Om effectief te zijn in deze implementaties, moet de Intel Distribution of OpenVINO-toolkit de composabiliteit goed krijgen – en dat doet het!

Ten tweede, voor grote machines, is de grootste uitdaging om te controleren waar het geheugen voor gegevens wordt toegewezen met betrekking tot de code die er gebruik van maakt. De Intel Distribution of OpenVINO-toolkit is een NUMA-bewuste deep learning-softwaresuite die automatisch de topologie van het systeem bepaalt, doelbewust het geheugen toewijst en de threads beheert om ervoor te zorgen dat de gegevens worden gemanipuleerd door threads die op de lokale CPU worden uitgevoerd.

Als resultaat biedt de toolkit nieuwe niveaus van CPU-inferentieprestaties, nu gekoppeld aan dynamische taakplanning en efficiënte toewijzing aan huidige en toekomstige multi-coreplatforms, en volledig aangepast aan dynamische veranderingen in de belasting en systeembronnen tijdens runtime.

Als bijkomend voordeel is het gemakkelijker dan ooit om toegang te krijgen tot prestatieverbeteringen op op Windows Server gebaseerde systemen bij gebruik van de nieuwste versie van de toolkit. Nu produceert CPU-gebaseerde inferentie veel, veel sneller betere afbeeldingen. We zijn toegewijd aan voortdurende verbeteringen; we moedigen gebruikers aan om het eens te proberen en ons uw feedback te sturen!

Voor meer informatie over het toekomstbestendig maken van uw code en het aanscherpen van uw technische vaardigheden , meld u aan voor gratis technische webinars over de Intel Distribution of OpenVINO-toolkit en de Intel TBB-bibliotheek.

Maxim Shevtsov
Senior Software Engineer, Intel Architecture, Graphics and Software Group, Intel

Yury Gorbachev
Hoofdingenieur, Internet of Things Group, Intel

Alexei Katranov

Alexei Fedotov

0

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *