Utilisation de Dask
Le module daskslurm est disponible via le projet GitLab DaskSlurm (une authentification à GitLab est requise pour accéder à la page du projet). Il permet à un utilisateur de la plateforme Jupyter Notebooks du CC-IN2P3 de distribuer des tâches de calcul sur la plateforme de calcul du CC-IN2P3.
Important
Bien qu’il ouvre une connexion aux serveurs de calcul, Dask N’EST PAS un outil alternatif pour soumettre des jobs sur la plateforme de calcul. Veuillez vous référer à la section dédiée si nécessaire.
Les ressources de calcul utilisées par les tâches Dask seront déduites de la ressource HTC allouée au groupe pour l’année en cours.
Prérequis
Pour activer la fonctionnalité Dask dans votre notebook, le module daskslurm doit être installé dans l’environnement Python utilisé.
Des exemples simples d’utilisation sont disponibles dans le projet Gitlab associé.
Installation dans votre environnement Python
Le module daskslurm est installé dans les deux noyaux scientifiques fournis par défaut. Si vous utilisez un environnement personnalisé, vous devez l’y ajouter. Vous pouvez consulter la page dédiée si besoin pour construire un noyau personnalisé.
Pour installer le module daskslurm :
% export daskslurm_package_registry="https://__token__:gldt-Jziuo-bHMVzJcrPV-8Wz@gitlab.in2p3.fr/api/v4/projects/36268/packages/pypi/simple"
% python -m pip install --extra-index-url "${daskslurm_package_registry}" daskslurm=='0.1.3'
Note
Veuillez vous référer au projet GitLab pour vérifier les versions disponibles, et sélectionner la dernière.
Fonctionnalités
Les dask-workers s’exécuteront sur notre plateforme de calcul. Le client dask, fonctionnant sur votre serveur de notebook, sera connecté au dask-scheduler.
Attention
Les jobs HPC ne seront pas autorisées par la fonctionnalité Dask.
Obtenir un client dask
Pour obtenir un client dask, vous devez attendre que les tâches du dask-worker soient en état RUNNING.
import daskslurm
from daskslurm.cluster import DaskSlurmCluster
my_daskslurm_cluster = DaskSlurmCluster()
Annulation des tâches de calcul
Les tâches de calcul sont automatiquement annulées lors de l’arrêt du serveur de notebook, en sélectionnant File > Log Out.
Néanmoins, il est possible d’annuler les tâches depuis votre notebook Jupyter via la méthode close().
my_daskslurm_cluster = DaskSlurmCluster()
...
my_daskslurm_cluster.close()
Paramètres par défaut (modifiables) relatifs aux tâches de calcul
dask_worker_jobspar défaut :1job, valeur max :3000;
dask_worker_memorypar défaut :3G, valeur max :32G;
dask_worker_corespar défaut :1CPU, valeur max :32;
dask_worker_timepar défaut :02:00:00(2 heures), valeur max :48:00:00(2 jours);Voir la docstring du constructeur
DaskSlurmCluster(...)pour la liste complète des paramètres.
Messages de log
Les STDOUT et STDERR des jobs sont écrits dans le répertoire log/ de l’espace de travail courant. Il y a un fichier par job. Puisque la journalisation est utile pour aider au débogage, un logger prêt à l’emploi est disponible via la méthode get_logger().
# get_logger available as function
from daskslurm.cluster import get_logger
my_logger = get_logger()
my_logger.info("Processing data files ...")
Lorsqu’il est utilisé dans une partie de code Python traitée sur des dask-workers, les messages seront envoyés aux fichiers stdout du job.
Méthode scale()
La méthode scale() permet d’augmenter, ou de diminuer, le nombre de dask-workers sans recréer un DaskSlurmCluster.
my_daskslurm_cluster = DaskSlurmCluster()
# Scale to 10 dask-worker job(s)
my_daskslurm_cluster.scale(jobs=10)
Limitations
Nombre maximum de jobs du dask-worker
Ce nombre est principalement lié à la disponibilité de la plateforme de calcul. Il dépend de plusieurs facteurs tels que l’allocation des ressources pour un groupe, le nombre d’utilisateurs simultanés, la charge globale actuelle de la plateforme de calcul, …
Des tests ont pu être réalisés avec 2500 jobs (soit 2500 dask-workers) pour un seul utilisateur.