2017-03-31 14 views
8

Ponieważ posiadam tylko APU AMD A10-7850 i nie mam środków na wydanie karty graficznej NVIDIA o wartości 800 USD - 1200 USD, staram się wywiązać z zasobów, które mam, aby przyspieszyć głębokie uczenie się poprzez tensorflow/keras.Jak przyspieszyć proces uczenia się w trybie innym niż NVIDIA?

Początkowo użyłem skompilowanej wersji Tensorflow. InceptionV3 zajęłoby około 1000-1200 sekund na obliczenie 1 epoki. To było boleśnie powolne.

Aby przyspieszyć obliczenia, najpierw skompilowałem Tensorflow z optymalizatorami (używając instrukcji AVX i SSE4). Doprowadziło to do około 40% spadku czasu obliczeń. Te same obliczenia, które wykonano powyżej, trwają teraz tylko około 600 sekund. To prawie znośne - coś w rodzaju tego, że możesz oglądać farbę na sucho.

Szukam sposobów na dalsze zmniejszenie czasu obliczeń. Mam tylko zintegrowaną kartę graficzną AMD, która jest częścią APU. (Jak) (C/c) a Wykorzystuję ten zasób, aby jeszcze bardziej przyspieszyć obliczenia?

Mówiąc ogólniej, powiedzmy, że istnieją inne osoby z podobnymi ograniczeniami pieniężnymi i konfiguracjami Intela. W jaki sposób ktokolwiek BEZ dyskretnych kart NVIDIA może wykorzystywać swoje zintegrowane układy graficzne lub inną konfigurację poza NVIDIA, aby osiągnąć szybszą wydajność niż tylko procesor? Czy to jest możliwe? Dlaczego? Dlaczego nie? Co należy zrobić, aby osiągnąć ten cel? Czy będzie to możliwe w najbliższej przyszłości (2-6 miesięcy)? W jaki sposób?

Odpowiedz

15

Po zbadaniu tego tematu na kilka miesięcy, widzę 3,5 możliwych ścieżek do przodu:

1.) Tensorflow + OpenCL jak wspomniano w komentarzach powyżej:

Wydaje się, że jakiś ruch dzieje to pole. W trakcie Codeplay Lukasz Iwański opublikował obszerną odpowiedź na pytanie, jak sprawić, aby tensorflow działał z openclem (podam tylko link opisany powyżej, ponieważ informacje mogą się tam zmienić): https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

Potencjał do korzystania ze zintegrowanej grafiki jest ponętny. Warto również zapoznać się z wykorzystaniem tej kombinacji z APU. Ale nie jestem pewien, jak dobrze to będzie działać, ponieważ wsparcie OpenCl jest jeszcze na wczesnym etapie rozwoju, a obsługa sprzętu jest bardzo ograniczona. Co więcej, OpenCl to nie to samo, co biblioteka zoptymalizowanego kodu. (AKTUALIZACJA 2017-04-24: Dostałem kod do kompilacji po uruchomieniu w niektórych kwestiach here!) Niestety, nadzieja na poprawę szybkości NA MOJEJ USTAWIENIU (iGPU) nie zmaterializowałem.

CIFAR 10 zestawu danych:

  1. Tensorflow (przez pip ak niezoptymalizowanych): 1700sec/Epokę znajdującą się w 390% CPU roboczego.
  2. Tensorflow (SSE4, AVX): 1100sec/epoch przy wykorzystaniu 390% procesora .
  3. Tensorflow (opencl + iGPU): 5800sec/epoka przy 150% CPU i wykorzystanie 100% GPU.

Twój przebieg może się znacznie różnić. Zastanawiam się więc, co inni stosunkowo mówią (nieoptymalizowane vs zoptymalizowane vs opencl) w swoich konfiguracjach?

Co należy zauważyć: wdrożenie opencl oznacza, że ​​wszystkie ciężkie obliczenia powinny być wykonywane na GPU. (Zaktualizowany na 2017/4/29) Ale w rzeczywistości tak nie jest, ponieważ niektóre funkcje nie zostały jeszcze wdrożone. To prowadzi do unnecessary copying back and forth of data between CPU and GPU ram. Ponownie, imminent changes powinna poprawić sytuację. Co więcej, dla osób zainteresowanych pomocą i tych, którzy chcą przyspieszyć, możemy zrobić coś, co będzie miało wymierny wpływ na wydajność tensorflow z opencl.

Ale jak to teraz: 1 iGPU < < 4 CPUS z SSE + AVX. Być może bardziej wydajne procesory graficzne z większą pamięcią RAM i/lub implementacją opencl 2.0 mogłyby mieć większą różnicę.

W tym miejscu powinienem dodać, że podobne wysiłki trwały przynajmniej z Caffe i/lub Theano + OpenCl. Krokiem ograniczającym we wszystkich przypadkach wydaje się ręczne przenoszenie funkcjonalności CUDA/cuDNN do paradygmatu openCl.

2.) RocM + MIOpen

RocM oznacza Radeon Otwórz obliczyć i wydaje się być galimatias inicjatyw, które jest/uczyni głęboko-learning dostępny na non-NVIDIA (głównie urządzeń Radeon). Zawiera 3 główne komponenty:

  • HIP: narzędzie, które konwertuje kod CUDA na kod, który może być wykorzystany przez procesory graficzne AMD.
  • ROCk: 64-bitowy sterownik jądra Linuksa dla procesorów AMD + GPU.
  • HCC: kompilator C/C++, który kompiluje kod do kodu dla heterogenicznego środowiska architektury systemu (HSA).

Wygląda na to, że RocM został zaprojektowany, aby grać z AMD, posiadając zarówno procesor jak i procesor graficzny. Ich podejście do przyspieszania głębokiego uczenia się korzysta z obu elementów. Jako właściciel APU jestem szczególnie zainteresowany tą możliwością. Ale jako uwaga: APU Kaveri mają ograniczone wsparcie (obsługiwane są tylko zintegrowane grafcs). Przyszłe APU nie zostały jeszcze wydane. I wygląda na to, że nadal jest tu dużo pracy, aby doprowadzić projekt do dojrzałego stanu. Mam nadzieję, że wiele pracy sprawi, że będzie to możliwe w ciągu roku, biorąc pod uwagę, że AMD ogłosiło, że ich karty Radeon Instinct zostaną wydane w tym roku (2017).

Problem polega na tym, że RocM dostarcza narzędzi do budowy bibliotek głębokiego uczenia się. Same nie reprezentują bibliotek głębokiego uczenia się. Jako naukowiec danych, który nie koncentruje się na tworzeniu narzędzi, po prostu chcę czegoś, co działa. i niekoniecznie jestem zainteresowany budowaniem tego, co chcę, aby potem przeprowadzić naukę. W ciągu dnia nie ma wystarczającej liczby godzin, aby dobrze się czuć w firmie, w której się znajduję.

NVIDIA ma oczywiście CUDA i cuDNN, które są bibliotekami ręcznie wykonanego kodu asemblera zoptymalizowanego dla procesorów graficznych NVIDIA. Wszystkie główne schematy głębokiego uczenia się opierają się na tych zastrzeżonych bibliotekach. AMD obecnie w ogóle czegoś takiego nie ma.

Nie jestem pewien, jak skutecznie AMD dotrze do miejsca, w którym NVIDIA jest pod tym względem. Ale jest pewne światło, które rzuca światło na intencje AMD w artykule opublikowanym przez Carlosa Pereza w dniu 4/3/2017 here. Niedawno lecture at Stanford mówi również ogólnie o Ryzenie, Vegi i głębokim uczeniu się. W istocie artykuł stwierdza, że ​​MIOpen będzie reprezentować tę ręcznie wykonaną bibliotekę zoptymalizowanych funkcji głębokiego uczenia dla urządzeń AMD. Ta biblioteka ma zostać wydana w pierwszej połowie 2017 roku. Nie jestem pewien, jak szybko te biblioteki zostaną włączone do głównych ram głębokiego uczenia się i jaki będzie zakres funkcjonalnej implementacji w tym czasie.

Ale podobno, AMD has already worked with the developers of Caffe to "hippify" the code basis. Zasadniczo kod CUDA jest konwertowany automatycznie na kod C za pośrednictwem HIP. Automatyzacja zajmuje ogromną większość podstawy kodu, pozostawiając jedynie mniej niż 0,5% kodu, który trzeba zmienić i wymagać ręcznej uwagi. Porównaj to z ręcznym tłumaczeniem na kod openCl, a zaczynasz odczuwać, że takie podejście może być bardziej zrównoważone. Nie mam pojęcia, gdzie znajduje się optymalizacja języka asemblera niższego poziomu.

(Aktualizacja 2017-05-19) Jednak wraz z rychłym wydaniem kart AMD Vega (profesjonalna karta Frontier Edition nie będzie dla konsumentów pierwszy), istnieją wskazówki, że major deep learning frameworks will be supported through the MIOpen framework. Opublikowane dzisiaj wydanie Forbes article pokazuje postęp, jaki MiOpen przejął w ciągu ostatnich kilku miesięcy pod względem wydajności: wydaje się znaczący. (Aktualizacja 2017-08-25) MiOpen został oficjalnie wydany. Nie mówimy już tutaj o hipotetycznych sprawach. Teraz wystarczy wypróbować, jak dobrze działa ten framework.

3.) Neon

Neon jest Nervana'S (obecnie przejęta przez firmę Intel) open-source ramach głęboko-learning. Powodem, dla którego wspominam o tej strukturze jest to, że wydaje się ona dość prosta w użyciu. Składnia jest tak prosta i intuicyjna jak Keras. Co ważniejsze, ta struktura osiągnęła prędkości do 2x szybciej niż Tensorflow na some benchmarks ze względu na ręczną optymalizację języka asemblera dla tych obliczeń. Potencjalnie skrócenie czasu obliczeń z 500 sekund/epoki do 300 sekund/epoki to nic, na co można by kichnąć. 300 sekund = 5 minut. Tak więc można dostać 15 epok w ciągu godziny. i około 50 epok w około 3,5 godziny! Ale najlepiej, jeśli chcę wykonać tego rodzaju obliczenia w niecałą godzinę. Aby dostać się do tych poziomów, muszę użyć procesora graficznego iw tym momencie tylko NVIDIA oferuje pełne wsparcie w tym zakresie: Neon również używa CUDA i cuDNN, gdy jest dostępny GPU (i oczywiście musi to być procesor graficzny NVIDIA).). Jeśli masz dostęp do innego sprzętu firmy Intel, jest to oczywiście ważny sposób na kontynuowanie. Poza tym, Neon został opracowany z motywacji, aby optymalnie pracować z ustawieniami innymi niż NVIDIA (jak niestandardowe procesory Nervana, a teraz Intel FPGA lub Xeon Phis).

3.5) Intel Movidius

Aktualizacja 25.08.2017:. Natknąłem this article. Intel wypuścił akcelerator "głębokiego uczenia się" oparty na USB3.0. Wygląda na to, że działa z Cafe i pozwala użytkownikowi na wspólne, oparte na kawiarni, dostrajanie sieci i wnioskowanie. To ważne podkreślenie: jeśli chcesz trenować swoją własną sieć od zera, to sformułowanie jest tutaj bardzo niejednoznaczne. W związku z tym przyjmuję, że oprócz precyzyjnego dostrojenia sieci, samo szkolenie powinno być nadal wykonywane na czymś z bardziej równoległym układem. Prawdziwy kicker jest taki: kiedy sprawdziłem cenę, ten kij kosztuje tylko 79 $. To nic w porównaniu z kosztami przeciętnej karty NVIDIA 1070-80 (ti). Jeśli chcesz tylko poradzić sobie z niektórymi problemami ze wzrokiem używając popularnych topologii sieciowych już dostępnych dla niektórych powiązanych zadań, możesz użyć tego drążka, aby dostosować go do własnego użytku, a następnie skompiluj kod i umieść go w tym kiju, aby szybko wnioskować. Wiele przypadków użycia można obsłużyć tym kijem, i znowu 79 $ może być tego warte. Będąc Intelem, proponują wyruszyć na Intel. Ich modelem jest wykorzystanie chmury (czyli chmury Nervana) do treningu. Następnie użyj tego chipa do wnioskowania prototypowego lub wnioskowania, w którym zużycie energii ma znaczenie. Czy to właściwe podejście, czy nie, pozostawia czytelnikowi odpowiedź.

W tej chwili wygląda na to, że głęboka nauka bez NVIDII jest wciąż trudna do zrealizowania. Niektóre ograniczone zyski prędkości są trudne, ale potencjalnie możliwe dzięki zastosowaniu opencl. Inne inicjatywy brzmią obiecująco, ale potrzeba czasu, aby ustalić, jaki będzie rzeczywisty wpływ tych inicjatyw.

+0

Czy możesz wskazać mi instrukcje, jak uruchomić benchmark, do którego odwołujesz, używając _CIFAR 10 Dataset_? –

2

Jeśli twoja platforma obsługuje opencl, możesz spojrzeć na jej użycie z tensorflow. Istnieje pewne eksperymentalne wsparcie dla niego pod Linuksem pod adresem this github repository. Niektóre wstępne instrukcje są dostępne pod numerem the documentation section of of this github repository.

+0

Tutaj znajduje się kilka informacji na wysokim poziomie na temat stanu wykonania OpenCL, na wypadek gdyby to pomogło.Ale połączona gałąź Benoit jest właściwym miejscem do odwiedzenia https://www.codeplay.com/portal/02-14-17-bring-the-acceleration-of-opencl-to-tensorflow-with-sycl –

+0

Mam nadzieję, że nie. T mind ... odpowiem w ten weekend. – Thornhale

Powiązane problemy