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