3.4.7.1.1 : Un exemple simple
Commençons par quelque chose de trivial, histoire de partir sur de bonnes bases.En nous connectant tout d'abord sur MUST ou sur n'importe quel centre de calcul qui utilise HT Condor.
Note : c'est une bidouille que les utilisateurs de MUST connaissent bien, mais il est préférable de le rappeler : il faut lancer les jobs depuis un sous-dossier de /lapp_data et non depuis un home car il ne sera pas vu par condor_submit.
Écrivons le programme suivant, helloworld.sh :
1 2 3 |
#!/bin/sh echo "Hello world Condor !" |
Rendons le exécutable :
chmod a+x helloworld.sh
Nous devons maintenant ecrire une configuration qui nous permettra de spécifier les ressources dont nous aurons besoin pour lancer ce job, dans un fichier helloworld.condor :
1 2 3 4 5 6 7 8 9 10 |
# Nom de l'executable executable=helloworld.sh # On dit a Condor que l'on veut un environnement vide universe=vanilla # On définit un fichier de log log=helloworld.log # Pour transmettre l'environnement au job getenv = True # On veut lancer un seul job queue |
Note : Attention de ne pas mettre de commentaire sur la même ligne qu'une variable, sinon vous aurez une erreur noteOui, le parser de htcondor est bancal.
Ensuite on lance le job avec condor_submit :
condor_submit helloworld.condor Submitting job(s). 1 job(s) submitted to cluster 9405.
La commande condor_q permet de savoir où en est l'exécution de notre job :
condor_q
-- Schedd: lappui7c.in2p3.fr : <134.158.101.172:9618?... @ 01/04/22 12:28:18 OWNER BATCH_NAME SUBMITTED DONE RUN IDLE HOLD TOTAL JOB_IDS paubert ID: 9405 1/4 12:27 _ _ _ 1 1 9405.0
Total for query: 1 jobs; 0 completed, 0 removed, 0 idle, 0 running, 1 held, 0 suspended Total for paubert: 1 jobs; 0 completed, 0 removed, 0 idle, 0 running, 1 held, 0 suspended Total for all users: 1 jobs; 0 completed, 0 removed, 0 idle, 0 running, 1 held, 0 suspended
Si on regarde le contenu du fichier helloworld.log :
cat helloworld.log 000 (9407.000.000) 2022-01-04 14:32:00 Job submitted from host: <134.158.101.172:9618?addrs=134.158.101.172-9618&alias=lappui7c.in2p3.fr&noUDP&sock=schedd_1842_098a> ... 001 (9407.000.000) 2022-01-04 14:32:10 Job executing on host: <134.158.102.51:9618?addrs=134.158.102.51-9618&alias=lapp-wn301.in2p3.fr&noUDP&sock=startd_56748_fc83> ... 006 (9407.000.000) 2022-01-04 14:32:10 Image size of job updated: 1 0 - MemoryUsage of job (MB) 0 - ResidentSetSize of job (KB) ... 005 (9407.000.000) 2022-01-04 14:32:10 Job terminated. (1) Normal termination (return value 0) Usr 0 00:00:00, Sys 0 00:00:00 - Run Remote Usage Usr 0 00:00:00, Sys 0 00:00:00 - Run Local Usage Usr 0 00:00:00, Sys 0 00:00:00 - Total Remote Usage Usr 0 00:00:00, Sys 0 00:00:00 - Total Local Usage 0 - Run Bytes Sent By Job 0 - Run Bytes Received By Job 0 - Total Bytes Sent By Job 0 - Total Bytes Received By Job Partitionable Resources : Usage Request Allocated Cpus : 1 1 Disk (KB) : 1 1 1689535 gpus : 0 Memory (MB) : 0 1024 1100
Job terminated of its own accord at 2022-01-04T13:32:10Z. ...
Le lecteur perspicace se rend bien compte qu'il manque quelque chose. Où est passé notre hello world ?
Pour cela il faut définir le fichier de sortie standard et celui de l'erreur. Le fichier helloworld.condor devient :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Nom de l'executable executable=helloworld.sh # On dit a Condor que l'on veut un environnement vide universe=vanilla # Fichier de sortie standard output=helloworld.output # Fichier d'erreur error=helloworld.error # On définit un fichier de log log=helloworld.log # Pour transmettre l'environnement au job getenv = True # On veut lancer un seul job queue |
On relance notre job :
Submitting job(s). 1 job(s) submitted to cluster 9408.
Quelques secondes plus tard (enfin j'espère), on obtient un résultat :
cat helloworld.output Hello world Condor !
Voilà, nous avons notre hello world.
Plus tard, nous devrons définir combien de CPU/GPU/RAM notre job aura besoin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Nom de l'executable executable=helloworld.sh # On dit a Condor que l'on veut un environnement vide universe=vanilla # Fichier de sortie standard output=helloworld.output # Fichier d'erreur error=helloworld.error # On définit un fichier de log log=helloworld.log # Pour transmettre l'environnement au job getenv = True # Nombre de CPU demande : 1 request_cpus = 4 # Quantité de RAM demandée : 1Go/CPU request_memory = 1024 # Quantité de mémoire disque demandé : 0 (la plus petite taille possible utilisée sur une machine) request_disk = 10240 # On veut lancer un seul job queue |