305 | | |
306 | | === Les jobs paramétriques === |
307 | | |
308 | | Pour soumettre des jobs identiques en tous points sauf pour un seul paramètre d'exécution, on peut utiliser un job paramétrique : plutôt que de créer un .jdl par job, on crée un seul fichier .jdl dont la soumission va générer automatiquement la collection de jobs. C'est une variante des collections de job décrites précédemment. |
309 | | |
310 | | Les attribut JDL suivants sont utilisés pour définir un job paramétrique : |
311 | | |
312 | | * Parameters : une liste d'éléments (ex: {a, b, c}, {2, 7, 20}) ou un entier représentant la valeur maximale du paramètre |
313 | | * ParameterStart : un entier représentant la valeur minimale du paramètre |
314 | | * ParameterStep : un entier représentant l'incrément du paramètre |
315 | | |
316 | | Si `Parameters` est un entier, le nombre de jobs générés est : |
317 | | {{{ |
318 | | N = (Parameters - ParameterStart) / ParameterStep |
319 | | }}} |
320 | | |
321 | | Pour que tous les jobs tournent sur le même CE, mettre la ligne suivante dans le .jdl : |
322 | | {{{ |
323 | | NodesCollocation = true; |
324 | | }}} |
325 | | |
326 | | __Exemple 1__ : un programme exécuté avec 4 fichiers différents `Input1.txt`, `Input2.txt`, `Input3.txt`, `Input4.txt`. |
327 | | |
328 | | * Créer le script correspondant au programme : |
329 | | {{{ |
330 | | [diarra@ipngrid01 ParametricJobs]$ cat ParametricNum.sh |
331 | | #!/bin/sh |
332 | | MyParam=$1 |
333 | | echo "Debut execution du programme" |
334 | | echo "Parametre = ${MyParam}" |
335 | | # On peut travailler sur le fichier de Input et de Output |
336 | | # cat Input${MyParam}.txt > Output${MyParam}.txt |
337 | | }}} |
338 | | |
339 | | * Créer le JDL suivant (`_PARAM_` vaudra successivement 1, 2, 3 puis 4) : |
340 | | {{{ |
341 | | [diarra@ipngrid01 ParametricJobs]$ cat ParametricNum.jdl |
342 | | JobType = "Parametric"; |
343 | | Executable = "ParametricNum.sh"; |
344 | | Arguments = "_PARAM_"; |
345 | | StdOutput = "std.out"; |
346 | | StdError = "std.err"; |
347 | | InputSandbox = {"ParametricNum.sh", "Input_PARAM_.txt"}; |
348 | | OutputSandbox = {"std.out", "std.err", "Output_PARAM_.txt" }; |
349 | | MyProxyServer = "myproxy.grif.fr"; |
350 | | Parameters = 5; |
351 | | ParameterStart = 1; |
352 | | ParameterStep = 1; |
353 | | #NodesCollocation = true; |
354 | | #Requirements = RegExp("ipngrid12.*\.fr:2119/jobmanager.*ipno$", other.GlueCEUniqueID); |
355 | | }}} |
356 | | |
357 | | * Soumettre le job : |
358 | | {{{ |
359 | | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-submit -a -o jid ParametricNum.jdl |
360 | | }}} |
361 | | |
362 | | * Vérifier le status du job et l'existence de 4 sous-jobs : |
363 | | {{{ |
364 | | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-status -i jid |
365 | | |
366 | | ************************************************************* |
367 | | BOOKKEEPING INFORMATION: |
368 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
369 | | Current Status: Running |
370 | | Submitted: Fri Jun 6 16:31:52 2008 CEST |
371 | | ************************************************************* |
372 | | - Nodes information for: |
373 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/6zsSfE0nVOVyrWCQPga6fw |
374 | | Current Status: Running |
375 | | Status Reason: Job successfully submitted to Globus |
376 | | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
377 | | Submitted: Fri Jun 6 16:31:52 2008 CEST |
378 | | ************************************************************* |
379 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/DFqOECrwMEWmmpZs65oG3Q |
380 | | Current Status: Running |
381 | | Status Reason: Job successfully submitted to Globus |
382 | | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
383 | | Submitted: Fri Jun 6 16:31:52 2008 CEST |
384 | | ************************************************************* |
385 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/Ez2DyOUSDxCof9Sh0pQPog |
386 | | Current Status: Running |
387 | | Status Reason: Job successfully submitted to Globus |
388 | | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
389 | | Submitted: Fri Jun 6 16:31:52 2008 CEST |
390 | | ************************************************************* |
391 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/FxUda1Mz5DyB7SglhMDBEw |
392 | | Current Status: Scheduled |
393 | | Status Reason: Job successfully submitted to Globus |
394 | | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
395 | | Submitted: Fri Jun 6 16:31:52 2008 CEST |
396 | | ************************************************************* |
397 | | }}} |
398 | | |
399 | | * Quand le status de la collection de jobs est `Done`, récupérer l'output des différents jobs en utilisant la procédure habituelle. Comme dans toutes les collections de job, il y a un répertoire par sous-job et le fichier `ids_nodes.map` indique le nom du répertoire associé à chaque sous-job : |
400 | | {{{ |
401 | | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-output -i jid |
402 | | |
403 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
404 | | ================================================================================ |
405 | | JOB GET OUTPUT OUTCOME |
406 | | |
407 | | Output sandbox files for the DAG/Collection : |
408 | | https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
409 | | have been successfully retrieved and stored in the directory: |
410 | | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg |
411 | | ================================================================================ |
412 | | }}} |
413 | | |
414 | | * Visualiser l'output du 3ème job et vérifier qu'il a bien reçu la valeur `3` en paramètre : |
415 | | {{{ |
416 | | [diarra@ipngrid01 ParametricJobs]$ cat /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_3/std.out |
417 | | Debut execution du programme |
418 | | Parametre = 3 |
419 | | }}} |
420 | | |
421 | | |
422 | | __ Exemple 2__ : un programme de simulation; `my_sim.exe` doit faire trois simulations `alpha`, `beta` et `gamma`. Dans ce cas on n'utilise que l'attribut `Parameters` et le JDL sera : |
423 | | {{{ |
424 | | JobType = "Parametric"; |
425 | | Executable = "my_sim.exe"; |
426 | | Arguments = "_PARAM_"; |
427 | | Parameters = {alpha, beta, gamma}; |
428 | | InputSandbox = {"my_sim.exe", ...}; |
429 | | ... |
430 | | }}} |
431 | | |
432 | | ''Note : il ne faut pas mettre de "" autour des éléments contenus dans `Parameters`.'' |