Skip to main content

Tools for composing interdependent tasks on a scheduler (i.e. SLURM)

Project description

scheduler_tools

Build Status Documentation Code Coverage

Tools for composing interdependent tasks on a scheduler (i.e. SLURM)


Setup requirements for launching prefect / dask-distributed on the cluster from your local desktop

On your local system

For whatever project you are working on add scheduler_tools to your dependency list.

conda activate {your_env_name}
pip install -e {your_project_name}
mkdir ~/.aics_dask

create file ~/.aics_dask/ssh.json with contents

{"gateway":{
	"url": "slurm-machine.bettertech.com",
	"user": "flanders",
	"identityfile": "/Users/flanders/ssh/flandersPrivateKey"
	},
    "dashboard_port": 8787,
    "dask_port": 34009
}

On the cluster

conda activate {your_env_name}
pip install -e {your_project_name}
mkdir ~/.aics_dask

programmatically launch remote server and create tunnel

from scheduler_tools import Connector
from pathlib import Path

prefs = {'gateway': {}}
prefs['gateway']['url'] = 'slurm-machine.bettertech.com'
prefs['gateway']['user'] = 'flanders'
prefs['gateway']['identityfile'] = '~/.ssh/id_rsa'
prefs['dask_port'] = 34009
prefs['dashboard_port'] = 8787


dask_prefs = {'cluster_obj_name': {'module': 'dask_jobqueue', 'object': 'SLURMCluster'},
                      'cluster_conf': {},
                      'worker_conf': {},
                      'remote_conf': {}
                      }
dask_prefs['cluster_obj_name'] = {'module': 'dask_jobqueue', 'object': 'SLURMCluster'}

dask_prefs['cluster_conf']['queue'] = 'aics_cpu_general'
dask_prefs['cluster_conf']['cores'] = 2
dask_prefs['cluster_conf']['memory'] = '4GB'
dask_prefs['cluster_conf']['walltime'] = "02:00:00"
dask_prefs['worker_conf']['minimum_jobs'] = 2
dask_prefs['worker_conf']['maximum_jobs'] = 40

dask_prefs['remote_conf']['env'] = 'dask-scheduler' # whatever you named your remote conda env
dask_prefs['remote_conf']['command'] = 'setup_and_spawn.bash'
dask_prefs['remote_conf']['path'] = '/home/<username>/.aics_dask' # where your preferences live for this


conn = Connector(dask_prefs=dask_prefs, pref_path=Path('~/.aics_dask/ssh.json'))
conn.run_command()
conn.stop_forward_if_running()
conn.forward_ports()

programmatically shutdown remote server and tunnel

from scheduler_tools import Connector
from pathlib import Path

conn = Connector(pref_path=Path('~/.aics_dask/ssh.json'))
conn.stop_dask()

cluster creation context example

from scheduler_tools import Connector, default_dask_prefs
from pathlib import Path

dask_prefs = default_dask_prefs()


with Connector(dask_prefs=dask_prefs, prefs=Path('~/.aics_dask/ssh.json')) as conn:
    print(f"local dashboard on: {conn.local_dashboard_port}")
    print(f"local dask port: {conn.local_dask_port}")
    # !!! your code here !!!

Command line interface

CLI start Dask Cluster command

spawn_dask_cluster -s ~/.aics_dask_gpu/ssh.json -q aics_gpu_general -r <remote_env_name>

CLI stop Dask Cluster command

shutdown_dask_cluster -s ~/.aics_dask/ssh.json

Free software: Allen Institute Software License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scheduler_tools-0.1.5.tar.gz (24.1 kB view hashes)

Uploaded Source

Built Distribution

scheduler_tools-0.1.5-py2.py3-none-any.whl (27.9 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page