| 345 | === Les jobs paramétriques === |
| 346 | |
| 347 | Pour soumettre des jobs identiques à tous points sauf pour un seul paramètres |
| 348 | d'exécution, on peut utiliser un job paramétrique. En d'autres termes, plutôt |
| 349 | que de créer un .jdl par job, on crée un seul fichier .jdl dont la soumission |
| 350 | va générer automatiquement la collection de jobs. |
| 351 | |
| 352 | On se sert des attribut JDL suivants : |
| 353 | |
| 354 | * Parameters : un entier ou une liste d'éléments (ex: {a, b, c}, {2, 7, 20}) |
| 355 | * ParameterStart : un entier |
| 356 | * ParameterStep : un entier |
| 357 | |
| 358 | Si Parameters est un entier, le nombre de jobs généré est : |
| 359 | |
| 360 | {{{ |
| 361 | N = (Parameters - ParameterStart) / ParameterStep |
| 362 | }}} |
| 363 | Si on veut que tous les jobs tournent sur le même CE, on peut mettre la ligne |
| 364 | suivante dans le .jdl : |
| 365 | |
| 366 | {{{ |
| 367 | NodesCollocation = true; |
| 368 | }}} |
| 369 | Prenoms un exemple. Nous avons un programme qui doit tourner avec 4 fichiers Input1.txt, Input3.txt, Input4.txt. Plutôt que de créer 4 .jdl, on peut créer le job paramétrique que voici : |
| 370 | |
| 371 | {{{ |
| 372 | [diarra@ipngrid01 ParametricJobs]$ cat ParametricNum.jdl |
| 373 | JobType = "Parametric"; |
| 374 | Executable = "ParametricNum.sh"; |
| 375 | Arguments = "_PARAM_"; |
| 376 | StdOutput = "std.out"; |
| 377 | StdError = "std.err"; |
| 378 | InputSandbox = {"ParametricNum.sh", "Input_PARAM_.txt"}; |
| 379 | OutputSandbox = {"std.out", "std.err", "Output_PARAM.txt" }; |
| 380 | MyProxyServer = "myproxy.grif.fr"; |
| 381 | Parameters = 5; |
| 382 | ParameterStart = 1; |
| 383 | ParameterStep = 1; |
| 384 | #NodesCollocation = true; |
| 385 | #Requirements = RegExp("ipngrid12.*\.fr:2119/jobmanager.*ipno$", other.GlueCEUniqueID); |
| 386 | }}} |
| 387 | |
| 388 | {{{ |
| 389 | [diarra@ipngrid01 ParametricJobs]$ cat ParametricNum.sh |
| 390 | #!/bin/sh |
| 391 | MyParam=$1 |
| 392 | echo "Debut execution du programme" |
| 393 | echo "Parametre = ${MyParam}" |
| 394 | # On peut travailler sur le fichier de Input et de Output |
| 395 | # cat Input${MyParam}.txt > Output${MyParam}.txt |
| 396 | }}} |
| 397 | |
| 398 | Les explications : |
| 399 | |
| 400 | * ParameterStart : c'est la valeur de départ du paramètre |
| 401 | * ParameterStep : c'est la valeur de l'incrément |
| 402 | * Parameters : c'est la valeur maximale |
| 403 | |
| 404 | Dans le .jdl le paramètre courant est contenu dans _PARAM_ . On peut ainsi le |
| 405 | transmettre comme argument ou dans le nom des fichiers comme dans notre exemple. |
| 406 | Dans notre exemple ci-dessus, _PARAM_ vaudra donc successivement 1, 2, 3 puis 4. |
| 407 | |
| 408 | Soumettons le job : |
| 409 | |
| 410 | {{{ |
| 411 | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-submit -a -o jid ParametricNum.jdl |
| 412 | |
| 413 | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
| 414 | ====================== glite-wms-job-submit Success ====================== |
| 415 | The job has been successfully submitted to the WMProxy |
| 416 | Your job identifier is: |
| 417 | |
| 418 | https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
| 419 | The job identifier has been saved in the following file: |
| 420 | /home/diarra/work/ParametricJobs/jid |
| 421 | ========================================================================== |
| 422 | }}} |
| 423 | |
| 424 | Quattres jobs sont soumis en parrallèle comme le montre la commande glite-wms-job-status : |
| 425 | |
| 426 | {{{ |
| 427 | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-status -i jid |
| 428 | |
| 429 | ************************************************************* |
| 430 | BOOKKEEPING INFORMATION: |
| 431 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
| 432 | Current Status: Running |
| 433 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 434 | ************************************************************* |
| 435 | - Nodes information for: |
| 436 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/6zsSfE0nVOVyrWCQPga6fw |
| 437 | Current Status: Running |
| 438 | Status Reason: Job successfully submitted to Globus |
| 439 | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
| 440 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 441 | ************************************************************* |
| 442 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/DFqOECrwMEWmmpZs65oG3Q |
| 443 | Current Status: Running |
| 444 | Status Reason: Job successfully submitted to Globus |
| 445 | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
| 446 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 447 | ************************************************************* |
| 448 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/Ez2DyOUSDxCof9Sh0pQPog |
| 449 | Current Status: Running |
| 450 | Status Reason: Job successfully submitted to Globus |
| 451 | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
| 452 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 453 | ************************************************************* |
| 454 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/FxUda1Mz5DyB7SglhMDBEw |
| 455 | Current Status: Scheduled |
| 456 | Status Reason: Job successfully submitted to Globus |
| 457 | Destination: ipngrid12.in2p3.fr:2119/jobmanager-pbs-ipno |
| 458 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 459 | ************************************************************* |
| 460 | }}} |
| 461 | |
| 462 | A la fin de l'exécution des jobs, quand le status des jobs est "Done", on peut |
| 463 | récupérer les résulat de la collection. |
| 464 | |
| 465 | {{{ |
| 466 | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-status -i jid |
| 467 | |
| 468 | ************************************************************* |
| 469 | BOOKKEEPING INFORMATION: |
| 470 | Status info for the Job : https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
| 471 | Current Status: Done (Success) |
| 472 | Exit code: 0 |
| 473 | Submitted: Fri Jun 6 16:31:52 2008 CEST |
| 474 | ************************************************************* |
| 475 | ... |
| 476 | }}} |
| 477 | |
| 478 | On récupère les résultats : |
| 479 | |
| 480 | {{{ |
| 481 | [diarra@ipngrid01 ParametricJobs]$ glite-wms-job-output -i jid |
| 482 | |
| 483 | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
| 484 | ================================================================================ |
| 485 | JOB GET OUTPUT OUTCOME |
| 486 | |
| 487 | Output sandbox files for the DAG/Collection : |
| 488 | https://grid02.lal.in2p3.fr:9000/7X5T_8XEcxUjDeng1q92Wg |
| 489 | have been successfully retrieved and stored in the directory: |
| 490 | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg |
| 491 | ================================================================================ |
| 492 | }}} |
| 493 | |
| 494 | On voit que le paramètre _PARAM_ a bien été utilisé : |
| 495 | |
| 496 | {{{ |
| 497 | [diarra@ipngrid01 ParametricJobs]$ ls -l /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/* |
| 498 | -rw-r--r-- 1 diarra sii 735 Jun 6 16:40 /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/ids_nodes.map |
| 499 | |
| 500 | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_1: |
| 501 | total 0 |
| 502 | -rw-r--r-- 1 diarra sii 0 Jun 6 16:40 std.err |
| 503 | -rw-r--r-- 1 diarra sii 43 Jun 6 16:40 std.out |
| 504 | |
| 505 | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_2: |
| 506 | total 0 |
| 507 | -rw-r--r-- 1 diarra sii 0 Jun 6 16:40 std.err |
| 508 | -rw-r--r-- 1 diarra sii 43 Jun 6 16:40 std.out |
| 509 | |
| 510 | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_3: |
| 511 | total 0 |
| 512 | -rw-r--r-- 1 diarra sii 0 Jun 6 16:40 std.err |
| 513 | -rw-r--r-- 1 diarra sii 43 Jun 6 16:40 std.out |
| 514 | |
| 515 | /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_4: |
| 516 | total 0 |
| 517 | -rw-r--r-- 1 diarra sii 0 Jun 6 16:40 std.err |
| 518 | -rw-r--r-- 1 diarra sii 43 Jun 6 16:40 std.out |
| 519 | }}} |
| 520 | |
| 521 | Pour le 3ème job par exemple on a bien utilisé 3 comme valeur du paramètre |
| 522 | conformement au paramétrage de notre .jdl : |
| 523 | |
| 524 | {{{ |
| 525 | [diarra@ipngrid01 ParametricJobs]$ cat /home/diarra/JobOutput/diarra_7X5T_8XEcxUjDeng1q92Wg/Node_3/std.out |
| 526 | Debut execution du programme |
| 527 | Parametre = 3 |
| 528 | }}} |
| 529 | |
| 530 | Si Parameters est une liste, les paramètres ParameterStart et ParameterStep ne sont pas nécessaires. |
| 531 | |
| 532 | N.B.: il ne faut pas mettre de "" autour des éléments contenus dans Parameters. |
| 533 | |
| 534 | Si nous avons un exécutable my_sim.exe qui doit faire trois simulations alpha, beta et gamma, le .jdl peut contenir les lignes : |
| 535 | |
| 536 | {{{ |
| 537 | JobType = "Parametric"; |
| 538 | Executable = "my_sim.exe"; |
| 539 | Arguments = "_PARAM_"; |
| 540 | Parameters = {alpha, beta, gamma}; |
| 541 | InputSandbox = {"my_sim.exe", ...}; |
| 542 | ... |
| 543 | }}} |
| 544 | |
| 545 | En soumettant ce job, une collection de 3 jobs sera générée et chaque job fera |
| 546 | une simulation avec un des paramètres contenu dans Parameters. |
| 547 | |
| 548 | |