Inne
Artykuł
Maciej Zabłocki, Piątek, 8 września 2017, 17:00

Czym jest TensorFlow i gdzie jest wykorzystywany?

TensorFlow to zestaw bibliotek oprogramowania (rozpowszechnianych w ramach tzw. open-source) przeznaczonych do rozwoju uczenia maszynowego. Zostały zaprojektowane specjalnie do budowy i szkolenia sieci neuronowych. Pozwalają wykrywać i tworzyć wzorce i korelacje analogiczne do ludzkiego uczenia się i rozumowania. Biblioteki TensorFlow zostały opracowane przez zespół Google Brain, początkowo tylko na własny użytek. Ich pierwszą wersję wydano 9 listopada 2015 roku, a publicznie udostępniono je 11 lutego 2017 roku. Najnowszą aktualizację, o oznaczeniu 1.3.0, opublikowano 17 sierpnia. 

TensorFlow może działać z wykorzystaniem wielu procesorów i kart graficznych jednocześnie (z opcjonalnym wykorzystaniem CUDA w ramach obliczeń ogólnego przeznaczenia dla układów GPU). Wyniki dostarcza w postaci wykresów przepływów danych. W czerwcu 2016 roku na serwerach GitHub (platforma dla twórców oprogramowania) znajdowało się aż półtora tysiąca wspomnień o TensorFlow, a tylko pięć z nich pochodziło bezpośrednio od Google.

Dzięki temu możemy sobie wyobrazić, jak wielkim zainteresowaniem cieszy się uczenie maszynowe. W maju 2017 roku Google ogłosiło wcielenie Tensor Processing Units do programu Google Compute Engine. Jednostki TPU drugiej generacji zapewniają wydajność do 180 teraflopsów, a połączone w klaster składający się z 64 jednostek TPU, mogą zapewnić nawet 11,5 petaflopsa. Żeby było łatwiej to zrozumieć, wyjaśnię pokrótce, czym w istocie są te flopy.

Teraflopsy, petaflopsy – o czym Ty mówisz?

Flop to oznaczenie liczby operacji zmiennoprzecinkowych na sekundę, a także podstawowa jednostka mocy obliczeniowej dowolnego komputera (w tym konsoli), zapisywana w notacji naukowej jako razy 10 do potęgi. Żeby łatwiej było zrozumieć podstawy ich wyliczenia, posłużmy się krótkim wzorem na przykładzie karty Nvidia GeForce GTX 1060:

1280 jednostek obliczeniowych × 1,7 GHz (taktowanie rdzenia) × 2 polecenia = 4 352 000 megaflopsów, czyli ~4,35 teraflopsa.

Dwa polecenia określają dwa różne typy poleceń równolegle wydawane w każdym cyklu (coś w stylu instrukcji postępowania dla GPU). Ten wzór można zastosować do każdego urządzenia dostępnego na rynku. Niestety, oznaczenie flop jest mocno orientacyjne. Według powszechnie stosowanego wzoru referencyjna karta graficzna Radeon RX 580 osiąga wydajność 5,8 teraflopa:

2304 jednostki obliczeniowe × 1257 MHz (taktowanie rdzenia) × 2 polecenia = 5 792 256 megaflopsów, czyli ~5,8 teraflopsa.

Jak wskazują jednak nasze testy, GTX 1060 w wielu różnych grach okazuje się tak samo szybki jak Radeon RX 580, a czasem nawet szybszy, mimo teoretycznej różnicy wydajności rzędu 1,4 teraflopa (to więcej, niż osiąga Xbox One).

Jak widać, ostatecznie wszystko zależy od umiejętności wykorzystania sprzętu i przygotowanego oprogramowania (na przykład sterowników). W podsumowaniu testu wskazaliśmy, że RX 580 ma niewielką przewagę nad GTX-em 1060, ale zdecydowanie nie tak dużą, jak sugeruje teoretyczna wydajność. Karty AMD sprawdzają się jednak zdecydowanie lepiej na przykład podczas wydobywania kryptowalut, kiedy to wskazywana różnica w mocy obliczeniowej ma duże znaczenie.

Zagadnienie wydajności i zależności, które zachodzą pomiędzy różnymi kartami (w kontekście ich teoretycznej mocy obliczeniowej), chciałbym omówić w przyszłości. Pamiętajcie, że dwukrotne zwiększenie liczby teraflopów nigdy się nie przełoży na dwukrotnie większą liczbę klatek w grach, na co wpływ ma między innymi kontroler pamięci.

Google Compute Engine – co to jest?

To specjalna usługa platformy Google Cloud, zbudowana na fundamencie globalnej infrastruktury, uruchamiającej między innymi przeglądarkę Google, pocztę GMail i witrynę YouTube. Technika obsługiwana przez Google Compute Engine pozwala użytkownikom stawiać wirtualne maszyny na żądanie. Klienci platformy (zwykle twórcy oprogramowania) muszą uwierzytelnić dostęp za pomocą OAuth 2.0, a maszynę obsłużą dzięki wierszowi poleceń, konsoli programisty lub interfejsowi RESTful.

Google stworzyło klaster składający się z tysiąca chmur wyposażonych w jednostki TPU. Zapewniło w ten sposób środowisku badawczemu blisko 180 petaflopsów czystej mocy obliczeniowej, która bez żadnych dodatkowych opłat ma wspomóc rozwój technik uczenia maszynowego. To wielka rzecz dla wszystkich zainteresowanych, bo może się przyczynić do kolejnych przełomowych odkryć w nauce. Obecnie z rozwiązań Google korzystają między innymi tacy giganci, jak: Intel, Qualcomm, eBay, IBM, Uber, Snapchat. 

Dlaczego Tesla V100 może mieć tak duże znaczenie?

Nvidia zachwala Teslę V100 jako najbardziej zaawansowany układ graficzny (pierwsze GPU wyposażone w rdzenie Tensor). Ma w tym trochę racji, bo nowość zauważalnie wspomaga rozwój uczenia maszynowego i jest doskonałym wyborem dla naukowców, programistów czy inżynierów. Dzięki zastosowaniu 640 rdzeni Tensor Tesla V100 potrafi osiągnąć w uczeniu maszynowym (w niektórych zastosowaniach) 20-krotnie wyższą wydajność od Tesli P100, która takich rdzeni nie ma. To pozwoli na znaczne przyspieszenie prac nad wieloma obliczeniami i badaniami, co z kolei przyniesie jeszcze szybszy postęp w przyszłości. Teoretycznie, bo wszystko zależy od tego, jak rozwiązania „zielonych” zostaną wykorzystane.

Tesla V100 w całej okazałości – tutaj ze złączem NVLink

Nvidia chwali się tym na swojej stronie internetowej, na której porównuje obydwa układy. Według zamieszczonych tam danych wykorzystanie platformy Nvidia DGX wyposażonej w osiem układów graficznych P100 zapewni teoretyczną wydajność 170 teraflopsów. Po zastosowaniu ośmiu kart V100 wydajność rośnie do niewyobrażalnych 960 teraflopsów. To wszystko przy wykorzystaniu złącza NVLink o przepustowości 300 GB/s (dla porównania: PCI-E 3.0 zapewnia „tylko” 32 GB/s).

Ile to kosztuje? Za platformę Nvidia DGX wyposażoną w osiem układów Tesla P100 trzeba zapłacić 129 000 dolarów. Taka sama, tyle że oparta na układach Tesla V100, kosztuje… 149 000 dolarów. Jednak skok wydajności jest tak gigantyczny, że różnica w cenie nie jest duża. To nie są wielkie kwoty dla dużych korporacji, a zysku w postaci zaoszczędzonego czasu nie da się przecież wycenić. 

To co dalej?

To dopiero początek omawiania skomplikowanych zagadnień na łamach PCLab.pl. Pracuję nad kilkoma dalszymi artykułami, między innymi o głębokim uczeniu (o tym, na czym takie uczenie polega i dlaczego nie jest równoznaczne z uczeniem maszynowym) i sztucznej inteligencji, które pozwolą trochę lepiej zrozumieć temat. Jestem zafascynowany rozwojem techniki i tym, co może nadejść w niedalekiej przyszłości, szczególnie w naszych domowych komputerach. Czekam z niecierpliwością na Wasze komentarze i wracam do pisania! 

Ocena artykułu:
Ocen: 22
Zaloguj się, by móc oceniać
barwniak (2017.09.08, 17:25)
Ocena: 18

0%
Popieram, warto kontynuować temat.
sevae (2017.09.08, 17:26)
Ocena: 13

0%
Pierwszym komputerem był niemiecki Z3 z 1941 roku.
matekmz (2017.09.08, 17:31)

0%
sevae @ 2017.09.08 17:26  Post: 1093601
Pierwszym komputerem był niemiecki Z3 z 1941 roku.


Na potrzeby artykułu przytoczyłem historię ENIACa, który wydawał mi się najbardziej fascynujący.
lolotron (2017.09.08, 17:32)
Ocena: 7

0%
Szybkość duża, inteligencja żadna. Sam art bardzo fajny.
_jezz_ (2017.09.08, 17:37)
Ocena: 14

0%
ENIAC liczył wtedy w systemie binarnym, a nie, jak dzisiejsze komputery, w dziesiętnym, ale wykonywał 5 tysięcy dodawań na sekundę.


Raczej nad odwrót.
Aargh (2017.09.08, 17:38)
Ocena: 10

0%
ENIAC liczył w binarnym a obecne komputery w dziesiętnym?

Chyba wkradł się błąd ;)
matekmz (2017.09.08, 18:00)

0%
Mówiąc o systemie dziesiętnym, miałem na myśli wielokrotność liczby 2, bo faktem jest, że każdy komputer odczytuje system binarny.
Makavcio (2017.09.08, 18:20)
Ocena: 15

0%
Bardzo smaczne teksty się tu ostatnio pojawiają. I to pisane dobrym językiem, co w portalach technicznych nie jest standardem.
Zaloguj się, by móc komentować
Artykuły spokrewnione
Facebook
Ostatnio komentowane