| | 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 | |