11 | | 1. Si ce n'est pas déjà fait, créez un proxy à l'aide de la fonction '''voms-proxy-init'''. |
12 | | 1. La description du job la plus simple possible se trouve dans le fichier ''HelloWorld.jdl''. Le format de ce fichier est le couple clés/valeurs définis. |
13 | | 1. Soumettez le job ''HelloWorld.jdl'' en utilisant la commande '''edg-job-submit'''. Les commandes "workload management" comprennent les proxies VOMS et utilisent la VO indiquée dedans. On peut aussi spécifier la VO avec l'option "-vo". |
14 | | * ''' {{{edg-job-submit HelloWorld.jdl}}} ''' La commande envoie une réponse contenant une URL qui débute par "https", quand elle se passe bien.Cet URL est l'identifiant du job ou"jobid" qui permet de manipuler le job. |
15 | | 1. Vérifiez le statut du job en utilisant la commande '''edg-job-status''' ''(Sur linux on peut utiliser la commande '''watch''' pour exécuter une commande dans une boucle. Pour effectuer la commande '''edg-job-submit''' toutes les 5 secondes, utilisez '''watch --interval 5edg-job-status <jobid>'''. Touchez ctrl-c pour sortir)''. |
16 | | * ''' {{{edg-job-status <jobid>}}} ''' Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)". Combien d'états différents pouvez-vous distinguer? Si le job se termine dans l'état "Aborted", c'est qu'il ne passe pas. On peut trouver plus d'informations avec la commande '''edg-job-get-logging-info'''. Cette commande requiert le jobid. |
17 | | 1. Lorsque le job est terminé ("Done(Success)"), récupérez les données générées à l'aide de la commande '''edg-job-get-output'''. Le répertoire utilisé pour stocker les résultats dépend de la configuration du site. Au LAL, le répertoire est ''~/JobOutput/''. Ce répertoire doit exister; créez-le si nécessaire. |
18 | | * '''{{{edg-job-get-output <jobid> }}}''' La réponse indique le répertoire qui contient les résultats du job. |
19 | | 1. Vérifiez que tout s'est déroulé correctement en consultant les fichiers ''std.out'' et ''std.err''. Le fichier ''std.err'' doit être vide et ''std.out'' doit avoir "Hello World". Cette procédure simple est utilisée pour le suivi de tous les jobs. Il est possible d'utiliser les options "-o", "-i", et "-noint" qui permettent de gérer un plus grand nombre de jobs avec les commandes '''edg-job-*'''. Regardez les informations avec l'option "-help" ou la commande '''man'''. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé. Ce tutorial ne couvre pas cesAPIs. |
| 11 | 1. Si ce n'est pas déjà fait, créez un proxy à l'aide de la fonction `voms-proxy-init`. |
| 12 | 1. La description du job la plus simple possible se trouve dans le fichier `HelloWorld.jdl`. Le format de ce fichier est le couple clés/valeurs définis. |
| 13 | 1. Soumettez le job `HelloWorld.jdl` en utilisant la commande `glite-wms-job-submit`. Les commandes "workload management" comprennent les proxies VOMS et utilisent la VO indiquée dedans. On peut aussi spécifier la VO avec l'option "-vo". |
| 14 | * ` {{{glite-wms-job-submit HelloWorld.jdl}}} ` La commande envoie une réponse contenant une URL qui débute par "https", quand elle se passe bien.Cet URL est l'identifiant du job ou"jobid" qui permet de manipuler le job. |
| 15 | 1. Vérifiez le statut du job en utilisant la commande `glite-wms-job-status` `(Sur linux on peut utiliser la commande `watch` pour exécuter une commande dans une boucle. Pour effectuer la commande `glite-wms-job-submit` toutes les 5 secondes, utilisez `watch --interval 5glite-wms-job-status <jobid>`. Touchez ctrl-c pour sortir)`. |
| 16 | * ` {{{glite-wms-job-status <jobid>}}} ` Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)". Combien d'états différents pouvez-vous distinguer? Si le job se termine dans l'état "Aborted", c'est qu'il ne passe pas. On peut trouver plus d'informations avec la commande `glite-wms-job-get-logging-info`. Cette commande requiert le jobid. |
| 17 | 1. Lorsque le job est terminé ("Done(Success)"), récupérez les données générées à l'aide de la commande `glite-wms-job-output`. Le répertoire utilisé pour stocker les résultats dépend de la configuration du site. Au LAL, le répertoire est `~/JobOutput/`. Ce répertoire doit exister; créez-le si nécessaire. |
| 18 | * `{{{glite-wms-job-output <jobid> }}}` La réponse indique le répertoire qui contient les résultats du job. |
| 19 | 1. Vérifiez que tout s'est déroulé correctement en consultant les fichiers `std.out` et `std.err`. Le fichier `std.err` doit être vide et `std.out` doit avoir "Hello World". Cette procédure simple est utilisée pour le suivi de tous les jobs. Il est possible d'utiliser les options "-o", "-i", et "-noint" qui permettent de gérer un plus grand nombre de jobs avec les commandes `glite-wms-job-*`. Regardez les informations avec l'option "-help" ou la commande `man`. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé. Ce tutorial ne couvre pas cesAPIs. |
26 | | * '''{{{InputSandbox = "HelloWorldScript.sh"; }}}''' Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée. Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne "#!") doit exister dans le "Worker Node". |
27 | | 1. Modifier de nouveau ''HelloWorld.jdl'' de manière à ce qu'il appelle cette fois l'exécutable ''myhostname''. Vous pouvez visualiser la source de cet exécutable, qui est un programme C : ''myhostname.c''. Vous n'avez cette fois pas besoin de définir d'argument. Il faut modifier la ligne "InputSandbox". Exécutez le job et vérifiez que tout fonctionne. Sur quel ordinateur a tourné votre job? |
28 | | 1. L'exécution d'un programme en C compilé n'est pas forcément pratique : l'exécutable peut être d'une grande taille, dépendre de plusieurs fichiers, ou dépendre d'un environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois ''HelloWorld.jdl'' de manière à ce qu'il appelle le script ''buildandrun.sh'', avec pour argument "myhostname". Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment? |
| 26 | * `{{{InputSandbox = "HelloWorldScript.sh"; }}}` Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée. Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne "#!") doit exister dans le "Worker Node". |
| 27 | 1. Modifier de nouveau `HelloWorld.jdl` de manière à ce qu'il appelle cette fois l'exécutable `myhostname`. Vous pouvez visualiser la source de cet exécutable, qui est un programme C : `myhostname.c`. Vous n'avez cette fois pas besoin de définir d'argument. Il faut modifier la ligne "InputSandbox". Exécutez le job et vérifiez que tout fonctionne. Sur quel ordinateur a tourné votre job? |
| 28 | 1. L'exécution d'un programme en C compilé n'est pas forcément pratique : l'exécutable peut être d'une grande taille, dépendre de plusieurs fichiers, ou dépendre d'un environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois `HelloWorld.jdl` de manière à ce qu'il appelle le script `buildandrun.sh`, avec pour argument "myhostname". Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment? |
38 | | * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des ''regular expressions'' avec les chaines de caractères, en utilisant la fonction `RegExp("pattern",attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression : |
| 38 | * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des `regular expressions` avec les chaines de caractères, en utilisant la fonction `RegExp("pattern",attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression : |
76 | | 1. Visualisez le contenu du fichier JDL ''whoami.jdl.'' Lancez le job et récupérez l'output. Visualisez le fichier ''std.out''. Sur quel compte êtes-vous mappé? |
77 | | 1. Visualisez le contenu du script ''envvar.jdl''. Soumettez un job qui lance ce script dans la grille. Regardez la liste des variables. Combien de variables concernent la grille? |
78 | | 1. Ecrivez un job qui liste les versions des logiciels disponibles dans le "Worker Node". On peut utiliser la commande '''rpm''' pour le faire. |
| 76 | 1. Visualisez le contenu du fichier JDL `whoami.jdl.` Lancez le job et récupérez l'output. Visualisez le fichier `std.out`. Sur quel compte êtes-vous mappé? |
| 77 | 1. Visualisez le contenu du script `envvar.jdl`. Soumettez un job qui lance ce script dans la grille. Regardez la liste des variables. Combien de variables concernent la grille? |
| 78 | 1. Ecrivez un job qui liste les versions des logiciels disponibles dans le "Worker Node". On peut utiliser la commande `rpm` pour le faire. |
116 | | Le fichier ''mpi-hooks.sh'' définit les scripts à exécuter avant et après le binaire MPI. Le fichier JDL définit les paramètres comme des nombres de CPU pour le job. |
117 | | 1. Lancez un job avec ''mpi-start-lam.jdl.'' Regardez la sortie du job. S'il a fonctionné correctement, on pourra lire des lignes telles que: |
118 | | * '''{{{Hello world! from processor 3 out of 8 }}}''' |
| 116 | Le fichier `mpi-hooks.sh` définit les scripts à exécuter avant et après le binaire MPI. Le fichier JDL définit les paramètres comme des nombres de CPU pour le job. |
| 117 | 1. Lancez un job avec `mpi-start-lam.jdl` Regardez la sortie du job. S'il a fonctionné correctement, on pourra lire des lignes telles que: |
| 118 | * `Hello world! from processor 3 out of 8` |