Środowisko programistyczne dla uczenia maszynowego

Jednym z pierwszych problemów, na jakie napotykają osoby studiujące uczenie maszynowe jest jak zbudować lokalne środowisko programistyczne dla uczenia maszynowego? Jest to o tyle niewdzięczne zagadnienie, że dostępnych jest wiele metod oraz narzędzi i czasami po prostu nie wiadomo, które wybrać i od czego zacząć. Do tego dochodzą kwestie wyboru bibliotek do instalacji, IDE oraz wykorzystania GPU.

Osobiście, dla potrzeb nauki i eksperymentowania, jestem zwolennikiem skorzystania z zestawu pakietów oferowanych przez Anacondę, menadżera conda oraz notebooka Jupyter. Z niniejszego posta dowiesz się między innymi:

Czym jest Anaconda, conda i jakie są alternatywy?

Jak zainstalować Anaconda?

Jak tworzyć środowiska wirtualne z wykorzystaniem conda?

Jakie pakiety zainstalować, aby móc rozpocząć prace z uczeniem maszynowym?

Jak zainstalować bibliotekę Tensorflow w różnych wersjach?

Jak zainstalować Tensorflow na GPU?

Anaconda jest open-source’ową platformą dla uczenia maszynowego i data science, dostępną na większość systemów operacyjnych. Zawiera ona w sobie przede wszystkim zestaw ponad 1.500 bibliotek programistycznych i narzędziowych, a wśród nich conda i pip, które przydadzą się do zbudowania środowisk. Dzięki Anacondzie mamy wszystko pod ręką, budowa środowiska jest szybka i prosta, a platforma dba o aktualność bibliotek i zależności między nimi. Ma też niestety swoje minusy: bardziej zaawansowane funkcje są płatne, a instalacja Tensorflow 2.0 nie jest jak na razie (październik 2019) wspierana przez conda i trzeba posiłkować się menedżerem pip.

Conda to menedżer środowisk wirtualnych oraz bibliotek programistycznych dla Pythona (ale też i innych języków). Jest dostarczany wraz z Anacondą i można dzięki niemu tworzyć odseparowane środowiska, w których będziemy wykorzystywali różne biblioteki lub różne ich wersje, np.: tensorflow 1.x, tensorflow 2.x, tensorflow-gpu, itd.

Pip to również menedżer bibliotek / pakietów programistycznych. Nie daje on jednak możliwość tworzenia odseparowanych środowisk. Jeżeli ktoś chciałby użyć pip i jednak działać w środowisku zwirtualizowanym, to może skorzystać z menedżera środowisk wirtualnych dla języka Python – venv. Pewną przewagą pip nad conda (przynajmniej na październik 2019) jest to, że tensorflow 2.0 jest dostępny z poziomu pip i jest już nawet wersją domyślną. Podczas gdy w conda na razie brak wsparcia dla tensorflow 2.0 i jeżeli chce się zbudować środowisko oparte na wersji 2.0, to trzeba nieco pokombinować, o czym niżej.

Warto w tym miejscu dodać, że jest mnóstwo świetnych środowisk dla Pythona dostępnych w chmurze – wystarczy wyszukać „cloud python ide”. Dodatkowo, jeżeli ktoś, tak jak ja, lubi Jupyter Notebook, to Google oferuje rozwiązanie Colaboratory, które jest niczym innym jak darmowym notebookiem Jupyter uruchomionym w chmurze, skonfigurowanym do pracy lub wymagającym jedynie minimalnego setup’u. I co ciekawe, umożliwia również darmowe skorzystanie z gpu.

Pomimo tego uważam, że lokalne środowisko zawsze warto mieć, stąd przejdźmy do jego konfigurowania.

Środowisko programistyczne dla uczenia maszynowego – krok 1

Pobieramy i instalujemy Anacondę dla wersji Pythona 3.7. Instalację przeprowadzamy z domyślnymi ustawieniami. Jedyną wątpliwość może budzić ten ekran:

Jak widać Anaconda nie rekomenduje dodawania ścieżki do zmiennej PATH. W konsekwencji, aby uruchomić np. condę będziemy musieli przejść do folderu, w którym instalujemy Anacondę, do podkatalogu condabin lub skorzystać z programu Anaconda Prompt (na Windows). Nie jest to jakiś problem, a przy bardziej rozbudowanych środowiskach faktycznie dodanie do PATH ścieżki do Anacondy może spowodować konflikty. Stąd ja pozostawiam rekomendowane ustawienia i rozpoczynam instalację.

Środowisko programistyczne dla uczenia maszynowego – krok 2

Uruchamiamy konsolę, w systemie Windows polecenie cmd, przechodzimy do katalogu condabin (alternatywnie uruchamiamy Anaconda Prompt) oraz sprawdzamy wersję condy:

>conda -V

Jeżeli chcemy się upewnić, że używamy najnowszej wersji condy możemy wykonać polecenie:

>conda update -n base -c defaults conda

Tworzymy nowe wirtualne środowisko. Tu nazywam je my_env, ale nazwa może być dowolna:

>conda create --name my_env

Aby przełączyć się w tryb pracy z nowo utworzonym środowiskiem wykonujemy polecenie:

>conda activate my_env

Przełączenie się na to środowisko jest ważne, w przeciwnym wypadku będziemy działali w kontekście środowiska bazowego „base” i z separacji nici. Aby zobaczyć jakie pakiety są zainstalowane na obecnym środowisku wydajemy polecenie:

> conda list

Ponieważ przy tworzeniu środowiska nie wskazaliśmy żadnych pakietów i bibliotek, to lista powinna być na tę chwilę pusta. Aby zainstalować pakiety możemy się posłużyć poleceniem:

>conda install numpy pandas matplotlib pillow jupyter

Wymieniliśmy jedynie kilka kluczowych dla nas pakietów, ale conda badając zależności zainstaluje ich o wiele więcej, w tym pythona w odpowiedniej wersji. Jest to jedna z największych zalet menedżerów w rodzaju condy czy pip. Wszystkim tym, którzy chcieliby nieco więcej poczytać o możliwościach condy, polecam tę zgrabną stronkę – Conda Cheet Sheet.

W tym miejscu możemy się na chwilę zatrzymać z dalszą instalacją i zastanowić się w jaki sposób można zainstalować tensorflow:

Jeżeli chcemy jedną z ostatnich stabilnych wersji 1.x, to możemy w dalszej kolejności instalować z wykorzystaniem conda – jest to najbardziej zalecana droga, bo nasze środowisko będzie nadal zarządzane przez jednego menedżera pakietów – condę. Jeżeli chcielibyśmy dziś (październik 2019) zainstalować wersję 2.0, to niestety nie jest ona jeszcze oferowana przez condę i musimy posłużyć się menedżerem pip. Z jeszcze inną sytuacją mamy do czynienia, jeżeli możemy i chcemy skorzystać z procesora graficznego GPU.

Aby łatwo przejść każdą z dróg sklonujemy teraz nasze środowisko. Na początek deaktywujemy środowisko i skorzystamy z opcji – -clone:

>conda deactivate

>conda create -n my_env-20 --clone my_env

>conda create -n my_env-gpu --clone my_env

W rezultacie mamy trzy bliźniacze środowiska: my_env, my_env-20, my_env-gpu i oddzielnie na każdym z nich możemy przejść wyżej wymienione instalacje. Wystarczy przełączać się między środowiskami poleceniami deactivate – activate.

Środowisko programistyczne – krok 3A

Aktywujemy środowisko my_env i instalujemy tensorflow w najnowszej wersji dostępnej w repozytorium Anacondy:

>conda activate my_env

>conda install tensorflow

Jeżeli chcemy sprawdzić w jakiej wersji został zainstalowany Python:

>python --version

>>>Python 3.7.4

Jeżeli chcemy sprawdzić wersję tensorflow, to proponuję zrobić to z poziomu Jupyter Notebook (przy okazji sprawdzimy, czy działa poprawnie):

>jupyter notebook

# W notebooku:

import tensorflow as tf

print(tf.__version__)

>>> 1.14.0

Środowisko programistyczne – krok 3B

Przełączmy się teraz na środowisko my_env-20 i spróbujmy zainstalować tensorflow w wersji 2.0. Niestety, w tej sytuacji nie możemy posłużyć się conda, gdyż na dziś (październik 2019) nie ma ona w swoim repozytorium tej wersji tensorflow. Do gry wchodzi zatem inny menedżer pakietów – pip.

>conda deactivate

>conda activate my_env-20

>conda install pip

>>># All requested packages already installed.

Jak widać pip jest już zainstalowany – zapewne był określony jako jedna z zależności przy instalacji bazowych pakietów. Tensorflow instalujemy z wykorzystaniem pip:

>pip install tensorflow

>python --version

>python -c "import tensorflow as tf; print(tf.__version__);"

W rezultacie uzyskamy środowisko z Pythonem w wersji 3.7.4 oraz tensorflow w wersji 2.0.0. Niestety, nie będzie to środowisko idealne. W szczególności cała idea budowy środowiska z wykorzystaniem conda zakłada, że menedżer ten śledzi instalacje i wszystkie zależności, dzięki czemu środowisko jest spójne i można je w dowolnym momencie uzupełniać i aktualizować. Kiedy na scenę wchodzi dodatkowo pip, conda traci częściowo te informacje i traci również pełną kontrolę nad środowiskiem. Generalną zasadą w takiej sytuacji jest, aby instalacje z wykorzystaniem pip wykonywać na samym końcu a po instalacji tensorflow nie dokonywać kolejnych instalacji z użyciem conda, w przeciwnym wypadku środowisko może stać się niezdatne do użytku. Więcej o potencjalnych problemach tej konfiguracji i dobrych praktykach w tym zakresie w tym artykule.

Dodam, że jeszcze jedna istotna różnica między tensorflow zainstalowanym z wykorzystaniem conda vs. pip jest taka, że tensorflow od conda potrafi być do 8 razy bardziej wydajny ze względu na sposób budowania pakietu w repozytorium Anacondy.

Środowisko programistyczne – krok 3C

Ostatnim wariantem budowy środowiska jest takie jego skonfigurowanie, aby możliwe było wykorzystanie mocy jednostki GPU, co dramatycznie przyspiesza obliczenia. Na początek zasadnicza kwestia. Możliwość skorzystania z GPU mają jedynie te osoby, które posiadają kartę graficzną CUDA-enabled. Sprawdzić to można pod tym adresem. Uwaga: wiele osób sprawdza również tu, ale lista ta jest na dziś (październik 2019) nieaktualna. Nie ma na niej np. mojej karty graficznej GeForce GTX 1660 Ti, a bez wątpienia może być ona wykorzystana przez tensorflow.

Sama instalacja z wykorzystaniem condy jest obecnie bajecznie prosta i w niczym nie przypomina mocno skomplikowanego procesu instalacji sprzed kilku miesięcy. Głównie dlatego, że instalując tensorflow-gpu conda samodzielnie dociąga cudatoolkit oraz cudnn, co kiedyś trzeba było mozolnie wykonywać samodzielnie. W pierwszym kroku przełączamy się na odpowiedni klon środowiska, a potem instalujemy pakiet tensorflow-gpu

>conda deactivate

>conda activate my_env-gpu

>conda install tensorflow-gpu

I to tyle

Jarosław Kułak
Jarosław Kułak

Leave a Comment