wiki:Tutorial/JobSubm

Version 19 (modified by /C=FR/O=CNRS/OU=UMR8607/CN=Michel Jouvin/emailAddress=jouvin@…, 17 years ago) (diff)

--

Soumission des Jobs

Soumission des Jobs

Tous les fichiers nécessaires se trouvent dans le répertoire tutorial\_material que vous avez récupéré.

Suivi d'un job "Hello World"

  1. Si ce n'est pas déjà fait, créez un proxy à l'aide de la fonction voms-proxy-init.
  2. 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.
  3. 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".
    • 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.
  4. 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).
    • 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.
  5. 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.
    • edg-job-get-output <jobid> La réponse indique le répertoire qui contient les résultats du job.
  6. 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 estpossible d'utiliser les options "-o", "-i", et "-noint" qui permettent degé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 gestiondes jobs vers un programme compilé. Ce tutorial ne couvre pas cesAPIs.

Fichier JDL : modification et édition

  1. Modifiez le fichier HelloWorld.jdl de manière à ce qu'il n'appelle plus /bin/echo mais le script HelloWorldScript.sh. Pour cela :
    • la ligne "Executable" doit être "HelloWorldScript.sh",
    • la ligne "Argument" peut rester avec "Hello World",
    • vous devez de plus définir le paramètre "InputSandbox". Tous les fichiers listés dans "InputSandbox" sont transfèrés avec le job. La syntaxe de cette ligne est :
    • 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".
  2. 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 fautmodifier la ligne "InputSandbox". Exécutez le job et vérifiez que tout fonctionne. Sur quel ordinateur a tourné votre job?
  3. 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-iltourné sur le même ordinateur que précédemment?

Note : si la VO que vous utilisez est acceptée par plusieurs CE, il peut être utile d'ajouter la ligne suivante dans votre JDL pour forcer le job à aller sur un CE particulier (au LAL dans l'exemple) :

Requirements = regexp(".*.lal.in2p3.fr.*", other.GlueCEUniqueID)

Pour comprendre les "Requirements" and "Rank"

Il y a deux clés très importantes dans les fichiers JDL :"Requirements" et "Rank". Les valeurs pour les clés Requirementset Rank sont des expressions. Votre job va tourner uniquement sur uneressource qui a une valeur "true" pour l'expression Requirements. S'il y a plusieurs ressources qui ont une valeur "true", le système utilise l'expression Rank pour choisir la meilleure ressource. La ressource qui a la plus grande valeur est choisie. S'il y a plusieurs ressources avec la même valeur Rank, la ressource utilisée est choisie aléatoirement entre ces ressources de même valeur Rank. On utilise la VO "dteam" ici pour voir plus de ressources. La VO vo.lal.in2p3.fr est autorisée uniquement sur les deux sites de la GRIF. Réinitialisez votre proxy avecla commande voms-proxy-init mais n'utilisez pas l'option "--voms".

  1. Plusieurs valeurs peuvent être utilisées pour définir les expressions Requirements et Rank. Par exemple, ajoutez l'expression ci-dessous dans le fichier HelloWorld.jdl pour choisir tous les sites qui permettent à un job d'utiliser plus d'une heure de temps CPU.
    • Requirements = (other.GlueCEPolicyMaxCPUTime > 60); Pour voir la liste des ressources acceptables utilisez la commande edg-job-list-match et l'option "-vo dteam". Combien de ressources autorisent les jobs qui utilisentplus d'une heure de temps CPU? Plus de deux heures? Plus de 10000minutes?
  2. Pour choisir des sites spécifiques, on peut utiliser le nom de la ressource. Pour choisir tous les sites en France, changez la valeur de Requirements comme suit :
    • Requirements = RegExp(".*\.fr:.*",other.GlueCEUniqueID); Le premier argument est une expression régulière. Combien y a-t-il de sites en France? Combien de sites en France autorisent les jobs qui utilisent plus d'une heure de temps CPUs? Modifiez la ligne Requirements pour choisir une ressource. Trouvez la syntaxe correcte pour exclure un site. Une option "-r" existe pour la commande edg-job-submit qui permet de choisir une ressource spécifique. Cependant cette option évite tous le processus "MatchMaking" de Resource Broker et n'ajoute pasle fichier nécessaire (le fichier "BrokerInfo") pour la gestion dedonnées. La technique avec other.GlueCEUniqueID est plus flexibleet plus sûre.
  3. Ajoutez les lignes suivantes pour utiliser la ressource avec le plus grand nombre des CPUs libres:
    • Rank = other.GlueCEStateFreeCPUs; Utilisez la commande edg-job-list-match pour visualiser lerésultat. (L'ordre indique le Rank. La ressource la plus intéressante est la première). Si on utilise la valeur "-other.GlueCEStateFreeCPUs", quelle ressource le Broker va t-il choisir? Que fait le RB si on utilise le valeur "Rank = 1"?

Pour plus d'information, consulter la liste des attributs JDL valides.

L'environnent d'exécution sur le Worker Node

Chaque utilisateur de la grille est mappé dans un compte local pourchaque site. Maintenant l'accès aux ressources locales est contrôlé par les droits de ce compte. Réinitialisez votre proxy avec l'option "--voms vo.lal.in2p3.fr".

  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é?
  2. 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?
  3. Ecrivez un job qui liste les versions des logiciels disponibles dans le "Worker Node". On peut utiliser la commande rpm pour le faire.

Renouveler le proxy en cours de job

Par défaut, la validité d'un proxy est relativement courte, généralement entre 12 et 96h. La durée maximale est fixée par le serveur VOMS de la VO. Si le proxy expire avant la fin du job, il ne sera pas possible de récupérer les résultats. S'il expire avant le début du job, le job échouera.

Pour permettre à un job de s'exécuter sans problème quelque soit son temps d'attente et sa durée, il faut utiliser un service de renouvellement de proxy, appelé MyProxy. Son utilisation est très simple. Il faut d'abord ajouter la ligne suivante dans le JDL du job (la valeur du paramètre doit être un serveur MyProxy acceptant la VO utilisée pour le voms-proxy-init et le resource broker utilisé pour soumettre le job, grid02.lal.in2p3.fr est le serveur MyProxy de GRIF) :

MyProxyServer = "grid02.lal.in2p3.fr";

Après avoir fait le voms-proxy-init et avant de soumettre le job, il faut exécuter la commande myproxy-init, comme suit :

myproxy-init -d grid02.lal.in2p3.fr

La configuration d'un serveur MyProxy détermine les resource brokers autorisés à utiliser le service pour renouveller des proxies. Le serveur MyProxy de GRIF, grid02.lal.in2p3.fr, accepte les demandes de renouvellement en provenance du RB de GRIF, grid09.lal.in2p3.fr.

On peut voir la liste des proxies valides avec la commande myproxy-info et on peut mettre fin au renouvellement du proxy (avant ou pendant l'exécution du job) avec la commande myproxy-destroy. L'option "-d" doit être toujours être utilisée avec l'ensemble des commandes myproxy-*.

Note : la version actuelle de serveur MyProxy ne comprend pas les extensions VOMS dans un proxy. Si l'accès aux services grille par un job requiert un extension VOMS valide (par exemple pour l'accès à un SE), MyProxy ne résoud pas le problème des jobs qui durent (ou restent dans queue) longtemps.

Soumission d'un job MPI

Beaucoup de disciplines utilisent des jobs parallèles. MPI (Message PassingInterface) est un protocole qui permet la communication entre les tâches parallèles. Les jobs MPIs sont supportés dans la grille. La grille supporte deux installations différentes du MPI : LAM, et OpenMPI. Le support de MPICH et MPICH2 seront bientôt disponibles. Le logiciel mpi-start développé par le projet européen int.eu.gridfacilite l'utilisation du MPI dans la grille. L'utilisateur peut définir :

  1. Un script à exécuter avant le binaire MPI (par exemple pour compiler le programme),
  2. Le programme lui-même, et
  3. Un script à exécuter après le binaire MPI (par exemple pour enregistrer les résultats dans un SE).

Le fichier mpi-hooks.sh définit les scripts à exécuter avant et aprèsle binaire MPI. Le fichier JDL définit les paramètres comme des nombres de CPUpour le job.

  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:
    • Hello world! from processor 3 out of 8
  2. Changez le nombre de CPUs utilisé par le job. Vérifiez que le job marche toujours. Fonctionne t-il aussi si vous spécifiez 1000 CPU?

La grille supporte les jobs MPI sur un seul site. MPI avec esclaves surplusieurs sites n'est pas supporté. Le support du MPI évolue très rapidementdans la grille en ce moment. Ceci va se stabiliser dans quelques mois.