Apache MXNet - wprowadzenie
W tym rozdziale przedstawiono funkcje Apache MXNet i omówiono najnowszą wersję tej platformy oprogramowania do głębokiego uczenia.
Co to jest MXNet?
Apache MXNet to potężny instrument ramowy do głębokiego uczenia się typu open source, pomagający programistom tworzyć, trenować i wdrażać modele Deep Learning. W ciągu ostatnich kilku lat, od opieki zdrowotnej, przez transport, po produkcję, a właściwie w każdym aspekcie naszego codziennego życia, wpływ głębokiego uczenia się był powszechny. Obecnie firmy poszukują głębokiego uczenia się, aby rozwiązać niektóre trudne problemy, takie jak rozpoznawanie twarzy, wykrywanie obiektów, optyczne rozpoznawanie znaków (OCR), rozpoznawanie mowy i tłumaczenie maszynowe.
Z tego powodu Apache MXNet jest obsługiwany przez:
Niektóre duże firmy, takie jak Intel, Baidu, Microsoft, Wolfram Research itp.
Dostawcy chmury publicznej, w tym Amazon Web Services (AWS) i Microsoft Azure
Niektóre duże instytuty badawcze, takie jak Carnegie Mellon, MIT, University of Washington i Hong Kong University of Science & Technology.
Dlaczego Apache MXNet?
Istnieją różne platformy głębokiego uczenia, takie jak Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit itp., Więc możesz się zastanawiać, dlaczego Apache MXNet? Sprawdźmy niektóre z powodów:
Apache MXNet rozwiązuje jeden z największych problemów istniejących platform uczenia głębokiego. Problem polega na tym, że aby korzystać z platform głębokiego uczenia się, trzeba nauczyć się innego systemu dla innego smaku programowania.
Z pomocą Apache MXNet programiści mogą wykorzystać pełne możliwości GPU, a także przetwarzania w chmurze.
Apache MXNet może przyspieszyć wszelkie obliczenia numeryczne i kładzie szczególny nacisk na przyspieszenie rozwoju i wdrażania wielkoskalowych DNN (głębokich sieci neuronowych).
Zapewnia użytkownikom możliwości programowania imperatywnego i symbolicznego.
Różne funkcje
Jeśli szukasz elastycznej biblioteki do głębokiego uczenia się, aby szybko opracować najnowocześniejsze badania głębokiego uczenia lub solidnej platformy do przyspieszenia obciążenia produkcyjnego, Twoje wyszukiwanie kończy się na Apache MXNet. Wynika to z następujących cech:
Rozproszone szkolenie
Niezależnie od tego, czy jest to szkolenie z wieloma procesorami GPU, czy z wieloma hostami z niemal liniową wydajnością skalowania, Apache MXNet umożliwia programistom maksymalne wykorzystanie ich sprzętu. MXNet obsługuje również integrację z Horovod, który jest platformą do rozproszonego uczenia głębokiego typu open source stworzoną w Uber.
W przypadku tej integracji poniżej przedstawiono niektóre z typowych rozproszonych interfejsów API zdefiniowanych w Horovod:
horovod.broadcast()
horovod.allgather()
horovod.allgather()
W związku z tym MXNet oferuje nam następujące możliwości:
Device Placement - Z pomocą MXNet możemy łatwo określić każdą strukturę danych (DS).
Automatic Differentiation - Apache MXNet automatyzuje różnicowanie, czyli obliczenia pochodne.
Multi-GPU training - MXNet pozwala nam osiągnąć wydajność skalowania z liczbą dostępnych GPU.
Optimized Predefined Layers - Możemy kodować nasze własne warstwy w MXNet, a także zoptymalizować wstępnie zdefiniowane warstwy pod kątem szybkości.
Hybrydyzacja
Apache MXNet zapewnia swoim użytkownikom hybrydowy front-end. Z pomocą Gluon Python API może wypełnić lukę między swoimi imperatywnymi i symbolicznymi możliwościami. Można to zrobić, nazywając funkcjonalność hybrydyzacji.
Szybsze obliczenia
Operacje liniowe, takie jak dziesiątki lub setki mnożenia macierzy, są obliczeniowym wąskim gardłem dla głębokich sieci neuronowych. Aby rozwiązać ten problem, MXNet zapewnia:
Zoptymalizowane obliczenia numeryczne dla GPU
Zoptymalizowane obliczenia numeryczne dla rozproszonych ekosystemów
Automatyzacja typowych przepływów pracy, za pomocą której można krótko przedstawić standardowy NN.
Wiązania językowe
MXNet ma głęboką integrację z językami wysokiego poziomu, takimi jak Python i R. Zapewnia również obsługę innych języków programowania, takich jak:
Scala
Julia
Clojure
Java
C/C++
Perl
Nie musimy uczyć się żadnego nowego języka programowania, zamiast tego MXNet, w połączeniu z funkcją hybrydyzacji, pozwala na wyjątkowo płynne przejście z Pythona do wdrożenia w wybranym przez nas języku programowania.
Najnowsza wersja MXNet 1.6.0
Apache Software Foundation (ASF) wydała stabilną wersję 1.6.0 Apache MXNet 21 lutego 2020 roku na licencji Apache License 2.0. To ostatnia wersja MXNet obsługująca Python 2, ponieważ społeczność MXNet głosowała za zaprzestaniem obsługi Pythona 2 w kolejnych wersjach. Zapoznajmy się z niektórymi nowymi funkcjami, które ta wersja oferuje użytkownikom.
Interfejs kompatybilny z NumPy
Ze względu na swoją elastyczność i ogólność, NumPy jest szeroko stosowany przez praktyków uczenia maszynowego, naukowców i studentów. Ale jak wiemy, dzisiejsze akceleratory sprzętowe, takie jak graficzne jednostki przetwarzania (GPU), są coraz bardziej asymilowane w różnych zestawach narzędzi do uczenia maszynowego (ML), użytkownicy NumPy, aby skorzystać z szybkości procesorów graficznych, muszą przejść na nowe ramy z inną składnią.
Dzięki MXNet 1.6.0 Apache MXNet zmierza w kierunku programowania zgodnego z NumPy. Nowy interfejs zapewnia równoważną użyteczność i ekspresję dla praktyków znających składnię NumPy. Oprócz tego MXNet 1.6.0 umożliwia także istniejącemu systemowi Numpy wykorzystanie akceleratorów sprzętowych, takich jak GPU, do przyspieszenia obliczeń na dużą skalę.
Integracja z Apache TVM
Apache TVM, kompleksowy zestaw kompilatorów do głębokiego uczenia się typu open source dla zaplecza sprzętowego, takiego jak procesory, procesory graficzne i wyspecjalizowane akceleratory, ma na celu wypełnienie luki między strukturami uczenia głębokiego skupiającego się na produktywności a zapleczem sprzętowym zorientowanym na wydajność . Dzięki najnowszej wersji MXNet 1.6.0 użytkownicy mogą wykorzystać Apache (inkubujący) program TVM do implementacji wydajnych jąder operatorskich w języku programowania Python. Dwie główne zalety tej nowej funkcji to -
Upraszcza poprzedni proces programowania oparty na C ++.
Umożliwia udostępnianie tej samej implementacji na wielu zapleczach sprzętowych, takich jak procesory, układy GPU itp.
Ulepszenia istniejących funkcji
Oprócz wyżej wymienionych funkcji MXNet 1.6.0 zapewnia również pewne ulepszenia w stosunku do istniejących funkcji. Ulepszenia są następujące -
Grupowanie operacji na podstawie elementów dla GPU
Jak wiemy, wydajność operacji opartych na elementach zależy od przepustowości pamięci i jest to powód, dla którego tworzenie takich operacji może zmniejszyć ogólną wydajność. Apache MXNet 1.6.0 wykonuje fuzję operacji w oparciu o elementy, która w rzeczywistości generuje połączone operacje w czasie, gdy jest to możliwe. Takie pod względem elementów połączenie operacji zmniejsza również zapotrzebowanie na pamięć i poprawia ogólną wydajność.
Upraszczanie typowych wyrażeń
MXNet 1.6.0 eliminuje nadmiarowe wyrażenia i upraszcza typowe wyrażenia. Takie ulepszenie poprawia również użycie pamięci i całkowity czas wykonywania.
Optymalizacje
MXNet 1.6.0 zapewnia również różne optymalizacje istniejących funkcji i operatorów, które są następujące:
Automatyczna dokładność mieszana
Gluon Fit API
MKL-DNN
Duży wspornik tensora
TensorRT integracja
Obsługa gradientów wyższego rzędu
Operators
Profiler wydajności operatora
Import / eksport ONNX
Ulepszenia API Gluon
Ulepszenia API symboli
Ponad 100 poprawek błędów