Tutorial: Erste Schritte mit Dask und On-Demand-Clustern in der Cloud
by Sebastian Ernst
Das Python-Paket `dask` wird zunehmend populärer zum einfachen verteilten Rechnen auf Computer-Clustern. Dort, wo früher beispielsweise komplexe Technologien wie MPI noch unausweichlich waren, kann man derlei Dinge mittels `dask` heute oftmals in relativ einfach gehaltenem Python-Code verstecken. Parallelisierung und Verteilung der Rechenlast erfolgt, je nach Anwendung, nahezu automatisch und transparent.
`dask` erlaubt unter anderem zu `numpy.ndarray` kompatible `dask.array`-Objekte sowie zu `pandas.Dataframe` kompatible `dask.dataframe`-Objekte. Während die API im Vergleich zu `numpy` und `pandas` nahezu identisch ist, wird der Speicherinhalt entsprechender Objekte auf ein Cluster verteilt. Berechnungen erfolgen entsprechend ebenfalls verteilt. Dies erlaubt es, riesige Datenmengen durch den Zusammenschluss von ausreichend Computern gleichzeitig im RAM zu halten und auf beliebig vielen CPU-Kernen zu verarbeiten.
Ein durch `dask` selbst allenfalls unzureichend gelöstes Problem ist das eigentliche Deployment. `dask` lokal zu installieren und zu starten ist einfach. Es auf ein Cluster zu bekommen erfordert jedoch nach wie vor einiges an Hintergrundwissen und Zeit. Kommerzielle Dienste wie "Coiled" setzen an dieser Stelle an und bieten über Web-Oberflächen Cluster on-demand an, welche in konventionellen Cloud-Angeboten gehostet werden. Entsprechende Dienste sind jedoch oft deutlich teurer als die tatsächlich verwendeten Cloud-Ressourcen.
In diesem kleinen Tutorial gebe ich am Beispiel meines Python-Paketes `scherbelberg` eine Einführung, wie man in Eigenregie direkt ein Dask-Cluster in der Cloud des Anbieters Hetzner erstellen kann und vom eigenen Computer aus anspricht. Darauf aufbauend unternehme ich mit euch eine Reihe an kleineren Experimenten, um die Fähigkeiten von `dask` zu veranschaulichen.
- https://dask.org
- https://github.com/pleiszenburg/scherbelberg
---
Falls ihr dieses Tutorial live mitmachen wollt, benötigt ihr idealerweise eine Python-Installation auf Basis von Conda-Forge und CPython 3.8 auf Linux. Prinzipiell sollten das meiste jedoch auch auf Windows 10 (ohne WSL) und OS X funktionieren. Falls ihr `dask` nicht nur lokal, sondern auch auf einem echten Cluster testen wollt, benötigt ihr darüber hinaus einen Hetzner-API-Token.
- https://github.com/conda-forge/miniforge#miniforge3
- https://docs.hetzner.cloud/#getting-started