{"id":1130,"date":"2021-08-26T18:07:37","date_gmt":"2021-08-26T16:07:37","guid":{"rendered":"http:\/\/cdc.cyu.fr\/?page_id=1130"},"modified":"2025-01-17T16:03:24","modified_gmt":"2025-01-17T15:03:24","slug":"systeme-de-batch","status":"publish","type":"page","link":"https:\/\/cdc.cyu.fr\/index.php\/documentations-main\/systeme-de-batch\/","title":{"rendered":"Le syst\u00e8me de batch"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Sommaire<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#intro\" data-type=\"internal\" data-id=\"#intro\">Introduction<\/a><\/li>\n\n\n\n<li><a href=\"#commandes_usuelles\" data-type=\"internal\" data-id=\"#commandes_usuelles\">Commandes usuelles<\/a><\/li>\n\n\n\n<li><a href=\"#options_soumission\" data-type=\"internal\" data-id=\"#options_soumission\">Options de soumisson<\/a><\/li>\n\n\n\n<li><a href=\"#types_de_jobs\" data-type=\"internal\" data-id=\"#types_de_jobs\">Types de jobs<\/a><\/li>\n\n\n\n<li><a href=\"#requete_consommables\" data-type=\"internal\" data-id=\"#requete_consommables\">Requ\u00eates de consommables<\/a><\/li>\n\n\n\n<li><a href=\"#exemple_soumission\" data-type=\"internal\" data-id=\"#exemple_soumission\">Exemple de soumission<\/a><\/li>\n\n\n\n<li><a href=\"#script_soumission\" data-type=\"internal\" data-id=\"#script_soumission\">Scripts de soumission<\/a><\/li>\n\n\n\n<li><a href=\"#variable_env\" data-type=\"internal\" data-id=\"#variable_env\">Variables d&rsquo;environnement<\/a><\/li>\n<\/ul>\n\n\n\n<p>On trouvera aussi des exemples de scripts de soumission de job <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/#exemples_scripts_jobs\" data-type=\"URL\" data-id=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/#exemples_scripts_jobs\">ici<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"intro\">Introduction<\/h2>\n\n\n\n<p>L&rsquo;ex\u00e9cution de vos codes de calcul ou des programmes disponibles sur Osaka doit imp\u00e9rativement se faire par l&rsquo;interm\u00e9diaire du systeme de batch&nbsp;: l&rsquo;ordonnanceur AGE (<a href=\"https:\/\/www.altair.com\/grid-engine\/\">Altair Grid Engine<\/a>). <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si vous lancez directement vos codes, sans utiliser le syst\u00e8me de batch, le code sera ex\u00e9cut\u00e9 sur le noeud frontal et votre session sera limit\u00e9e \u00e0 un <strong>temps CPU<\/strong> total de <strong>3 heures<\/strong>.<\/p>\n\n\n\n<p>De mani\u00e8re g\u00e9n\u00e9rale, il est pr\u00e9f\u00e9rable de ne pas ex\u00e9cuter de codes directement sur le frontal.<\/p>\n<\/blockquote>\n\n\n\n<p>Le syst\u00e8me de batch orchestre l&rsquo;attribution d&rsquo;un code \u00e0 des ressources mat\u00e9rielles selon deux crit\u00e8res principaux:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la disponibilit\u00e9 (aspect multi-utilisateur)<\/li>\n\n\n\n<li>l&rsquo;ad\u00e9quation mat\u00e9rielle (nombres de processus requis, m\u00e9moire requise, etc&#8230;)<\/li>\n<\/ul>\n\n\n\n<p>Le syst\u00eame de batch se charge de trouver les ressources mat\u00e9rielles disponibles &#8212; et les plus adapt\u00e9es &#8212; pour la charge de travail n\u00e9cessaire \u00e0 l&rsquo;ex\u00e9cution du code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"commandes_usuelles\">Commandes usuelles<\/h2>\n\n\n\n<dl class=\"wp-block-simple-definition-list-blocks-list\">\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">qsub<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Soumission d&rsquo;un job. Voir la sections \u00ab\u00a0options de soumission\u00a0\u00bb pour une description compl\u00e8te.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qstat<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Consulter l&rsquo;\u00e9tat de vos jobs en cours d&rsquo;ex\u00e9cution ou en attente. Cette commande permet aussi de connaitre l&rsquo;identifiant de vos jobs (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">job-ID<\/code>).<br>La commande <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qstat -F -j &lt;job-ID&gt;<\/code> affiche les d\u00e9tails du job s\u00e9lectionn\u00e9.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qacct<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Consulter les propri\u00e9t\u00e9s d&rsquo;un job <strong>termin\u00e9<\/strong>. <br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qacct -j &lt;job-ID&gt;<\/code> ou <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qacct -j &lt;job-name&gt;<\/code>.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qdel<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Annuler un job en attente ou en cours d&rsquo;ex\u00e9cution.<\/dd>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qdel -j &lt;job-ID&gt;<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qrsh<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">D\u00e9marrer une session int\u00e9ractive sur un (ou plusieurs) noeuds de calculs. Utile par exemple pour d\u00e9marrer une session \u00ab\u00a0lourde\u00a0\u00bb avec un logiciel int\u00e9ractif &#8212; comme matlab &#8212; ce qui all\u00e8ge la charge du noeud frontal.<br>Voir les options de soumission pour plus de d\u00e9tails.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qalter<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Modifier les param\u00e8tres de soumission d&rsquo;un job. Si le job est en cours d&rsquo;ex\u00e9cution, la plupart des modifications n\u00e9cessitent le red\u00e9marrage du job. Lors d&rsquo;un red\u00e9marrage, si la modification concerne des param\u00e8tres mat\u00e9riels, le job est possiblement re-soumis dans la liste des jobs en attente. Dans le cas contraire, le job red\u00e9marre sur le mat\u00e9riel d\u00e9j\u00e0 allou\u00e9, sans passer par la liste d&rsquo;attente.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qalter &lt;job-ID&gt; &lt;options-de-soumission&gt;<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qresub<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Red\u00e9marrer un job. Souvent n\u00e9cessaire apr\u00e8s l&rsquo;utilisation de la commande <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qalter<\/code>.<\/dd>\n<\/dl>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Plus de d\u00e9tails sont fournis dans l&rsquo;aide en ligne <em>Osaka_help<\/em> (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">h batch<\/code>) ou via la documentation d&rsquo;AGE (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">man sge_intro<\/code>).<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"options_soumission\">Options de soumission<\/h2>\n\n\n\n<p>Les commandes de soumission de job <code data-enlighter-language=\"asm\" class=\"EnlighterJSRAW\">qsub<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qrsh<\/code>, ainsi que la commande de modification <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qalter<\/code>, acceptent un certain nombre d&rsquo;options permettant de sp\u00e9cifier le type de job, les \u00e9l\u00e9ments consommables n\u00e9cessaires \u00e0 l&rsquo;ex\u00e9cution du job ainsi que la configuration de l&rsquo;environnement d&rsquo;ex\u00e9cution.<\/p>\n\n\n\n<dl class=\"wp-block-simple-definition-list-blocks-list\">\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-N &lt;job-name&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le nom du job. Ce nom est une chaine de caract\u00e8re arbitraire, utilis\u00e9 notamment pour le suivie des jobs (commande <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qstat<\/code>) ou le nom de fichier o\u00f9 sont redirig\u00e9es les sorties standards (voir l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-o<\/code>).<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-N myjob<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-q &lt;type&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le type de job. Les valeurs possibles de <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;type&gt;<\/code> sont : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_short<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_medium<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_long<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">para_long<\/code>. <br>Voir la section <a href=\"#types_de_jobs\" data-type=\"internal\" data-id=\"#types_de_jobs\">type de jobs<\/a> pour plus de d\u00e9tails.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-q seq_medium<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe &lt;parallel_env&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le type de job parall\u00e8le (si le type para_long est s\u00e9lectionn\u00e9). Deux environnements sont disponibles : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">openmp<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">mpi<\/code>. <br>Voir la section <a href=\"#types_de_jobs\" data-type=\"internal\" data-id=\"#types_de_jobs\">types de jobs<\/a> pour plus de d\u00e9tails.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe openmp 4<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-t &lt;n&gt;-&lt;m&gt;:&lt;step&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Lancer plusieurs instances d&rsquo;un m\u00eame jobs (<em>job array<\/em>) avec des param\u00e8tres diff\u00e9rents. Toutes les intances de ce job auront le m\u00eame num\u00e9ro de job (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">job-ID<\/code>) mais auront un num\u00e9ro de task unique (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">task-id<\/code>). Ce num\u00e9ro de task aura une valeur comprise entre les valeurs fournies en argument <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;n&gt;<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;m&gt;<\/code> (incluses), avec un \u00e9cart de <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;step&gt;<\/code>. Les valeurs <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;m&gt;<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;step&gt;<\/code> sont optionnelles et dans ce cas la valeur <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;n&gt;<\/code> indique le nombre total de tasks. <br>Pour sp\u00e9cifier des param\u00e8tres diff\u00e9rents pour chaque instance du job, plusieurs m\u00e9thodologies sont possibles, comme d\u00e9finir un fichier contenant sur chaque ligne les param\u00e8tres de chaque task, ou d\u00e9finir autant de fichier contenant les param\u00e8tres que de tasks, etc&#8230; On trouvera <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/job-script-array\/\" data-type=\"page\" data-id=\"1041\">ici<\/a> des exemples concrets.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-t 100<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l &lt;arg&gt;=&lt;value&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Requ\u00eate de consommables. Le terme consommable d\u00e9signe tout \u00e9l\u00e9ment hardwares ou software dont l&rsquo;utilisation ne peut \u00eatre partag\u00e9 simultan\u00e9ment avec un autre job. Les consommables les plus courants sont la m\u00e9moire RAM avec l&rsquo;argument <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">m_mem_free<\/code>, les jetons de licence en nommant directement le logiciel, ou les acc\u00e9l\u00e9rateurs GPU .<br>Voir la section <a href=\"#requete_consommables\" data-type=\"internal\" data-id=\"#requete_consommables\">requ\u00eate de consommables<\/a> pour plus de d\u00e9tails.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l m_mem_free=1G,matlab=1<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-wd &lt;path&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le dossier de travail (working directory) o\u00f9 sera ex\u00e9cut\u00e9 le job.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-wd \/u\/cdc\/bmary\/myproject\/thisjob<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-cwd<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Utiliser le r\u00e9pertoire courant au moment de la soummission du job comme dossier de travail o\u00f9 sera ex\u00e9ctut\u00e9 le job.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-cwd<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-j &lt;y|n&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier si les sorties standard et les sorties d&rsquo;erreur doivent (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">y<\/code>) ou non (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">n<\/code>) \u00eatre fusionn\u00e9es.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-j y<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-i &lt;\/path\/to\/a\/file&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le chemin vers un fichier qui alimentera l&rsquo;entr\u00e9e standard du programme. Par d\u00e9faut, l&rsquo;entr\u00e9e standard pointe vers <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">\/dev\/null<\/code>.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-i \/u\/cdc\/bmary\/myproject\/inputs\/thisinput<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-o &lt;\/path\/to\/a\/file&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier le chemin vers un fichier qui r\u00e9coltera la sortie standard. Par d\u00e9faut, ce fichier est plac\u00e9 dans le dossier de travail (voir <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-wd<\/code> et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-cwd<\/code>) et est nomm\u00e9 selon la syntaxe <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;job-name&gt;.o&lt;job-ID&gt;<\/code> (ou <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;job-name&gt;.o&lt;job-ID&gt;.&lt;task-ID&gt;<\/code> si le job est un <em>array job<\/em>). Si le fichier sp\u00e9cifi\u00e9 n&rsquo;a pas de chemin absolu, c&rsquo;est le chemin relatif depuis le dossier de travail qui sera utilis\u00e9.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-o myjob.out<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-M &lt;email-address&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier l&rsquo;adresse email de l&rsquo;utilisateur afin de lui communiquer des informations. Plusieurs adresses peuvent \u00eatre renseign\u00e9e, en les chainant avec des virgules. Voir l&rsquo;option -m pour r\u00e9guler la nature des messages envoy\u00e9s.<br><strong>Attention<\/strong> : Seules les adresses affili\u00e9es \u00e0 l&rsquo;universit\u00e9 sont accept\u00e9es.<br>Exemples : <br><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-M prenom.nom@cyu.fr<\/code><br><code>-M adresse1@cyu.fr,adresse2@u-cergy.fr,adresse3@esti.fr<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-m &lt;values&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Sp\u00e9cifier les types d&rsquo;\u00e9v\u00e8nements d\u00e9clenchant l&rsquo;envoie d&rsquo;un message \u00e0 l&rsquo;utilisateur sp\u00e9cifi\u00e9 avec l&rsquo;option -M. Les valeurs accept\u00e9s peuvent se cumuler.<br><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">b<\/code> : (begin) envoie d&rsquo;un message lorsque le job d\u00e9marre.<br><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">e<\/code> : (end) envoie d&rsquo;un message lorsque le job se termine.<br><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">s<\/code> : (suspend) alerter lorsque le job est suspendu (par l&rsquo;utilisateur ou l&rsquo;administrateur).<br><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">a<\/code> : (abort) alerter lors d&rsquo;une annulation ou d&rsquo;un red\u00e9marrage (action de l&rsquo;administrateur ou probl\u00e8me mat\u00e9riel).<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\"><br>n<\/code> : (no) ne pas envoyer de messages.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-m ae<\/code><\/dd>\n<\/dl>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"types_de_jobs\">Types de jobs<\/h2>\n\n\n\n<p>Il est primordial de sp\u00e9cifier le type de vos job, car les types ont une influence sur la s\u00e9lection mat\u00e9rielle.<\/p>\n\n\n\n<p>On distingue deux grands types de jobs, eux m\u00eames subdivis\u00e9s en sous-cat\u00e9gories:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Jobs s\u00e9quentiels<\/strong> : job n&rsquo;utilisant qu&rsquo;un seul processus (ce qui \u00e9quivaut \u00e0 un seul coeur CPU sur Osaka). En fonction du temps de calcul, on distingue plusieurs sous-cat\u00e9gories. Les cat\u00e9gories avec un temps de calcul court sont prioritaires sur les cat\u00e9gories avec un temps de calcul plus long. Au dela du temps de calcul allou\u00e9 dans chaque cat\u00e9gorie, le job est stopp\u00e9.\n<ul class=\"wp-block-list\">\n<li><strong>Job s\u00e9quentiel court<\/strong> (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_short<\/code>) : le temps de calcul est inf\u00e9rieur \u00e0 1 h en temps CPU, et inf\u00e9rieur \u00e0 10h en temps r\u00e9el. <\/li>\n\n\n\n<li><strong>Job s\u00e9quentiel m\u00e9dium<\/strong> (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_medium<\/code>) :  le temps de calcul est inf\u00e9rieur \u00e0 24 h en temps CPU.<\/li>\n\n\n\n<li><strong>Job s\u00e9quentiel long<\/strong> (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">seq_long<\/code>) : le temps de calcul est inf\u00e9rieur \u00e0 45 jours en temps CPU.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Jobs parall\u00e8les<\/strong> (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">para_long<\/code>) : jobs utilisant plusieurs processus de calcul en m\u00eame temps. Les code de calcul parall\u00e8le sont plus rapides en temps r\u00e9el que les codes s\u00e9quentiels pour un m\u00eame temps CPU total. On distingue plusieurs sous-cat\u00e9gories de jobs parall\u00e8les en fonction de la gestion de la m\u00e9moire.\n<ul class=\"wp-block-list\">\n<li><strong>Job parall\u00e8le openMP<\/strong> \u00e0 m\u00e9moire partag\u00e9e : tous les processus on acc\u00e8s \u00e0 une m\u00eame m\u00e9moire virtuelle, ce qui impose que tous les processus soient ex\u00e9cut\u00e9s sur un unique noeud de calcul.<\/li>\n\n\n\n<li><strong>Job parall\u00e8le MPI<\/strong> \u00e0 m\u00e9moire distribu\u00e9e : chaque processus poss\u00e8de sa propre m\u00e9moire, distincte des autres processus, ce qui implique que chaque processus peut \u00eatre ex\u00e9cut\u00e9 sur un noeud de calcul diff\u00e9rent.<\/li>\n\n\n\n<li><strong>Job parall\u00e8le hybride<\/strong> : les deux types de parall\u00e9lisation pr\u00e9c\u00e9dents sont utilis\u00e9s.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Dans le cas d&rsquo;un job parall\u00e8le, le type de job parall\u00e8le est pr\u00e9cis\u00e9 \u00e0 l&rsquo;aide de l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe<\/code>, suivit de l&rsquo;un des arguments suivants :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">openmp &lt;N&gt;<\/code>, avec <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;N&gt;<\/code> le nombre de processus parall\u00e8les demand\u00e9s.<br>Exemple pour un job openm avec 4 processus : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe openmp 4<\/code><\/li>\n\n\n\n<li><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">mpi&lt;X&gt; &lt;Y&gt;<\/code>, avec <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;X&gt;<\/code> le nombre de processus par noeud de calcul, et <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;Y&gt;<\/code> le nombre de processus total.<br>Exemple pour un job MPI avec 4 processus r\u00e9partis sur 4 noeuds de calcul : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe mpi1 4<\/code><br>Exemple pour un job MPI avec 6 processus r\u00e9partis sur 3 noeuds de calcul : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-pe mpi2 6<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"requete_consommables\">Requ\u00eates de consommables<\/h2>\n\n\n\n<p>Les requ\u00eate de consommables sont sp\u00e9cifi\u00e9s \u00e0 l&rsquo;aide de l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l<\/code>, suivie d&rsquo;un couple <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;argument&gt;=&lt;valeur&gt;<\/code>.<\/p>\n\n\n\n<p>Deux syntaxes sont possibles : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La <strong>syntaxe concise<\/strong>, qui enchaine les arguments-valeurs en les s\u00e9parant par des virgules : <code data-enlighter-language=\"apache\" class=\"EnlighterJSRAW\">-l arg1=value1,arg2=value2<\/code> ;<\/li>\n\n\n\n<li>La <strong>syntaxe \u00e9clat\u00e9e<\/strong>, qui fait autant d&rsquo;appels \u00e0 l&rsquo;option -l qu&rsquo;il y a de couples arguments-valeurs :<code data-enlighter-language=\"apache\" class=\"EnlighterJSRAW\"> -l arg1=value1 -l arg2=value2<\/code>. <\/li>\n<\/ul>\n\n\n\n<dl class=\"wp-block-simple-definition-list-blocks-list\">\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">m_mem_free=&lt;value&gt;&lt;unit&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">R\u00e9servation de la m\u00e9moire RAM. La valeur est un entier ou un nombre decimal, suivit d&rsquo;une unit\u00e9 parmi <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">K<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">M<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">G<\/code><br><strong>Attention<\/strong> : la r\u00e9servation m\u00e9moire est obligatoire.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l m_mem_free=1.5G<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">ib=&lt;qdr|edr&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Choix du pool de noeuds de calcul en fonction du r\u00e9seau infiniband.  Les deux pools disponibles sont le pool <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qdr<\/code> (40 Gb\/s) et le pool <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">edr<\/code> (100 Gb\/s). Voir la <a href=\"https:\/\/cdc.cyu.fr\/index.php\/calculateur-main\/\" data-type=\"page\" data-id=\"122\">section d\u00e9di\u00e9e<\/a> d\u00e9crivant l&rsquo;architecture d&rsquo;Osaka.<br><strong>Attention<\/strong> : cette option est obligatoire pour les jobs parallel MPI.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l ib=edr<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">gpu=&lt;number&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Acc\u00e8s \u00e0 un acc\u00e9l\u00e9rateur GPGPU (General Purpose GPU). La valeur attendue est un entier pr\u00e9cisant le nombre d&rsquo;acc\u00e9l\u00e9rateur demand\u00e9 (un seul suffit !).<br><strong>Attention<\/strong> : l&rsquo;acc\u00e8s au acc\u00e9l\u00e9rateurs GPU n\u00e9cessite une demande explicite aupr\u00e8s des administrateurs (ticket ou email).<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l gpu=1<\/code><\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">&lt;logiciel&gt;=&lt;number&gt;<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Acc\u00e8s \u00e0 un logiciel propri\u00e9taire, comme <em>Comsol<\/em> ou <em>Matlab<\/em>, ou acc\u00e8s \u00e0 une toolbox <em>Matlab<\/em>. La liste des logiciels concern\u00e9s, ainsi que le nombre de jetons de licences disponibles pour chaque logiciel sont accessibles via la commande <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">lmstat<\/code>. <br>On trouvera des exemples concrets de scripts de soumission impliquant un logiciel \u00e0 jeton <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/job-script-matlab\/\" data-type=\"page\" data-id=\"1048\">ici<\/a>.<br>Exemple : <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l matlab=1,image_tbx=1<\/code><\/dd>\n<\/dl>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"exemple_soumission\">Exemples de soumission de job<\/h2>\n\n\n\n<p>Voici un exemple de commande de soumission de job :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">qsub -N test1 -q seq_medium -l m_mem_free=1G -m n -cwd .\/myprogram<\/pre>\n\n\n\n<p>Analysons les caract\u00e9ristiques de ce job:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le job s&rsquo;appelle test1 (option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-N test1<\/code>).<\/li>\n\n\n\n<li>Il s&rsquo;agit d&rsquo;un job s\u00e9quentiel dont la dur\u00e9e en temps CPU est inf\u00e9rieure \u00e0 24 h (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-q seq_medium<\/code>).<\/li>\n\n\n\n<li>1 Go de m\u00e9moire RAM sont r\u00e9serv\u00e9s pour son ex\u00e9cution (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-l m_mem_free=1G<\/code>).<\/li>\n\n\n\n<li>Aucun messages ne seront envoy\u00e9s \u00e0 l&rsquo;utilisateur (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-m n<\/code>)<\/li>\n\n\n\n<li>Le r\u00e9pertoire courant d&rsquo;o\u00f9 est lanc\u00e9 cette commande servira de dossier de travail (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-cwd<\/code>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"script_soumission\">Script de soumission de job<\/h2>\n\n\n\n<p>Comme le nombre d&rsquo;options \u00e0 fournir pour d\u00e9crire correctement un job est relativement \u00e9lev\u00e9, une commande de soumission devient vite pesante. Dans la pratique, on comprend qu&rsquo;il n&rsquo;est pas viable de proc\u00e9der ainsi. C&rsquo;est pourquoi il est plus efficace de grouper les options dans un fichier &#8212; ou script. De plus, il est alors possible d&rsquo;y inclure d&rsquo;autres commandes, comme le chargement des <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/modules\/\" data-type=\"page\" data-id=\"1106\">modules<\/a> n\u00e9cessaires, la d\u00e9finition de variables d&rsquo;environnement ou d&rsquo;autres traitements sp\u00e9cifiques. Encapsuler toutes ces informations dans un script augmente grandement la lisibilit\u00e9 du processus, et permet d&rsquo;archiver &#8212; et de r\u00e9utiliser &#8212; l&rsquo;ensemble de ces commandes. <\/p>\n\n\n\n<p>Un script de batch doit se plier \u00e0 une syntaxe simple, mais sp\u00e9cifique. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les options \u00e0 fournir \u00e0 la commande <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qsub<\/code> du syst\u00e8me de batch doivent \u00eatre \u00e9crits sous la forme d&rsquo;un commentaire shell &#8212; avec un <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">#<\/code> au d\u00e9but de la ligne &#8212; suivi du caract\u00e8re dollar (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">$<\/code>). Le syst\u00e8me de batch reconna\u00eetra comme option de soumission toute ligne commen\u00e7ant par ces deux caract\u00e8res <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">#$<\/code>. <\/li>\n\n\n\n<li>Une ligne commen\u00e7ant par <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">#<\/code> sans le caract\u00e8re dollar sera consid\u00e9r\u00e9 comme un commentaire classique.<\/li>\n\n\n\n<li>Toutes les autres lignes seront lues comme un script <em>bash<\/em>.<\/li>\n<\/ul>\n\n\n\n<p>Pour exemple, voici un script de job reprenant les \u00e9l\u00e9ments de l&rsquo;exemple de la section pr\u00e9c\u00e9dente.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#$ -N test1\n#$ -q seq_medium\n#$ -l m_mem_free=1G\n#$ -m n\n#$ -cwd\n\n# Ceci est un commentaire\n\n.\/myprogram<\/pre>\n\n\n\n<p>Pour soumettre le job associ\u00e9 \u00e0 un tel script, on utilise le nom du script comme unique argument de la commande qsub :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">>> qsub test1.job<\/pre>\n\n\n\n<p>On trouvera de nombreux exemples dans la section <a href=\"https:\/\/cdc.cyu.fr\/index.php\/supports-main\/#exemples_scripts_jobs\">exemples de scripts de jobs<\/a> ou dans l&rsquo;aide en ligne <em>osaka_help<\/em> avec la commande <code>h script<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"variable_env\">Variables d&rsquo;environnement<\/h2>\n\n\n\n<p>Certaines valeurs sp\u00e9cifi\u00e9s dans les options et arguments pr\u00e9sent\u00e9s ci-avant peuvent \u00eatre r\u00e9cup\u00e9r\u00e9s dans des variables d&rsquo;environnement d\u00e9clar\u00e9es par le yst\u00e8me de batch. Elles peuvent \u00eatre utiles dans vos scripts. Voici la liste des plus utiles (vous trouverez une liste compl\u00e8te dans le <em>man<\/em> de <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">qsub<\/code>).<\/p>\n\n\n\n<dl class=\"wp-block-simple-definition-list-blocks-list\">\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">JOB_ID<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Num\u00e9ro du job donn\u00e9 par le syst\u00e8me de batch.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">JOB_NAME<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Nom du job tel que sp\u00e9cifi\u00e9 avec l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-N<\/code>.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_TASK_ID<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Num\u00e9ro de <em>task<\/em> pour un <em>job array<\/em>, tel que d\u00e9clar\u00e9 avec l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-t<\/code>.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_TASK_FIRST<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_TASK_LAST<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_TASK_STEPSIZE<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Respectivement, num\u00e9ro de task min, num\u00e9o de task max, interval de num\u00e9rotation entre les tasks.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">NSLOTS<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Nombre de slots parall\u00e8les allou\u00e9s. <br>Pour un job parall\u00e8le openMP, il s&rsquo;agit du nombre threads, correspondant au nombre de coeurs CPU allou\u00e9s.<br>Pour un job parall\u00e8le MPI, il s&rsquo;agit du nombre de process MPI, correspondant au nombre de coeurs CPU allou\u00e9s.<br>Pour un job hybride, il s&rsquo;agit du nombre de process MPI. Le nombre de coeurs CPU correspont au nombre de process MPI multipli\u00e9 par le nombre de threads openMP.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">NHOSTS<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Nombre de noeuds de calcul utilis\u00e9s par un job parall\u00e8le.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">HOSTNAME<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Nom du noeud de calcul sur lequel est ex\u00e9cut\u00e9 le job (ou l&rsquo;une des intances du job).<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_CWD_PATH<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Chemin absolu vers le dossier d&rsquo;o\u00f9 le job a \u00e9t\u00e9 lanc\u00e9.<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_STDIN_PATH<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_STDOUT_PATH<\/code>, <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">SGE_STDERR_PATH<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Chemin absolus vers, respectivement, l&rsquo;entr\u00e9e standard (option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-i<\/code>), la sortie standard (option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-o<\/code>), l&rsquo;erreur standard (voir l&rsquo;option <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">-j<\/code>).<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\"><code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">TMPDIR<\/code><\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details\">Chemin absolu vers le dossier temporaire allou\u00e9 sur le(s) noeud(s) de calcul.<\/dd>\n<\/dl>\n","protected":false},"excerpt":{"rendered":"<p>Sommaire On trouvera aussi des exemples de scripts de soumission de job ici. Introduction L&rsquo;ex\u00e9cution de vos codes de calcul ou des programmes disponibles sur Osaka doit imp\u00e9rativement se faire par l&rsquo;interm\u00e9diaire du systeme de batch&nbsp;: l&rsquo;ordonnanceur AGE (Altair Grid &hellip; <a href=\"https:\/\/cdc.cyu.fr\/index.php\/documentations-main\/systeme-de-batch\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":124,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1130","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1130"}],"version-history":[{"count":110,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1130\/revisions"}],"predecessor-version":[{"id":1867,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/1130\/revisions\/1867"}],"up":[{"embeddable":true,"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/pages\/124"}],"wp:attachment":[{"href":"https:\/\/cdc.cyu.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}