Google Colab i Kaggle¶
W trakcie realizacji zadania mamy możliwość używania Notebooka serwowanego przez Gogole Colaboratory, lub portal Kaggle. Oba mają swoje wady i zalety. Poniżej przedstawię je i opiszę jak z nich korzystać.
Google Colab¶
Dokument opisuje pokrótce jak podłączyć i używać produktu Google zwanego colab, które jest po prostu notatnikiem ipythona (ipython notebook) z warstwą współdzielenia podobną do Google Docs i opierającym się na autentykacji via konto google. Pliki zapisywane są na naszym koncie w Google Drive. Niewątpliwą zaletą Colab jest udostępnianie za darmo całej przestrzeni dyskowej przypisanej do danego konta Google (około 15-17 GB) i udostępnianie pojedynczej jednostki GPU (Nvidia Tesla K80) do obliczeń. Colab posiada też znaczą ilość preinstalowanych bibliotek pythona nakierowanych na machine learning (listing z 08.08.2018):
!pip list
Package Version
------------------------ ---------
absl-py 0.3.0
altair 2.1.0
astor 0.7.1
beautifulsoup4 4.6.1
bleach 2.1.3
cachetools 2.1.0
certifi 2018.4.16
chardet 3.0.4
crcmod 1.7
cycler 0.10.0
decorator 4.3.0
entrypoints 0.2.3
future 0.16.0
gast 0.2.0
google-api-core 1.3.0
google-api-python-client 1.6.7
google-auth 1.4.2
google-auth-httplib2 0.0.3
google-auth-oauthlib 0.2.0
google-cloud-bigquery 1.1.0
google-cloud-core 0.28.1
google-cloud-language 1.0.2
google-cloud-storage 1.8.0
google-cloud-translate 1.3.1
google-colab 0.0.1a1
google-resumable-media 0.3.1
googleapis-common-protos 1.5.3
grpcio 1.14.0
h5py 2.8.0
html5lib 1.0.1
httplib2 0.11.3
idna 2.6
ipykernel 4.6.1
ipython 5.5.0
ipython-genutils 0.2.0
Jinja2 2.10
jsonschema 2.6.0
jupyter-client 5.2.3
jupyter-core 4.4.0
Keras 2.1.6
Markdown 2.6.11
MarkupSafe 1.0
matplotlib 2.1.2
mistune 0.8.3
mpmath 1.0.0
nbconvert 5.3.1
nbformat 4.4.0
networkx 2.1
nltk 3.2.5
notebook 5.2.2
numpy 1.14.5
oauth2client 4.1.2
oauthlib 2.1.0
olefile 0.45.1
opencv-python 3.4.2.17
packaging 17.1
pandas 0.22.0
pandas-gbq 0.4.1
pandocfilters 1.4.2
patsy 0.5.0
pexpect 4.6.0
pickleshare 0.7.4
Pillow 4.0.0
pip 18.0
plotly 1.12.12
pluggy 0.7.1
portpicker 1.2.0
prompt-toolkit 1.0.15
protobuf 3.6.0
psutil 5.4.6
ptyprocess 0.6.0
py 1.5.4
pyasn1 0.4.4
pyasn1-modules 0.2.2
Pygments 2.1.3
pyparsing 2.2.0
pystache 0.5.4
python-dateutil 2.5.3
pytz 2018.5
PyWavelets 0.5.2
PyYAML 3.13
pyzmq 16.0.4
requests 2.18.4
requests-oauthlib 1.0.0
rsa 3.4.2
scikit-image 0.13.1
scikit-learn 0.19.2
scipy 0.19.1
seaborn 0.7.1
setuptools 39.1.0
simplegeneric 0.8.1
six 1.11.0
statsmodels 0.8.0
sympy 1.1.1
tensorboard 1.9.0
tensorflow 1.9.0
tensorflow-hub 0.1.1
termcolor 1.1.0
terminado 0.8.1
testpath 0.3.1
toolz 0.9.0
tornado 4.5.3
tox 3.1.2
traitlets 4.3.2
typing 3.6.4
uritemplate 3.0.0
urllib3 1.22
vega-datasets 0.5.0
virtualenv 16.0.0
wcwidth 0.1.7
webencodings 0.5.1
Werkzeug 0.14.1
wheel 0.31.1
xgboost 0.7.post4
Najważniejsze z nich to: Keras, matplolib, nltk, numpy, pandas, scikit-learn, seaborn, tensorflow, xgboost, to kompletny zestaw bibliotek do data science i uczenia maszynowego, z uwzględnieniem uczenia głębokiego, czyli deep learning. Najczęściej używaną będzie bibliotek Keras, która jest “nakładką” na kolejny produkt Google: TensorFlow. Jeżeli interesuje kogoś użycie Tensorflow w uczeniu maszynowym, proponuję zapoznać się z tym kursem.
Inne biblioteki, takie jak : scipy, statsmodels, również są przydatne, ale w tym tutorialu nie będą używane.
Jak dołączyć?¶
Podstawowym warunkiem używania Colab jest założenie konta w serwisie Google. Oprócz dziesiątek aplikacji sieciowych, właściciel takiego konta może dodać aplikację Colab. W momencie, kiedy już mamy konto Google (prawie każdy z telefonem android je ma, nie liczę osób z custom ROM :)) przechodzimy do aplikacji Google Drive i klikamy na nowy element –> Więcej i odnajdujemy Colaboratory na liście. To wszystko. Prawda, że proste?
Interfejs¶
Mamy panel z boku, który zbiera linki komórek markdown w spis treści. Dodatkowo wszystkie możliwości ipython notebook. Kmórki kodu, komórki mardown z pełna obsługą LaTeXa. Ewaluacja komórek to Shift+Enter.
Akceleracja GPU¶
Aby móc skorzystać z GPU musimy najpierw aktywować tę opcję w ustawieniach notebooka. Przechodzimy do Edit –> Notebook Settings
a następne zaznaczamy:
Gotowe!
Żeby sprawdzić, czy operacja się udała wpisujemy w wolną komórkę z kodem:
import tensorflow as tf
tf.test.gpu_device_name()
'/device:GPU:0'
Powinniśmy uzyskać string z miejscem montowania GPU. Jeżeli pojawił sie pusty string, to oznacza, żę aktywacja GPU nie powiodła się.
Aby dokładnie poznać parametry dostępnej karty graficznej, wpisujemy:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 13693741527332965188, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 11281989632
locality {
bus_id: 1
links {
}
}
incarnation: 9298481268220974714
physical_device_desc: "device: 0, name: Tesla K80, pci bus id: 0000:00:04.0, compute capability: 3.7"
Kaggle Notebook¶
Podobnie jak Google, portal Kaggle również udostępnia własną implementację Jupyter Notebook. Notebooki Kaggla od niedawna również umożliwiają użycie GPU do przyspieszenia obliczeń. Również jest to Nvidia Tesla K80. Kaggle Notebook oferuje również znaczną ilość pre-instalowanych paczek (524 paczki):
!pip list
Package Version Location
---------------------------------- ------------------------- -----------------------------------
absl-py 0.2.2
alabaster 0.7.10
algopy 0.5.7
altair 2.1.0
anaconda-client 1.6.5
anaconda-navigator 1.6.9
anaconda-project 0.8.0
annoy 1.12.0
appdirs 1.4.3
arrow 0.12.1
asn1crypto 0.22.0
astor 0.7.1
astroid 1.5.3
astropy 2.0.2
attrs 18.1.0
audioread 2.1.6
Babel 2.5.0
backports.shutil-get-terminal-size 1.0.0
Baker 1.3
basemap 1.1.0
bayesian-optimization 0.6.0
bayespy 0.5.17
bcolz 1.2.1
beautifulsoup4 4.6.0
...
Co ciekawe Kaggle ma pre-instalowane paczki związane nie tylko z uczeniem maszynowym, ale również z wieloma specyficznymi dziedzinami takimi jak biologia obliczeniowa (biopython), astronomia (astropy). Z ciekawszych, które udało mi się zauważyć można wymienić cały zestaw paczek do map i GIS (basemap, Cartopy, Fiona, GDAL, geopandas etc.), paczki do przyspieszenia Pythona (numba, Cython), manipulacji danymi (odo, pandas, dask), wizualizacji danych (matplotlib, bokeh, plotly, seaborn, vega). Do wyboru, do koloru.
Interfejs¶
Interfejs jest prosty i bardzo podobny do colabowego. Działają nawet skróty z jupyter notebook.
Akceleracja GPU¶
Jak aktywować jednostkę GPU? Podczas tworzenia nowego “kernela” (notebooka) otwieramy menu ustawień schowane pod prawym, bocznym panelem i przechodzimy do
Następnie wybieramy opcję GPU on i gotowe. Na dolnym pasku ze statusem naszego notebooka powinna się pojawić kontrolka “GPU ON”.
Podsumowanie¶
Jak wspomniałem oba rozwiązania mają swoje plusy i minusy. Pokrótce:
Cecha | Kaggle | Colab |
Zauploadowane dane | tak | nie |
Możliwość współpracy | nie (??) | tak |
GPU | tak | tak |
Preinstalowane biblioteki | tak(++) | tak |
Ponieważ nasza grupa nastawiona jest na edukację razem, moim zdaniem opcja współpracy Google Colab przeważa i warto zainwestować trochę czasu w upload próbki zdjęć na konto Google i móc dzielić Notebooka z całą grupą.