====== Laboratorium 10 + 11: platforma Ray ======
Ray to zaimplementowana w języku Python platforma do tworzenia i zarządzania rozproszonymi i skalowalnymi aplikacjami.
Platforma Ray wspiera programowanie równoległe i asynchroniczne, dzięki czemu może być wykorzystywana do budowania zaawansowanych aplikacji związanych z uczeniem maszynowym, przetwarzaniem danych oraz symulacjami.
Więcej informacji: [[https://www.ray.io/|Ray]]
Podobnie jak Spark, Ray umożliwia rozproszenie zadań pomiędzy węzły obliczeniowe. Na laboratorium będziemy używać Ray w trybie podobnym do //Spark Standalone//.
===== 1. Budowa obrazów Dockera =====
Zbudujemy dwa obrazy:
* ''ray-data-mining'' - instalacja Ray oraz podstawowych bibliotek uczenia maszynowego dla węzłów obliczeniowych
* ''ray-jupyter'' - obraz dla drivera zawierający jupyter-lab i klika użytecznych bibliotek
** Jeżeli nie chcesz uruchamiać w Dockerze, możesz poprostu zainstalować ray[air] oraz jupyter-lab**
Pobierz {{ :ed:ray.zip |archiwum ray.zip}}
Pliki są rozmieszczone w katalogach, jak na poniższym diagramie
|-ray-data-mining-+
| | Dockerfile
|
|-ray-jupyter-----+
| | Dockerfile
| | ray-lab.ipynb
| | twitter_training.csv
| | twitter_validation.csv
|
==== 1.1 Obraz ray-data-mining ====
**1.** Przejdź do katalogu ''ray-data-mining'' zawierającego poniższy plik ''Dockerfile''.
# image: ray-data-mining
FROM ubuntu:22.04
USER root
RUN set -ex;
RUN apt-get update
RUN apt-get install -y sudo python3 python3-pip
RUN pip3 cache purge
RUN pip3 install numpy
RUN pip3 install scikit-learn
RUN pip3 install scipy
RUN pip3 install pandas
RUN pip3 install matplotlib
RUN pip3 install ray[air]
RUN pip3 install py_spy
RUN rm -rf /var/lib/apt/lists/*
**2.** Wydaj komendę:
docker build -f Dockerfile --tag ray-data-mining .
==== 1.2 Obraz ray-jupyter ====
**1.** Przejdź do katalogu ''ray-jupyter'' zawierającego poniższy plik ''Dockerfile''.
# image: ray-jupyter
FROM ray-data-mining
USER root
RUN pip3 install matplotlib
RUN pip3 install seaborn
RUN pip3 install jupyterlab
RUN pip3 install ipywidgets tqdm
RUN useradd -m -g users ray && \
echo "ray ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ray && \
chmod 0440 /etc/sudoers.d/ray
USER ray
WORKDIR /home/ray/notebooks
**2.** Wydaj komendę:
docker build -f Dockerfile --tag ray-jupyter .
===== 2. Uruchomienie jupyter-lab =====
**1.** Przejdź do katalogu ''ray-jupyter'' i wydaj polecenie
docker run -it --rm -v ".:/home/ray/notebooks" -p 9888:8888 -p 8265:8265 -p 8000:8000 --shm-size=4gb ray-jupyter /bin/bash
Porty:
* 9888 jest zarezerwowany dla jupyter-lab
* 8265 dla Ray Dashboard
* 8000 dla mikroserwisów
Ray intensywnie korzysta z dzielonej pamięci przechowując w niej obiekty w środowisku rozproszonym. Rozwiązanie oparte jest na bibliotekach [[https://arrow.apache.org/|arrow]] i rozszerzeniu [[https://docs.ray.io/en/latest/ray-core/objects/serialization.html#plasma-store|Plasma]]. Stąd opcja dla dzielonej pamięci ''--shm-size=4gb''. W razie potrzeby można ten rozmiar zmniejszyć, np. do 2gb.
**2.** W terminalu bash kontenera wydaj polecenie uruchamiające ''jupyter-lab''
sudo --preserve-env jupyter-lab --ip=0.0.0.0 --allow-root --IdentityProvider.token='ray'
**3.** Otwórz link [[http://localhost:9888/?token=ray]] w oknie przeglądarki i załaduj notatnik ''ray_lab.ipynb''
===== 3. Wykonaj zadania w notatniku =====