W czasie zajmowania się uczeniem maszynowym prędzej lub później trafimy na problem, który da się rozwiązać bardzo efektywnie – ale w zasadzie tylko przy użyciu głębokich sieci neuronowych. Takimi problemami są na przykład wszystkie problemy związane z klasyfikacją obrazów. Oczywiście możemy podchodzić do nich poprzez interpretację pojedynczych pikseli, ale uzyskane wyniki będą dalekie od tego, co oferują nam sieci neuronowe. A jeśli zabieramy się za sieci neuronowe, to bez GPU ani rusz. I tutaj mogą zacząć się schody. Bo o ile do używania np. Pythona i Scikit-Learn z umiarkowanie dużymi zbiorami danych wystarczy nam dowolny współczesny komputer, to już do głębokich sieci neuronowych przydałoby się porządne GPU. Jeden z najbardziej popularnych modułów Pythona wykorzystujący GPU (PyTorch) wymaga GPU Nvidii z konkretną wersją Compute Capability (>= 3.0). Jak się okazuje, nie zawsze mamy akurat takie GPU pod ręką. Jak uporać się tym problemem? Tutaj pojawia się Google Colab, czyli usługa Google polegająca na udostępnianiu zmodyfikowanej wersji Jupyter Notebooków w chmurze, z dostępem do GPU.
Google Colab – o co tyle szumu?
Tak jak wspomniałem powyżej, nie zawsze mamy dostęp do GPU. A nawet jeśli mamy, to niekoniecznie może być to sensowne GPU. Okazuje się, że w Google Colab mamy dostęp do GPU Tesla K80. Nie znam się na runku GPU, ale po wrzuceniu tej nazwy do Ceneo ukazuje się cena 50K PLN. Fakt, GPU to nie jest już dostępne w sprzedaży, ale jak by było, to zdecydowanie było by poza zasięgiem domowego budżetu na uczenie maszynowe. A tutaj okazuje się, że dostajemy do niego dostęp za darmo.
Drugim argumentem jest prostota dostępu do takiego GPU. Po zalogowaniu się do Colab wystarczy, że w menu „Runtime” wybierzemy pole „Change runtime type” i zaznaczymy tam GPU i bum, już mamy dostępne GPU.
No a kolejnym plusikiem jest to, że mamy też dostęp do tego, co tygryski lubią najbardziej, czyli Jupyter Notebooków właśnie. I to takich notebooków, które możemy udostępniać innym i edytować wspólnie w czasie rzeczywistym. I to jest bardzo fajne.
Do czego można użyć Google Colab?
Ogólnie do wszystkiego, o ile ufasz Google. Notebooki, jak i dane, na których masz zamiar pracować, przechowywane będą (co najmniej tymczasowo) w ich infrastrukturze. Pracując tutaj, ufasz więc wielkiemu bratu G. Żeby nie było zbyt różowo, G zastrzega sobie, że będą ubijać długo działające notebooki, w których nic się nie dzieje. Podejście uruchom i zapomnij, nie zadziała więc tutaj za dobrze. Przeglądając jednak FAQ nie za bardzo wiadomo ile tego czasu działania mamy ¯\_(ツ)_/¯. No i explicite zabronione jest kopanie kryptowalut. Ale ostatnio i tak przestało to już chyba być modne.
Przykład użycia – najważniejsze sprawy
Ok, to jak więc w praktyce możemy użyć Google Colab? Spróbujmy uruchomić tam np. lekcje z kursu FastAI. FastAI to bardzo fajny i darmowy kurs Deep Learning. Autorzy tego kursu stwierdzili, że całej matematyki i teorii można nauczyć się później w jego trakcie, a esencjonalne jest jak najszybsze zakasanie rękawów i praca z programowaniem. W dokumentacji tego kursu mamy notkę jak uruchomić go w środowisku Colab. Użyję tego przykładu, żeby pokazać, jak się za to zabrać.
Pierwszym krokiem będzie wejście na oficjalną stronę startową Google Colab – colab.research.google.com. Naszym oczom ukazuje się powitalny notebook z podstawowymi informacjami o środowisku pracy. Możemy go sobie przejrzeć, jeśli mamy ochotę. Następnym krokiem będzie wczytanie docelowego notebooka z lekcją. Wyszukujemy i klikamy w menu „File” pozycję „Open notebook…”:
Następnie klikamy kartę „GITHUB” i wpisujemy odpowiednie repozytorium. W naszym przypadku będzie to fastai/course-v3. Po wpisaniu tej nazwy klikamy lupę i powinna nam się ukazać lista notebooków dostępnych w tym repozytorium:
Wybieramy ten, który nas interesuje, np. lesson1-pets.ipynb i klikamy na jego nazwę. Po chwili wczyta nam się notebook z treścią tej lekcji.
Jako że jest to nowo wczytany notebook, powinniśmy jeszcze umożliwić mu korzystanie z GPU. Aby to zrobić, klikamy Runtime -> Change runtime type i zaznaczamy GPU. Wygląda to tak:
W ten sposób „aktywowaliśmy” GPU w naszym środowisku. Teraz pozostają jeszcze trzy małe detale.
Konfiguracja
Pierwszy detal to konfiguracja naszego środowiska. Jeżeli uruchamiamy notebooki lokalnie, to zawsze mamy łatwą opcję decydowania jakie moduły, w jakich wersjach mamy w naszym środowisku. Tutaj też mamy taką możliwość, ale jest ona nieco ukryta. Ukrycie polega na tym, że możemy wykonać kod, który zmodyfikuje nasze środowisko, z wnętrza naszego notebooka. W przypadku kursu FastAI było to wykonanie takiego skryptu bash:
#!/bin/bash if [ ! -e /content/models ]; then mkdir -p /root/.torch/models mkdir -p /root/.fastai/data ln -s /root/.torch/models /content ln -s /root/.fastai/data /content rm -rf /content/sample_data/ fi echo Updating fastai... pip install fastai --upgrade > /dev/null echo Done.
Kod ten jest dość prosty. Najpierw sprawdzamy, czy mamy już w środowisku konkretną ścieżkę (tj. /content/models). Jeśli jej nie ma, to tworzymy odpowiednią strukturę na dysku. A później instalujemy/aktualizujemy konkretne moduły.
Aby wykonać ten kawałek kodu, bazując na skrypcie umieszczonym gdzieś w sieci, musimy dołożyć sobie dodatkową komórkę, która go wykona:
Przy pierwszym uruchomieniu zostaniemy ostrzeżeni o wykonywaniu nieznanego kodu.
Własna kopia
Drugim krokiem będzie utworzenie własnej kopii notebooka. Jeśli tego nie zrobimy, to będziemy pracować w tzw. piaskownicy. Jeśli przerwiemy pracę, to nasze wyniki przepadną. Natomiast jeśli klikniemy File -> Save a copy in Drive… albo klikniemy ikonkę COPY TO DRIVE, to na naszym dysku Google zostanie utworzona kopia notebooka, którą będziemy mogli swobodnie edytować i zapisywać.
Własne pliki
Trzecia sprawa, która może być dla niektórych kluczowa, to zapisywanie artefaktów naszej analizy. Czyli zapisywanie utworzonych wyników w plikach. Domyślnie, notebooki nie mają dostępu do zawartości naszego dysku Google. Możemy je (notebooki) tylko zapisać tam przez Colab (akapit powyżej). Ale jeśli chcemy zapisać powstałe dane, to możemy użyć API Google Colab:
from google.colab import drive drive.mount('/content/gdrive', force_remount=True) root_dir = "/content/gdrive/My Drive/" base_dir = root_dir + 'fastai-v3/'
Podłączamy sobie tutaj Google Drive i przygotowujemy odpowiednie ścieżki. Od tej pory będziemy do nich mogli pisać i czytać przy pomocy Pythona:
path = Path(base_dir + 'data/bears') dest = path/folder dest.mkdir(parents=True, exist_ok=True)
Fajnie, nie?
Podsumowanie
Google Colab to bardzo ciekawa usługa Google dedykowana dla osób, które np. nie mają GPU pod ręką albo chcą wspólnie z innymi edytować notebooki Jupyter. Samo Google chyba jeszcze do końca nie wie, co dalej będzie robić z tą usługą, bo jest:
- darmowa
- określona jako eksperyment
- bez żadnego SLA (może zadziała – może nie)
Jeśli nie przeszkadzają nam te argumenty (darmowe usługi chyba nikomu nie przeszkadzają), to możemy śmiało korzystać do woli. Konfiguracja środowiska i praca z własnymi danymi może okazać się nieco bardziej toporna niż praca na własnym komputerze, ale jest jak najbardziej możliwa. No, a jeśli ktoś ma ochotę przerobić wspomniany przeze mnie kurs Fast.AI, to już w ogóle może zacierać ręce – tańszej platformy nie znajdzie ;-).
Jeśli interesuje Cię jakiś temat – nie musi być związany z tym artykułem – to zostaw mi sygnał tutaj. Dzięki!
Można pójść jeszcze dalej dostać się do VM przez SSH. Wtedy nie jesteśmy skazani tylko na notatniki.
http://wchmurze.cloud/index.php/2019/10/06/wujek-google-ratuje-wewnetrznego-sknerusa-przed-wykretami-nad-uczeniem-glebokim/
O wow, tak daleko w tej kwestii nie zaszedłem. Fajny pomysł i instrukcje ! 😀