Huawei a anunțat că middleware-ul său MindSpore Deep Learning în stil TensorFlow și PyTorch este acum open source. Aflați în acest articol cele mai importante caracteristici ale sale.
Huawei tocmai a anunțat că cadrul său MindSpore pentru dezvoltarea aplicațiilor AI devine open source și disponibil pe GiHub și Gitee. MindSpore este un alt cadru de învățare profundă pentru formarea modelelor de rețea neuronală, similar cu TensorFlow sau PyTorch, conceput pentru utilizare de la Edge la Cloud, care acceptă atât GPU-uri, cât și, evident, procesoarele Huawei Ascend.
În luna august a anului trecut, când Huawei a anunțat lansarea oficială a procesorului său Ascend, MindSpore a fost introdus pentru prima dată, afirmând că „într-o sesiune de antrenament tipică bazată pe ResNet-50, combinația dintre Ascend 910 și MindSpore este de aproximativ două ori mai rapidă. Când instruiți modele AI față de alte cărți majore de învățare folosind TensorFlow Este adevărat că au apărut multe cadre în ultimii ani și poate că MindSpore nu este altceva decât un grup care poate concura chiar și de la distanță cu TensorFlow (susținut de Google) și PyTorch (susținut de Facebook).
Arhitectura sistemului
Site-ul web MindSpore descrie că infrastructura constă din trei straturi principale: expresie frontend, motor grafic și runtime. Următoarea figură prezintă o diagramă vizuală:
Primul nivel al MindSpore oferă un API Python pentru programatori. Deoarece lingvistica lingvistică în comunitatea noastră este de facto Python, și altfel MindSpore vrea să concureze cu PyTorch și TensorFlow. Cu acest API, programatorii pot manipula modele (instruire, deducție etc.) și pot procesa date. Acest prim nivel include și suport pentru reprezentarea interimară a codului (MindSpore IR), pe care se vor baza multe optimizări care pot fi realizate în paralelizare și diferențiere automată (GHLO).
Mai jos este stratul Graph Engine care oferă funcționalitatea necesară pentru a crea și executa diferențierea automată a graficului de execuție. Cu MindSpore, au optat pentru un model de diferențiere automată, altul decât PyTorch (care generează un grafic de execuție dinamic) sau TensorFlow (deși a fost inițial aleasă opțiunea de a crea un program de execuție static mai eficient, acum oferă și o opțiune de grafic de execuție dinamică și permite o versiune statică a graficului utilizând @ tf.funcția de decorare a API-ului său de nivel scăzut).
Alegerea MindSpore este de a converti codul sursă în format de cod intermediar (MindSpore IR) pentru a profita de cele două modele (pentru mai multe informații, consultați secțiunea „Separare automată” de pe site-ul web MindSpore).
Stratul final constă din toate bibliotecile și mediile de rulare necesare pentru a susține diferitele arhitecturi hardware în care codul va fi procesat. Cel mai probabil, va fi un backend foarte asemănător cu alte cadre, poate cu caracteristici Huawei, cum ar fi biblioteci precum HCCL (Huawei Collective Communication Library), echivalent cu NVIDIA NCCL (NVIDIA Collective Communication Library).
Suport pentru vizualizarea antrenamentului
Conform tutorialului MindSpore, deși a fost imposibil să le instalați și să le utilizați, ele au MindInsight pentru a crea vizualizări care amintesc oarecum de TensorBoard, TensorFlow. Aruncați o privire la câteva capturi de ecran pe care le afișează pe site-ul lor web:
Conform manualului, MindSpore folosește în prezent un mecanism de apel invers (care amintește de modul în care se face cu Keras) pentru a scrie (într-un fișier jurnal) în procesul de instruire a tuturor acelor parametri de model și hiperparametri pe care îi dorim, precum și a programului de calcul când compilarea rețelei neuronale în cod intermediar este completă.
Paralelism
În tutorialul lor, vorbesc despre două moduri de paralelizare (DATA_PARALLEL și AUTO_PARALLEL) și oferă un exemplu de cod care antrenează ResNet-50 cu un set de date CIFAR pentru un procesor Ascend 910 (pe care nu am putut să-l testez). DATA_PARALLEL se referă la o strategie cunoscută în mod obișnuit ca paralelism de date, care constă în împărțirea datelor de antrenament în mai multe subseturi, fiecare dintre acestea rulând pe aceeași replică a modelului, dar în unități de procesare diferite. Suportul Graph Engine este oferit pentru paralelizarea codului și în special pentru paralelismul AUTO_PARALLEL.
Modul AUTO_PARALLEL optimizează automat paralelizarea prin combinarea strategiei de paralelizare a datelor (discutată mai sus) cu strategia de paralelizare a modelului, în care modelul este împărțit în diferite părți și fiecare parte este executată în paralel în diferite unități de procesare. Acest mod automat selectează strategia de paralelizare care oferă cele mai bune beneficii, despre care puteți citi în secțiunea Paralel automat de pe site-ul web MindSpore (deși nu descriu modul în care sunt luate estimările și deciziile). Va trebui să așteptăm pentru a face timp echipei tehnice să extindă documentația și să înțeleagă mai multe detalii despre strategia de auto-paralelizare. Dar este clar că această strategie de auto-paralelizare este esențială, și aici ar trebui și pot concura cu TensorFlow sau PyTorch, obținând performanțe semnificativ mai bune folosind procesoarele Huawei.
Foaia de parcurs planificată și cum să contribuiți
În mod evident, este o mulțime de muncă de făcut și în acest moment au simplificat ideile pe care le au în vedere pentru anul viitor în foaia de parcurs extinsă prezentată pe această pagină, dar susțin că prioritățile vor fi ajustate în funcție de utilizator.
Părere. În acest moment putem găsi următoarele linii principale:
- Suport pentru mai multe modele (modele clasice în așteptare, GAN, RNN, Transformatoare, modele de învățare amplificate, programare probabilistică, AutoML etc.).
- Extindeți API-urile și bibliotecile pentru a îmbunătăți experiența de utilizare și programare (mai mulți operatori, mai mulți optimizatori, mai multe funcții de pierdere etc.)
- Suport complet pentru procesorul Huawei Ascend și optimizarea performanțelor (optimizarea compilării, îmbunătățirea utilizării resurselor etc.)
- Evoluția stivei de software și executarea optimizărilor grafice de calcul (îmbunătățirea reprezentării IR intermediare, adăugarea unor capacități suplimentare de optimizare etc.).
- Suport pentru mai multe limbaje de programare (nu doar Python).
- Îmbunătățirea învățării distribuite cu optimizarea programării automate, distribuției datelor etc.
- Îmbunătățiți instrumentul MindInsight pentru a facilita programarea „depanarea” și îmbunătățirea reglării hiperparametrului în timpul procesului de învățare.
- Progres în furnizarea funcționalității de inferență dispozitivelor din Edge (securitate, suport pentru modele non-platformă prin ONNX etc.)
Pe pagina comunității, puteți vedea că MindSpore are parteneri în afara Huawei și Chinei, cum ar fi Universitatea din Edinburgh, Imperial College London, Universitatea din Munster (Germania) sau Universitatea Paris-Saclay. Ei spun că vor urma un model de guvernanță deschis și vor invita întreaga comunitate să contribuie atât la cod, cât și la documentație.
Concluzie
După o primă privire rapidă, se pare că deciziile corecte de proiectare și implementare (cum ar fi concurența și diferențierea automată) pot adăuga spațiu pentru îmbunătățiri și optimizări care obțin performanțe mai bune decât cadrele pe care doresc să le depășească. Dar mai este multă muncă înainte pentru a prinde PyTorch și TensorFlow și, mai presus de toate, să construiți o comunitate, nu doar! Cu toate acestea, știm cu toții că, cu sprijinul unei mari companii din sector precum Huawei, orice este posibil, sau era evident acum trei ani când a apărut prima versiune PyTorch (Facebook) că ar putea fi aproape de călcâi din TensorFlow (Google)?