Współcześnie, jeżeli planujemy jakiś projekt uczenia maszynowego, to praktycznie mamy do wyboru trzy scenariusze: infrastruktura „osobista”, infrastruktura dedykowana i cloud (z angielskiego chmura). Infrastruktura osobista to sprzęt, jakim aktualnie dysponujemy jako urządzenia osobiste — laptopy i komputery PC. Czyli tak jakby start z marszu. Może okazać się jednak, że ten sprzęt jest dla nas niewystarczający. Wtedy musimy pomyśleć o kolejnym rozwiązaniu. Albo możemy kupić specjalistyczne serwery i karty graficzne do obliczeń i gdzieś je umieścić. Albo możemy wynająć podobne urządzenia na minuty w automatycznych systemach, które je udostępniają do pracy zdalnej. Czyli po prostu skorzystać z usług typu cloud obliczeniowy.
Dlaczego ktoś miałby chcieć korzystać z usług cloud?
Jeśli laptop nam nie wystarcza, to tak jak wspomniałem, mamy dwie opcje: kupić lub wynająć. Kupno jest spoko, bo dostajemy fizyczny sprzęt, którym dysponujemy, tak jak chcemy. Musimy tylko znaleźć jakieś dobre miejsce (ciepło, hałas i dużo pobieranego prądu) do jego umieszczenia i możemy działać. Mamy tutaj też kilka wad. Największa jest taka, że będzie nas to słono kosztować. A druga wada (możliwe, że nieoczywista) to fakt, że często od sformalizowania zamówienia do fizycznego rozpakowania sprzętu mogą minąć dni, a nawet tygodnie.
Zastanówmy się teraz nad scenariuszem typu cloud. Wybieramy jakiegoś dostawcę tego typu usług. Podłączamy tam kartę kredytową i od tego momentu możemy sobie wybierać ile i jakiego typu maszyny chcemy wynająć. Musimy jednak pomyśleć jak dostarczyć do nich nasze dane i jak będziemy przechowywać wyniki. No bo jeśli zdecydujemy się skończyć korzystać z komputerów w chmurze, to nasze wyniki po prostu wyparują. Mamy więc tutaj pewną optymalizację — mamy szybszy dostęp do sprzętu obliczeniowego i mniejszy koszt startu. Musimy jednak zadbać o umiejętne przerzucanie danych oraz musimy posiadać umiejętności związane z zarządzaniem usługami z chmury danego dostawcy. Mamy więc tutaj sytuację coś za coś, jednakże różnice są na tyle duże, że faktycznie są sytuacje, że usługi chmurowe mogą być dla kogoś bardzo praktycznym rozwiązaniem.
Czy każdy cloud się nada?
Wybierając cloud do uczenia maszynowego, musimy odpowiedzieć na te same pytania co przy wyborze klasycznego lokalnego sprzętu: jaki procesor? Jaki dysk? Ile RAMu? Ale okazuje się, że reszta już nas niewiele obchodzi. Pozostaje jednak jedno ważne pytanie, na które odpowiedź „tak” odsiewa dość dużą liczbę dostawców chmury: czy potrzebuję GPU?
Osobiście nie mam za dużych doświadczeń z cloud GPU. Jeśli potrzebuję ogarnąć jakiś notebook, żeby coś komuś pokazać albo coś przetestować to korzystam z Google Colab. Natomiast społeczność zebrana wokół projektu fastai ma całkiem sporo doświadczeń i przygotowali nawet całkiem rozbudowany samouczek jak uruchomić ich kurs u różnych chmurowych dostawców GPU. Samouczki te znajdziesz tutaj (zakładka po lewej „Server setup”).
Cloud — Podsumowanie
Czy korzystanie z GPU albo ogólnie uczenie maszynowe w chmurze się opłaca? Jedni powiedzą tak, inni powiedzą nie. Jeśli masz już okrzepnięty projekt i wiesz, że będziesz ostro piłował GPU i CPU przez najbliższe miesiące, to może Ci się bardziej opłacać kupić fizyczny sprzęt. Ale jeśli np. eksperymentujesz i Twoje potencjalne GPU jest przez więcej czasu nieużywane niż używane, to chmura może okazać się lepszym pomysłem. Będzie tańsza na start i nie zostaniesz z niepotrzebnym sprzętem jeśli się rozmyślisz odnośnie swojego projektu. Jest jednak jeden scenariusz, który może uniemożliwić Ci korzystanie z chmury — bardzo delikatne dane. Żeby bowiem działać w chmurze, musisz tam wrzucić dane. A chmura to tak naprawdę dużo komputerów kogoś innego. A nie wszystkie dane mogą opuszczać własną infrastrukturę. Dlatego też czasem po prostu nie mamy tego dylematu — sprzęt lokalny czy chmura, bo prawnicy rozwiązali go za nas. Tak czy owak, warto mieć na uwadze tę opcję.