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:zhmHsyUBFzRTXwFQf8jy@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:zhmHsyUBFzRTXwFQf8jy@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.
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.
dask_worker_jobs
par défaut :1
job, valeur max :3000
;dask_worker_memory
par défaut :3G
, valeur max :32G
;dask_worker_cpus
par défaut :1
CPU, valeur max :32
;dask_worker_time
par défaut :02:00:00
(2 heures), valeur max :08:00:00
;Voir la docstring de la méthode
new_client(...)
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
).
1 CPU par tâche (
--cpus-per-task
) ;1 licence sps (
--licences
) ;Le groupe de calcul de l’utilisateur (
--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.