Huawei meddelade att TensorFlow och PyTorch-stil MindSpore Deep Learning mellanprogram nu är öppen källkod. Ta reda på i den här artikeln dess viktigaste egenskaper.
Huawei har just meddelat att dess MindSpore-ramverk för utveckling av AI-applikationer blir öppen källkod och tillgänglig på GiHub och Gitee. MindSpore är en annan Deep Learning-ram för träning av neurala nätverksmodeller, liknande TensorFlow eller PyTorch, designad för användning från Edge till Cloud, som stöder både GPU: er och uppenbarligen Huawei Ascend-processorer.
I augusti förra året, när Huawei tillkännagav den officiella lanseringen av sin Ascend-processor, introducerades MindSpore för första gången och uppgav att”i en typisk ResNet-50-baserad träningspass är kombinationen av Ascend 910 och MindSpore ungefär dubbelt så snabb. När du tränar AI-modeller jämfört med andra större inlärningskort med TensorFlow Det är sant att många ramar har dykt upp de senaste åren, och kanske är MindSpore inget mer än en grupp som till och med kan fjärrkonkurrera med TensorFlow (stöds av Google) och PyTorch (stöds av Facebook).
System arkitektur
MindSpore-webbplatsen beskriver att infrastrukturen består av tre huvudlager: frontenduttryck, grafikmotor och backend runtime. Följande bild visar ett visuellt diagram:
Den första nivån av MindSpore erbjuder ett Python API för programmerare. Eftersom språklingvistik i vårt samhälle de facto är Python, och annars vill MindSpore tävla med PyTorch och TensorFlow. Med detta API kan programmerare manipulera modeller (utbildning, inferens etc.) och bearbeta data. Denna första nivå inkluderar också stöd för kodinterimsrepresentation (MindSpore IR), på vilken många optimeringar kommer att baseras som kan utföras i parallellisering och automatisk differentiering (GHLO).
Nedan finns Graph Engine-skiktet som ger nödvändig funktionalitet för att skapa och utföra automatisk differentiering av körningsdiagrammet. Med MindSpore valde de en annan differentieringsmodell än PyTorch (som genererar en dynamisk exekveringsgraf) eller TensorFlow (även om alternativet att skapa ett mer effektivt schema för statisk körning ursprungligen valdes, erbjuder det nu också ett dynamiskt exekveringsdiagramalternativ och tillåter en statisk version av diagrammet med hjälp av @ tf.function-dekoratorn för dess lågnivå-API).
MindSpores val är att konvertera källkoden till mellanliggande kodformat (MindSpore IR) för att dra nytta av de två modellerna (för mer information, se avsnittet”Automatisk separering” på MindSpore-webbplatsen).
Det sista lagret består av alla bibliotek och runtime-miljöer som behövs för att stödja olika hårdvaruarkitekturer där koden kommer att bearbetas. Troligtvis kommer det att vara en backend som liknar andra ramar, kanske med Huawei-funktioner, såsom bibliotek som HCCL (Huawei Collective Communication Library), motsvarande NVIDIA NCCL (NVIDIA Collective Communication Library).
Stöd för visualisering av utbildning
Enligt MindSpore-självstudien, även om det var omöjligt att installera och använda dem, har de MindInsight för att skapa visualiseringar som påminner om TensorBoard, TensorFlow. Ta en titt på några skärmdumpar de visar på deras hemsida:
Enligt manualen använder MindSpore för närvarande en återkallningsmekanism (som påminner om hur det görs med Keras) för att skriva (i en loggfil) i processen att träna alla de modellparametrar och hyperparametrar vi vill ha, samt beräkningsschemat när att sammanställa neurala nätverk till mellanliggande kod är klar.
Parallelism
I sin handledning pratar de om två parallelliseringslägen (DATA_PARALLEL och AUTO_PARALLEL) och ger exempelkod som tränar ResNet-50 med en CIFAR-dataset för en Ascend 910-processor (som jag inte kunde testa). DATA_PARALLEL hänvisar till en strategi som vanligtvis kallas dataparallellism, som består av att dela träningsdata i flera underuppsättningar, som var och en körs på samma replika av modellen, men i olika processningsenheter. Grafmotorstöd tillhandahålls för kodparallellisering och i synnerhet för AUTO_PARALLEL parallellism.
AUTO_PARALLEL-läget optimerar automatiskt parallellisering automatiskt genom att kombinera dataparalliseringsstrategin (diskuterad ovan) med modellparallelliseringsstrategin, i vilken modellen är uppdelad i olika delar, och varje del exekveras parallellt i olika behandlingsenheter. Detta automatiska läge väljer den parallelliseringsstrategi som ger de bästa fördelarna, vilket kan läsas i avsnittet Automatic Parallel på MindSpore-webbplatsen (även om de inte beskriver hur uppskattningar och beslut fattas). Vi måste vänta på att ta oss tid för det tekniska teamet att utöka dokumentationen och förstå mer detaljer om strategin för automatisk parallellisering. Men det är uppenbart att denna auto-parallelliseringsstrategi är avgörande, och det är där de ska och kan konkurrera med TensorFlow eller PyTorch, vilket får betydligt bättre prestanda med Huawei-processorer.
Planerad färdplan och hur man kan bidra
Det finns uppenbarligen mycket arbete att göra och vid den här tiden har de strömlinjeformat de idéer de har i åtanke för nästa år i den omfattande färdplanen som presenteras på denna sida, men de menar att prioriteringarna kommer att anpassas efter användaren.
Respons. För tillfället kan vi hitta dessa huvudlinjer:
- Stöd för fler modeller (i väntan på klassiska modeller, GAN, RNN, Transformatorer, förstärkta inlärningsmodeller, probabilistisk programmering, AutoML, etc.).
- Utöka API: er och bibliotek för att förbättra användbarheten och programmeringsupplevelsen (fler operatörer, fler optimerare, fler förlustfunktioner etc.)
- Omfattande Huawei Ascend-processorsupport och prestandaoptimering (kompileringsoptimering, resursutnyttjande etc.)
- Utveckling av mjukvarustacken och utförande av beräkningsgrafoptimeringar (förbättring av den mellanliggande IR-representationen, tillägg av ytterligare optimeringsfunktioner etc.).
- Stöd för fler programmeringsspråk (inte bara Python).
- Förbättrat distribuerat lärande med optimering av automatisk schemaläggning, datadistribution etc.
- Förbättra MindInsight-verktyget för att göra det lättare för programmeraren att "felsöka" och förbättra hyperparameterinställningen under inlärningsprocessen.
- Framsteg när det gäller att leverera inferensfunktioner till enheter i Edge (säkerhet, stöd för icke-plattformsmodeller via ONNX, etc.)
På community-sidan kan du se att MindSpore har partners utanför Huawei och Kina, såsom University of Edinburgh, Imperial College London, University of Munster (Tyskland) eller Paris-Saclay University. De säger att de kommer att följa en öppen styrningsmodell och bjuda in hela samhället att bidra till både koden och dokumentationen.
Slutsats
Efter en snabb första blick verkar det som att rätt design- och implementeringsbeslut (som samtidighet och automatisk differentiering) kan ge utrymme för förbättringar och optimeringar som ger bättre prestanda än de ramar de vill överträffa. Men det finns fortfarande mycket arbete framåt för att fånga PyTorch och TensorFlow, och framför allt bygga en gemenskap, inte bara! Vi vet dock alla redan att med stöd av ett stort företag i sektorn som Huawei är allt möjligt, eller det var uppenbart för tre år sedan när den första versionen av PyTorch (Facebook) kom ut att det kunde vara nära hälen från TensorFlow (Google)?