Dask Cluster erstellen und testen

Ein Dask Cluster kann entweder direkt über die Weboberfläche erstellt werden oder per Script. Hat man den Cluster mit Default-Parametern aus dem Script erstellt, so kann kann man über die URL https://zivjupyterhub.wwu.de/user/{username}/proxy/8787/status den Cluster-Status einsehen. Für die korrekte Funktionsweise von Dask ist es wichtig, passwortlosen SSH-Zugriff auf Palma eingerichtet zu haben. Dafür muss man den Public-Key aus dem JupyterHub ~/.ssh/id_rsa.pub in die Datei ~/.ssh/authorized_keys auf Palma einfügen.

from dask_palma import PalmaCluster
cluster = PalmaCluster(template = dict(nativeSpecification = "--time=1:00:00 -p express --mem=2048"))

Je nach belieben kann man entweder ein paar feste Anzahl von Worker-Jobs starten oder den Cluster dynamisch die Anzahl der Jobs bestimmen lassen.

cluster.start_workers(4)
# alternativ: cluster.adapt(minimum = 2, maximum = 10)

Nun muss man einen Client erstellen und sich mit dem Cluster verbinden. Entweder übergibt man dafür dem Client den Cluster oder die Adresse des Schedulers. Startet man den Scheduler über die Weboberfläche, läuft normalerweise auf Port 8786. Es darf nicht vergessen werden, zuvor das Modul dask_palma zu importieren, da dies die notwendigen Hooks installiert, um per SSH-Tunnel auf Palma zuzugreifen.

import dask_palma
from dask.distributed import Client

client = Client(cluster)
#client = Client("tcp://127.0.0.1:8786")

Um die korrekte Funktionsweise zu garantieren, müssen die Libraries auf dem JupyterHub und Palma übereinstimmen. Dies kann man über den Funktionsaufruf get_versions testen.

client.get_versions(check = True)

Hier ein kleines Programm zum Testen des Dask-Clusters:

def square(x):
  return x ** 2

def neg(x):
  return -x

A = client.map(square, range(10))
B = client.map(neg, A)
total = client.submit(sum, B)
total.result()


This page originated from the notebook dask.ipynb which is attached to this page for safe keeping.