Deep Learning – Dlaczego karty graficzne są idealne

Obecnie procesory komputerowe są projektowane do radzenia sobie z praktycznie każdym zadaniem. Jednak są mocno ograniczone i mogą wykonywać jedynie konkretny zestaw operacji matematycznych. Bardziej skomplikowane kombinacje nie wchodzą w grę z powodu zbyt długiego czasu przetwarzania. Karty graficzne,w przeciwieństwie do procesorów, zostały na tyle wyspecjalizowane, że prześcigają tradycyjne procesory, kiedy przychodzi do przetwarzania dużej ilości skomplikowanych obliczeń.

Są używane do rozpoznawania pieszych przez autonomiczne pojazdy, diagnostykę obrazową w medycynie, pracy w superkomputerach i samonauczania maszyn. Nie jest to specjalnie zaskakujące, ponieważ GPU posiadają nawet stukrotnie więcej mocy obliczeniowej niż tradycyjne CPU. Jest to też powodem dla którego to one są używane do obsługi najbardziej zaawansowanych sieci neuronowych, odpowiedzialnych za Deep Learning.

Co sprawia że karty graficzne są idealne do Deep Learningu?

Bardziej zaawansowany czytelnik może sądzić, że ma to związek z obliczeniami równoległymi, jednak nie jest to prawdą. Prawdziwy powód jest nieco prostszy i sprowadza się do przepustowości pamięci.

CPU potrafią pobrać (fetching) bardzo szybko małe ilości pamięci. W takim scenariuszu GPU, mające znacznie większe opóźnienia, działają wolniej. Jednak, gdy w grę wchodzi odczytywanie dużych pakietów danych, GPU radzi sobie nieporównywalnie lepiej, osiągając nawet 750GB/s przepustowości. To sporo w porównaniu do najlepszych procesorów, które wspierają maksymalnie 50GB/s szybkości odczytu z pamięci. No dobrze, ale co poradzić na problem z opóźnieniem?

To proste, wykorzystać więcej niż jedną jednostkę obliczeniową. GPU składają się z tysięcy rdzeni (w przeciwieństwie do CPU) i aby rozwiązać zadanie polegające na obsłudze dużych danych musisz czekać jedynie na ich pierwsze wczytanie (fetching). Każde kolejne będzie znacznie szybsze, ze względu na to, że proces zrzucania (unloading) zabiera tyle czasu, że GPU musi go kolejkować. Z tak dużą mocą obliczeniową opóźnienie jest efektywnie maskowane, by umożliwić GPU obsługę tak dużej przepustowości. Nazywa się to równoległością wątków (thread parallelism) i jest drugim powodem, dla którego GPU przewyższają CPU w zastosowaniach Deep Learning.

Trzeci powód nie ma tak dużego wpływu na wydajność, ale daje bliższy wgląd w przyczyny wyższości GPU nad CPU. Pierwsza część procesu polega na pobraniu danych z dysku lub pamięci RAM i wgrania ich na pamięć karty lub cache L1 (pamięć operacyjna) i rejestr. Rejestry są połączone bezpośrednio z jednostką obliczeniową, dla GPU jest to procesor strumieniowy, a dla CPU rdzeń. To tutaj mają miejsce wszystkie obliczenia. Zwykle, chciałbyś mieć L1 i rejestr możliwie blisko jednostki obliczeniowej i jednocześnie mieć je na tyle małe, żeby można było uzyskać do nich szybki dostęp. Im większa pamięć, tym więcej czasu potrzeba na uzyskanie dostępu.

To wszystko kwestia pamięci

Tym co sprawia, że karty graficzne potrafią być tak wydajne jest fakt, iż każda jednostka obliczeniowa ma mały pakiet rejestrów. Taki pakiet zawiera rejestry nawet 30 razy większe od tych w CPU, a jednocześnie dwukrotnie szybsze.

Rezultatem jest nawet 14MB zarezerwowanych dla pamięci rejestru pracujących z prędkością 80TB/s. Przeciętna pamięć cache L1 procesora pracuje z prędkością nie większą niż 5TB/s, a rejestr rzadko ma więcej niż 128KB i operuje z prędkością 10, może 20TB/s. Mimo, że rejestr CPU działa nieco inaczej niż ten w GPU, to i tak najważniejsza jest różnica w wielkościach ich pamięci cache.

GPU są w stanie przechowywać sporo informacji w pamięci cache oraz plikach rejestru w celu ponownego użycia splotowego i mnożenia SUBmacierzy. Najoptymalniejszy algorytm ich mnożenia wykorzystuje multiplikację dwóch SUBmacierzy o rozmiarach od 64×32 do 96×64. Rejestr wykorzystuje SUBmacierz rozmiarów od 16×16 do 32×32 dla sum wyjściowych każdego bloku macierzy. 1024 wątki odpowiadają jednemu blokowi, a takich jest 8 dla każdego procesora stumieniowego. Cały GPU składa się zaś z 60 takich procesorów.

Na przykład 100MB macierz może zostać rozbita na mniejsze, które pomieści pamięć cache oraz rejestr. Można wtedy przeprowadzić ich mnożenie, używając trzech SUBmacierzy i uzyskać prędkości od 10 do 80TB/s, a jest to niesamowicie dobry wynik. To ostatni gwóźdź do trumny CPU w temacie Deep Learningu, GPU są po prostu lepsze na każdym polu.

GPU rządzą!

Każda znacząca firma zarządzająca IT powie ci, że GPU nadają się najlepiej do Deep Learningu ze względu na szybką pamięć, równoległość wątków, która maskuje opóźnienia oraz łatwo programowalną pamięć L1 oraz rejestry. Mimo, że wyspecjalizowane procesory istnieją już od jakiegoś czasu, to stworzenie takiego, który nadawałby się do wielu zastosowań okazuje się być zbyt trudne. Poza tym, deweloperzy musieliby pisać kod pod każdy taki konkretny procesor. Na szczęście, patrząc na obecny rozwój otwartych standardów niskopoziomowego dostępu do GPU, można stwierdzić że będziemy używać kart graficznych do alternatywnych zadań częściej niż kiedykolwiek wcześniej.

Podziel się z innymi

News
  • Piotr Dąbrowski

    Nie ma czegoś takiego jak „najoptymalniejszy” – może być optymalny albo nieoptymalny.

  • Tomasson Gryska

    „Najbardziej optymalny”?