OpenAI foreslår åpen kildekode Triton-språk som et alternativ til Nvidias CUDA

0
158

 Tiernan Ray

Av Tiernan Ray | 28. juli 2021 – 16:06 GMT (17:06 BST) | Tema: Kunstig intelligens

Grafikkbehandlingsenheter fra Nvidia er for vanskelige å programmere, blant annet med Nvidias eget programmeringsverktøy, CUDA, ifølge forskningsfirmaet OpenAI for kunstig intelligens.

Den San Francisco-baserte AI-oppstarten, støttet av Microsoft og VC-firmaet Khosla ventures, introduserte 1.0-versjonen onsdag, et nytt programmeringsspråk spesielt utviklet for å lette den byrden, kalt Triton, beskrevet i et blogginnlegg lenken til GitHub-kildekoden.

OpenAI hevder Triton kan levere betydelige brukervennlige fordeler i forhold til koding i CUDA for noen nevrale nettverksoppgaver som er kjernen i maskinlæringsformer av AI, for eksempel matrisemultiplikasjoner.

“Målet vårt er at det skal bli et levedyktig alternativ til CUDA for Deep Learning,” sa lederen for innsatsen, OpenAI -forsker Philippe Tillet, til ZDNet via e -post.

Triton “er for maskinlæringsforskere og ingeniører som ikke er kjent med GPU -programmering til tross for gode programvareutviklingskunnskaper,” sa Tillet.

Det faktum at språket kommer fra OpenAI, som utviklet GPT-3-programmet for naturlig språkbehandling som har tatt verden med storm, kan gi koden en ekstra forrang i AI-feltet.

Programvaren tilbys som åpen kildekode med kravet, bare merknaden om opphavsrett og tillatelser er inkludert i enhver distribusjon av betydelige kopier av koden.

Også: Chipindustrien kommer til å trenge mye mer programvare for å fange Nvidias ledelse innen AI

Den opprinnelige Triton -avdukingen skjedde med et papir lagt ut av Tillet i 2019 mens en doktorgradsstudent ved Harvard University, sammen med sine rådgivere, HT Kung og David Cox.

Problemet Tillet bestemte seg for å løse var hvordan man lager et språk som ville være mer uttrykksfullt enn de leverandørspesifikke bibliotekene for AI, for eksempel Nvidias cuDNN, som betyr å kunne håndtere en rekke operasjoner på matriser involvert i nevrale nettverk, samtidig som de også å være bærbar og ha ytelse som kan sammenlignes med cuDNN og lignende leverandørbiblioteker.

Å programmere GPUer direkte i CUDA, ifølge Tillet og teamet, er bare for vanskelig. For eksempel kan det være overraskende vanskelig å skrive innfødte kjerner eller funksjoner for GPUer “på grunn av de mange finurligheter i GPU -programmering,” skriver Tillet og team i innlegget.

 openai-gpu-programming-issues.jpg

Programmeringsutfordringen med å flytte tilordne data og instruksjoner på tvers av minnehierarkiet til en flerkjerners GPU.

OpenAI

Spesielt er “GPUer utrolig utfordrende å optimalisere for lokalitet og parallellitet”, som Triton -dokumentasjon forklarer.

Men Tillet ønsket også at språket skulle være lettere å programmere enn tilpasset innsats til dags dato, basert på det som kalles “mikrokjerner” som “innebærer mye manuell innsats.” Spesielt presenteres Triton som et alternativ til de to hovedmetodene som brukes i stedet for leverandørbiblioteker, som kalles polyhedrale kompilerings- og planleggingsspråk.

Det Tillet bestemte seg for er en tilnærming som kalles fliser. Fliser, som brukes mye i CUDA -programmering, tar matrisene som brukes i et maskinlæringsprogram og bryter dem inn i fragmenter som effektivt kan distribueres over delt SRAM -minne og raskt registerminne og effektivt opereres via flere instruksjonstråder parallelt.

Imidlertid er det vanskelig å gjøre parallellisering i CUDA på grunn av ting som behovet for å gjøre eksplisitte synkroniseringsuttalelser mellom instruksjonstrådene i et program.

Også: Hva er GPT-3? Alt bedriften din trenger å vite om OpenAIs banebrytende AI -språkprogram

Tritons semantikk spesifiserer fliser som innebygde typer, slik at en Triton-kompilator kan gjøre arbeidet med å finne ut hvordan disse fragmentene effektivt kan fordeles mellom de mange kjernene i en GPU og tilhørende registre.

Effektivt presses arbeidet med parallellisering og optimalisering av kode fra språket ned i kompilatoren.

Som Tillet uttrykker det, utfører kompilatoren automatisk en rekke viktige programoptimaliseringer.

“For eksempel kan data automatisk lagres i delt minne ved å se på operandene for beregningsmessig intensive blokkeringsoperasjoner.”

Instruksjonen flyter, fra en programmerers koding til Trition-mellomrepresentasjonen, og deretter til LLVM-kompilatorens mellomrepresentasjon, og deretter til Parallel Thread Execution, eller PTX, som er lavnivåspråket for å kontrollere GPU'en.

< /figur>

Triton-programmererens kode på høyt nivå blir først omgjort til en mellomrepresentasjon som er inspirert av mellomrepresentasjonen som finnes i LLVM-kompilatorinfrastrukturen med åpen kildekode. Som Tillet beskrev det i originalpapiret, “bare noen få data- og kontrollflytutvidelser til LLVM-IR kan muliggjøre forskjellige optimaliseringskort på fliserivå som i fellesskap fører til ytelse på linje med leverandørbiblioteker.”

Mellomrepresentasjonen blir deretter matet til en akkurat-i-tid-kompilator som gjør arbeidet med å forme de forskjellige matrisene til fragmenter på en måte som vil passe optimalt inn i det delte minnet og registerene over GPU-kjerner.

JIT organiserer instruksjonstråder inne i GPU -kjerner for å trekke fra de samme verdiene i hovedminnet, kalt “minnekoalesering”. På samme måte plasserer JIT data som er av gjensidig interesse for slike tråder i delt minne for effektiv manipulasjon, kjent som “delt minnetildeling”.

Som Tillet beskriver det, er resultatet programmer som er “enkeltrådede og automatisk parallelliserte.” JIT gjør jobben med å automatisk stille flisene, datafragmentene, for å distribuere dem mest effektivt mellom kjerner.

I det originale Triton-papiret foreslo Tillet en C-lignende form for Triton basert på syntaksen til CUDA. I denne nye 1.0 -utgivelsen er Triton imidlertid integrert med Python. Detaljene er beskrevet i blogginnlegget.

Fordelen med å bruke Triton bør være en umiddelbar hurtigere utvikling av noen viktige operasjoner i nevrale nettverk. Som Tillet skriver i blogginnlegget, “Det kan brukes til å skrive FP16-matrisemultiplikasjonskjerner som samsvarer med ytelsen til cuBLAS,” et Nvidia-bibliotek som implementerer Open Source Basic Linear Algebra Subprograms, “noe mange GPU-programmerere kan ' t gjør – på under 25 linjer med kode. ”

triton-automatic-optimization.jpg

OpenAI

Tillet jobber med prosjektet på heltid på OpenAI, sa han, under tilsyn av OpenAIs leder for superdatamaskin, Chris Berner. Men har også hjelp til Triton -prosjektet fra flere OpenAI -ansatte.

“Nylig har flere OpenAI -ansatte og forskere – alle uten GPU -programmeringserfaring – bidratt med kode og ideer til prosjektet,” sa Tillet til ZDNet. “Vi har brukt den til å akselerere og omskrive en stor del av våre GPU -kjerner, og vi er forpliktet til å gjøre den enda mer bredt anvendelig gjennom senere utgivelser.”

Tillet bemerket at prosjektet har mottatt “meningsfulle bidrag” fra utenfor OpenAI, inkludert Da Yan fra Hong Kong University of Science and Technology, teamet som jobber med Microsofts DeepSpeed ​​-optimaliseringsbibliotek og kommersiell AI -oppstart Anthropic.

Onsdagens blogginnlegg legger ikke vekt på ytelsesberegninger annet enn å si at Triton kan matche CuBLAS. I originalpapiret av Tillet var imidlertid Triton-C-versjonen av språket i stand til å få bedre ytelse enn Nvidias CuDNN-bibliotek ved kjøring av det som kalles dype konvolusjoner, operasjoner som behandler input som grupper av lokalt relaterte data, for eksempel bilde piksler.

Vær oppmerksom på at programvaren for øyeblikket bare er for Nvidia -GPUer; den er ikke tilgjengelig for AMDs GPUer ennå, og den vil heller ikke kompilere til CPUer. Forfatterne inviterer samarbeidspartnere som er interessert i disse chipsene til å bli med på innsatsen.

Også: Graphcore bringer ny konkurranse til Nvidia i de siste MLPerf AI -referansene

Tillets språkinnsats kommer på et interessant tidspunkt for AI -maskinvareakselerasjon. Nvidia har betydelig konkurranse fra AI -chip og systemoppstart som Cerebras Systems, Graphcore og SambaNova. Disse selskapene har alle forskjellige brikkearkitekturer som kan fordele parallelle beregninger til flere kjerneformede kjerner. SambaNova har faktisk en såkalt datastrømarkitektur for brikken som deler noen av prinsippene i Triton.

Imidlertid har alle disse leverandørene måttet utvikle sine egne programvareverktøy for å optimalisere bevegelsen av PyTorch- og TensorFlow -programmer til datamaskinene. I kontrast har Nvidia fordelen med over et tiår med utvikling av CUDA og en bred utviklerbase for programvaren.

Det kan tenkes at Triton kan være et av de nye programvareverktøyene som konkurransen trenger for å få en bred, åpen kildekode-plattform for chipsene sine.

Relaterte emner:

Hardware Digital Transformation CXO Internet of Things Innovation Enterprise Software  Tiernan Ray

Av Tiernan Ray | 28. juli 2021 – 16:06 GMT (17:06 BST) | Tema: Kunstig intelligens