Utilisation de Dask

Le paquet dask4in2p3 peut être trouvé dans le projet GitLab Dask4in2p3. Il permet à un utilisateur de la plateforme Jupyter Notebook du CC-IN2P3 d’exécuter une ou plusieurs tâches 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 tel est votre objectif.

La ressource de calcul utilisée par les tâches Dask sera déduite de la ressource HTC allouée au groupe pour l’année en cours.

Prérequis

Pour activer cette fonctionnalité, dask4in2p3 doit être installé à deux endroits différents. D’une part, sur les nœud des serveurs de calcul exécutant les dask-workers, dans un environnement conda dédié, et d’autre part, sur le serveur de notebook Jupyter.

Le paquet dask4in2p3 est déjà installé dans l’image Docker de votre serveur de notebook. Pour plus de détails et des exemples d’utilisation, veuillez vous référer aux projets Gitlab :

Utiliser votre environnement conda

Lorsque vous utilisez votre propre environnement conda, vous devez installer le paquet dask4in2p3. Veuillez vérifier les dépendances du paquet si vous utilisez votre environnement virtuel pour créer un noyau personnalisé.

Attention

Si vous utilisez un noyau personnalisé, il est necessaire de déclarer le chemin vers votre environnement virtuel à la creation de l’objet dask4in2p3 :

# Importing the class from the module (package.module)
from dask4in2p3.dask4in2p3 import Dask4in2p3

# Creating a Dask4in2p3 object  (with a default Python virtual environment)
my_dask4in2p3 = Dask4in2p3(virtual_env="/path/to/python/virtual/env/name")

Vérifier DemoDask4in2p3

Pour installer la dernière version :

% export dask4in2p3_pkg = "git+https://git:oGLyx9HvwybDRxczniFd@gitlab.in2p3.fr/dask_for_jnp/dask4in2p3.git"
% pip install "${dask4in2p3_pkg}".

Pour installer une version spécifique :

% export dask4in2p3_pkg_vxyz="git+https://git:oGLyx9HvwybDRxczniFd@gitlab.in2p3.fr/dask_for_jnp/dask4in2p3.git@vx.y.z"
% pip install "${dask4in2p3_pkg_vxyz}"

vérifiez la liste des tags sur le projet GitLab Dask4in2p3 et remplacez vx.y.z par v1.0.0, par exemple, pour installer à partir du tag 1.0.0.

Fonctionnalités

Le dask-scheduler sera un job s’exécutant sur la partition htc_daemon tandis que les dask-workers s’exécuteront sur une partition dédiée sur la plateforme HTC. Le client dask, fonctionnant sur votre serveur de notebook, sera connecté au dask-scheduler.

../../../_images/jnpdask.png

Attention

Les jobs HPC ou GPU 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.

Note

Pour éviter une longue attente lors de la demande d’un grand nombre de jobs dask-worker, le paramètre dask_worker_wait_for_running_percent vous permet de spécifier le pourcentage de jobs dask-worker en RUNNING à atteindre avant de fournir un dask-client connecté. En fixant la valeur à 0, vous éviterez complètement cette phase d’attente et fournirez un client dask de la manière la plus rapide.

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_dask4in2p3 = Dask4in2p3()
...
# Ceci annulera le dask-scheduler et toutes les tâches du dask-worker
my_dask4in2p3.close()

Limites de temps

La durée de la tâche (option --time pour l’ordonnanceur de jobs) peut être fixée pour les jobs du dask-scheduler et dask-worker respectivement par les paramètres dask_scheduler_time (par défaut 8 heures) et dask_worker_time (par défaut 2 heures).

Le paramètre idle_timeout (par défaut 2 heures), est le temps d’inactivité après lequel le dask-scheduler et par conséquent les dask-workers s’arrêteront.

Paramètres modifiables relatifs aux tâches de calcul

  • dask_scheduler_memory par défaut : 1G, valeur max : 32G ;

  • dask_scheduler_time par défaut : 08:00:00 (8 heures), valeur max : 08:00:00 ;

  • Voir la docstring du Dask4in2p3(...) pour la liste complète.

Valeurs arrêtés liées relatifs aux tâches de calcul

  • 1 CPU (option -ntasks pour l’ordonnanceur de jobs) et 1 CPU par tâche (--cpus-per-task) ;

  • Le groupe de l’utilisateur en tant que compte (--account).

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().

my_logger = my_dask4in2p3.get_logger()
my_logger.info("Traitement des fichiers de données ...")

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.

Limitations

La méthode scale n’est pas disponible

Pour obtenir plus ou moins de tâches, vous devez réexécuter new_client() qui lancera un nouveau dask-scheduler et de nouveaux jobs du dask-worker (après avoir supprimé vos jobs liés à Dask précédemment en cours d’exécution).

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, etc.

Des tests internes ont été fait avec 2500 jobs (= 2500 dask-workers) pour un seul utilisateur.