Jeżeli kupowałeś kiedyś komputer, samodzielnie dobierając części, to w pewnym momencie musiałeś zaznajomić się z pojęciami CPU, RAM, płyta główna, dysk twardy itp. Jeśli celowałeś w maszynę do nauki lub do biura, to całkiem mogłeś pominąć zastanawianie się nad kartą graficzną. Wybrałeś wbudowaną w płytę główną i niczym więcej nie musiałeś się przejmować. Jeśli natomiast kupowałeś komputer do gier, to był to kluczowy element. GPU (bo taka nazywamy główny element obliczeniowy karty graficznej) jest kluczowy również jeśli planujesz zająć się uczeniem głębokim. Zaraz dowiesz się, o co chodzi.
GPU — lepszy do obliczeń niż CPU?
Jeżeli zajmujemy się uczeniem głębokim (deep learning), to instalując oprogramowania czasami mamy do wyboru wersje CPU i GPU. Ta pierwsza (CPU) to wersja działająca praktycznie na każdym komputerze osobistym. Ta druga (GPU) wykorzystuje niektóre karty graficzne do przyspieszenia obliczeń. Jeśli mamy taką kartę, to okaże się, że nasz proces może przyspieszyć kilka a może nawet kilkanaście razy. A czasem może to być nawet — zadziała/nie zadziała. Dlaczego tak jest?
Procesory są projektowane, żeby być jak najszybszą jednostką obliczeniową. Muszą być też w miarę uniwersalne, żeby dało się je szeroko stosować. Karty graficzne są projektowane, żeby jak najwydajniej wyświetlać grafikę, głównie 3D. A grafika 3D to w dużym uproszczeniu macierze i ich przekształcenia. Działanie karty graficznej polega więc na wczytaniu ogromnej liczby macierzy i systematycznego dokonywania ich przekształceń. Ma więc jedno zadanie, które musi wykonywać jak najlepiej.
Uczenie głębokie to w praktyce również przekształcanie macierzy. Okazuje się więc, że zamiast zmuszać procesor do szybkich, ale „pojedynczych” operacji, możemy przerzucić je do GPU. Pojedyncze obliczenia wykonają się tam wolniej. Ale GPU będzie w stanie sprytnie je sobie przygotować w taki sposób, żeby wykonać je jednocześnie. W ten sposób całość działania zakończy się wcześniej. Możesz sobie wyobrazić tutaj analogię, że procesor to sportowy samochód a karta graficzna to wielka ciężarówka transportowa. Na co dzień wygodniej i szybciej poruszać się samochodem, bo jest bardziej uniwersalny, ale do przewiezienia 20 ton ziemi już lepiej sprawdzi się taka ciężarówka.
Jaka karta graficzna?
Osobiście jestem zwolennikiem jak największej otwartości i uniwersalności. Pewnym smutkiem napawa mnie więc sytuacja, w której w zasadzie tylko jeden producent przejął cały rynek kart graficznych dla uczenia głębokiego. Jest to Nvidia z jej technologią CUDA. Jeśli więc szukasz karty graficznej, która pomoże Ci w pracy, będziesz przeglądał tylko karty z czipami tego producenta. Jeżeli szukasz czegoś do komputera osobistego, to będą to karty GeForce i TITAN. A jeśli budżet nie gra roli, to będą to akceleratory Tesla. Pozostaje Ci jeszcze tylko ustalić dwie rzeczy — ile RAMu ma posiadać taka karta i z której generacji powinna się wywodzić.
RAM będzie odpowiednikiem „wielkości paki”. Im będzie go więcej, tym mniej musimy się przejmować dzieleniem naszych danych i możemy sobie zuchwalej eksperymentować. Aktualnie karty GeForce z serii 20×0 posiadają od 6 do 11 GB. Musimy pamiętać, że nie da się tutaj dołożyć RAMu do już wybranej karty tak jak w przypadku RAMu ogólnego zastosowania. Warto więc to sobie przekalkulować.
Generację karty poznamy po tzw. Compute Capability. Jest to poziom rozwoju układu i informacja o funkcjach, które są dostępne przez API. Karty, które mają Compute Capability w wersji 7.5, mają praktycznie taką samą funkcjonalność. Różnią się za to np. ilością RAM, zużyciem prądu, głośnością itp. Przy wyborze warto się upewnić, czy oprogramowanie, z którego zamierzamy korzystać, nie wymaga pewnego minimalnego poziomu CC. Jeżeli będzie on za niski, to karta może okazać się nieprzydatna. Nie warto tutaj też zaopatrywać się na zapas jeśli nie musimy — nasze oprogramowanie prawdopodobnie nie wykorzystuje całkiem sporej ilości nowej funkcjonalności jeśli wyszła ona w ciągu kilku ostatnich miesięcy.
GPU — Podsumowanie
Jeżeli planujesz działać w uczeniu głębokim, lub biblioteki, z których korzystasz w klasycznym uczeniu maszynowym, wspierają GPU, to powinieneś się zastanowić, czy nie zaopatrzyć się w odpowiednią kartę graficzną. Musisz jednak uważać, żeby nie kupić najlepszej obecnie na rynku karty graficznej do gier, bo nie wszystkie one wspierają tego typu obliczenia. Najlepiej ocenić zasobność swojego portfela i sprawdzić CC i RAM na oficjalniej liście kart ze wsparciem CUDA. Okazuje się jednak, że jeśli już wybierzesz odpowiednią kartę graficzną do pracy, to może ona również całkiem nieźle sprawdzić się w grach. Ale praktyka z tym związana wykracza już poza moje doświadczenia :-).