Contents
Qualcomm Technologies draagt Hexagon DSP-verbeteringen bij aan de open source Apache TVM-gemeenschap om AI te schalen
AI brengt een revolutie teweeg in industrieën, producten en kerncapaciteiten door drastisch verbeterde ervaringen te leveren. Om AI echter echt alomtegenwoordig te maken, moet het op het eindapparaat draaien binnen een strak stroom- en thermisch budget. Dit is de uitdaging waar Qualcomm Technologies zich al vele jaren op focust. In feite is onze 5e generatie Qualcomm AI Engine in Qualcomm Snapdragon 865 het hoogtepunt van meer dan tien jaar AI-onderzoek gecombineerd met onze kerncompetentie in energiezuinig computergebruik.
Figuur 1: De 5e generatie AI Engine biedt nieuwe verbeteringen om de AI-prestaties per watt te verbeteren
Een holistische benadering voor energie-efficiëntie en prestaties
De Qualcomm AI Engine bestaat uit verschillende hardware- en softwarecomponenten om AI te versnellen. Wat de hardware betreft, hebben we een heterogene computerarchitectuur met de Hexagon DSP, Qualcomm Adreno GPU en Qualcomm Kryo CPU – die allemaal zijn ontworpen om AI-applicaties snel en efficiënt op het apparaat uit te voeren. Het gaat verder dan geweldige hardware om AI naar de massa te schalen.
Om hardware toegankelijk te maken voor programmeurs, hebben we ook compilers, programmeermodellen en softwaretools nodig. Hierdoor kunnen softwareontwikkelaars onze geavanceerde AI-hardware benutten en energie-efficiënte, hoogwaardige AI-gebruikerservaringen creëren op smartphones en andere edge-apparaten. Daartoe investeren we in de TVM deep learning compiler, die we binnenkort zullen bespreken. Op het gebied van open source community-ontwikkeling heeft Qualcomm Innovation Center (QuIC) de AI Model Efficiency Toolkit open source gemaakt, die een eenvoudige bibliotheekplug-in biedt die AI-ontwikkelaars kunnen gebruiken voor state-of-the-art kwantiserings- en compressietechnieken.
Een holistische benadering van hardware, software en algoritmen heeft echt zijn vruchten afgeworpen. In februari 2020 worden de vlaggenschiptelefoons die het beste presteren in AI-benchmarks aangedreven door Snapdragon (Afbeelding 2). We zijn verheugd om te zien dat onze leidende prestaties in benchmarks ook worden overgedragen naar toepassingen in de echte wereld, en dat is wat er echt toe doet. Uitdagende AI-applicaties die voorheen niet haalbaar waren op een smartphone, zoals stijloverdracht op Snapchat en realtime vertaling op Youdao, zien een aanzienlijke snelheid en energie-efficiëntie op Snapdragon 865.
Figuur 2: Snapdragon drijft de vlaggenschip-smartphones aan die toonaangevend zijn in de Ludashi AI-benchmark
Op het gebied van compilatie hebben we zwaar geïnvesteerd in TVM om ontwikkelaars, ISV's en OEM's te helpen profiteren van de hardwareversnelling op Snapdragon. In deze blogpost bespreken we de Hexagon DSP-verbeteringen voor TVM die we bijdragen, onze samenwerking met de open source-community en hoe u aan de slag kunt gaan.
Onze diepgaande kennis van TVM compilerbijdrage voor Hexagon DSP
Qualcomm Technologies begon in 2004 met de ontwikkeling van de Hexagon DSP-processorarchitectuur en de krachtige implementatie. Het begon als een processor met zowel CPU- als DSP-functionaliteit om diep ingebedde verwerkingsbehoeften van het mobiele platform voor zowel multimedia- als modemfuncties te ondersteunen. De Hexagon DSP ISA is in de loop der jaren aanzienlijk geëvolueerd om de steeds veranderende vereisten voor een verscheidenheid aan gebruikssituaties efficiënt te verwerken, zoals beeldverbetering, computervisie, augmented reality, videoverwerking en sensorverwerking. De laatste generaties van de Hexagon DSP-verbeteringen waren gericht op het efficiënt versnellen van AI-inferentie. De Hexagon 698 DSP bevat bijvoorbeeld Hexagon Vector eXtensions (HVX) die een brede vectorverwerking bieden om de vermenigvuldiging bij laag vermogen te versnellen.
Onze open source-bijdrage aan TVM ontgrendelt de energie-efficiëntie van de Hexagon DSP voor de hele gemeenschap. De bijdrage omvat een runtime- en codegenerator voor Hexagon DSP. We blijven samenwerken met de open source-gemeenschap om de mogelijkheden van de TVM-compiler voor Hexagon DSP uit te breiden.
Ontwikkelaars, ISV's en OEM's kunnen enorm profiteren van deze compilerbijdrage. Het is ontworpen om de softwareontwikkeling aanzienlijk te vereenvoudigen en wrijving te verminderen voor targeting-apparaten die worden aangedreven door Snapdragon door automatisch de AI-hardwareversnelling te ontgrendelen. Met deze optimalisaties kunnen uw AI-toepassingen een grote verbetering in prestaties per watt zien. Uw eindklanten zouden blij moeten zijn om het resultaat te zien, of het nu gaat om een langere levensduur van de batterij, hogere gevolgtrekkingen per seconde of een lagere latentie. En aangezien Hexagon DSP in honderden miljoenen apparaten zit, kunnen deze optimalisaties een enorme schaal hebben. We zijn van plan onze open source-inspanningen en bijdragen aan de gemeenschap te blijven uitbreiden.
Aan de slag: Hexagon DSP-optimalisaties opnemen in TVM-compilatie
Door deze instructies te volgen, kunt u eenvoudige TVM-programma's uitvoeren op de simulator of op een doelapparaat . Alle onderdelen die nodig zijn om dit te doen, zijn al aanwezig in de open source-repository van TVM. Om te beginnen heb je nodig:
- Hexagon SDK 3.5.0
- LLVM-compiler die ondersteunt:
- Hexagon en x86 bij gebruik van Hexagon-simulator, of < /li>
- Hexagon en AArch64, bij gebruik van een Snapdragon-ontwikkelbord of -apparaat
De voorbereiding vereist het bouwen van verschillende componenten:
- TVM runtime voor Hexagon (instructies zijn beschikbaar in de GitHub-repository van TVM)
- TVM-runtime voor x86 of Android met ondersteuning voor Hexagon ingeschakeld
- Simulatorstuurprogramma (sim_dev) bij gebruik van Hexagon-simulator
- De omgeving instellen via verschillende omgevingsvariabelen
Dit is alles wat u nodig hebt om TVM-programma's op Hexagon DSP uit te voeren. Hier is een voorbeeld van een matrixvermenigvuldigingsprogramma dat is gemaakt voor uitvoering op de Hexagon DSP-simulator:
import tvm import tvm.contrib.hexagon import numpy als np van tvm import te, tir # Grootte van de matrices. N = 32 # Construeer de TVM-berekening. A = te.placeholder((N, N), naam='A', dtype='int16') B = te.placeholder((N, N), naam='B', dtype='int16') k = te.reduce_axis((0, N), name='k') # Geef de functie die het element berekent op positie i,j van de uitvoer: # het puntproduct van de i-de rij van A en j-de kolom van B. C = te.compute((N,N), lambda i, j: te.sum(A[i][k] * B[k][j], axis=k), naam='C') # Maak het schema. s = te.create_schedule(C.op); px, x = s[C].split(s[C].op.axis[0], nparts=1) s[C].bind(px, te.thread_axis(“pipeline”)) target = tvm.target .hexagon('v66', hvx=0) f = tvm.build(s, [A, B, C], target=target, target_host='llvm', name='mmult') # Bereid invoer voor als numpy arrays, en tijdelijke aanduidingen voor uitgangen. ctx = tvm.hexagon(0) a = np.willekeurig.randint(0, 16, (N, N), dtype=np.int16) b = np.willekeurig.randint(0, 16, (N, N), dtype=np.int16) c = tvm.runtime.ndarray.empty((N, N), dtype='int16', ctx=ctx) print(a) print(b) # Roep de matrixvermenigvuldiging op via functie f en door numpig. f(tvm.runtime.ndarray.array(a, ctx=ctx), tvm.runtime.ndarray.array(b, ctx=ctx), c) npc = np.matmul(a, b) print('tvmn ', c.asnumpy()) print('numpyn', npc) # Rapporteer een fout als er een verschil is tussen de twee uitgangen. if not (c.asnumpy() – npc).any(): print('correct') else: print('wrong')
Wat nu
Dit is alleen de start. We zijn erg enthousiast om te zien wat de gemeenschap van ML-ontwikkelaars, applicatieschrijvers en TVM-gebruikers gaat doen met de TVM-compiler voor Hexagon DSP. We kunnen niet wachten om met de community in contact te komen, te zien wat anderen bijdragen en mensen onze code te laten gebruiken! Ga nu aan de slag door de TVM-compiler te downloaden.
Krzysztof Parzyszek
Compiler en Machine Learning Tool Developer, Hexagon Digital Signal Processor, Qualcomm