{"id":109,"date":"2020-02-17T11:37:19","date_gmt":"2020-02-17T10:37:19","guid":{"rendered":"http:\/\/calculs.univ-cotedazur.fr\/?page_id=109"},"modified":"2025-09-10T16:23:13","modified_gmt":"2025-09-10T14:23:13","slug":"soumettre-et-suivre-un-job","status":"publish","type":"page","link":"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109","title":{"rendered":"Soumettre un job"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_11 counter-hierarchy counter-decimal ez-toc-grey\">\n<nav><ul class=\"ez-toc-list ez-toc-list-level-1\"><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#IMPORTANT_fonctionnement_du_cluster\" title=\"IMPORTANT : fonctionnement du cluster\">IMPORTANT : fonctionnement du cluster<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Parametrer_sa_reservation_de_ressources\" title=\"Param\u00e9trer sa r\u00e9servation de ressources\">Param\u00e9trer sa r\u00e9servation de ressources<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Soumettre_un_job\" title=\"Soumettre un job\">Soumettre un job<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Dans_un_script\" title=\"Dans un script\">Dans un script<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Jobs_OpenMP\" title=\"Jobs OpenMP\">Jobs OpenMP<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Jobs_MPI\" title=\"Jobs MPI\">Jobs MPI<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Jobs_Python\" title=\"Jobs Python\">Jobs Python<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#GPU\" title=\"GPU\">GPU<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#En_mode_interactif\" title=\"En mode interactif\">En mode interactif<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Jupyter\" title=\"Jupyter\">Jupyter<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Sur_le_noeud_de_visualisation\" title=\"Sur le noeud de visualisation\">Sur le noeud de visualisation<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Reserver_des_noeuds_en_mode_exclusif\" title=\"R\u00e9server des n\u0153uds en mode exclusif\">R\u00e9server des n\u0153uds en mode exclusif<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=109#Dependances_entre_jobs\" title=\"D\u00e9pendances entre jobs\">D\u00e9pendances entre jobs<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"IMPORTANT_fonctionnement_du_cluster\"><\/span>IMPORTANT : fonctionnement du cluster<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\"><img loading=\"lazy\" width=\"48\" height=\"48\" class=\"wp-image-2732\" style=\"width: 48px;\" src=\"http:\/\/calculs.univ-cotedazur.fr\/wp-content\/uploads\/2024\/04\/icons8-warning.gif\" alt=\"\"><strong>Vous ne devez<\/strong> <strong>pas ex\u00e9cuter votre code \/ logiciel directement sur la machine de connexion login-hpc.<\/strong><img loading=\"lazy\" width=\"48\" height=\"48\" class=\"wp-image-2732\" style=\"width: 48px;\" src=\"http:\/\/calculs.univ-cotedazur.fr\/wp-content\/uploads\/2024\/04\/icons8-warning.gif\" alt=\"\"><\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">Vous devez travailler sur une machine (=n\u0153ud) de calcul. Pour cela, vous devez d&rsquo;abord demander \u00e0 utiliser une ou plusieurs machines via un ordonnanceur nomm\u00e9 Slurm.<\/p>\n\n\n\n<p>Votre demande peut-\u00eatre r\u00e9sum\u00e9e dans un fichier. Vous devez ensuite lancer la commande <strong>sbatch nom_de_votre_fichier<\/strong> sur login-hpc pour demander une allocation de machine qui ex\u00e9cutera votre code.<\/p>\n\n\n\n<p>Pour les ex\u00e9cutions de courte dur\u00e9e, se r\u00e9f\u00e9rer \u00e0 la partie sur le mode interactif.<\/p>\n\n\n\n<p>Les sections ci-dessous vous expliquent tout en d\u00e9tail.<\/p>\n\n\n\n<h2><span class=\"ez-toc-section\" id=\"Parametrer_sa_reservation_de_ressources\"><\/span>Param\u00e9trer sa r\u00e9servation de ressources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Les r\u00e9servations sur le cluster se font via le&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/slurm.schedmd.com\/\" target=\"_blank\">scheduler Slurm<\/a>, qui met les jobs soumis en file d&rsquo;attente jusqu&rsquo;\u00e0 l&rsquo;allocation des ressources.<\/p>\n\n\n\n<p><strong>Important : lors de la soumission d&rsquo;un job, les informations suivantes sont n\u00e9cessaires :<\/strong><\/p>\n\n\n\n<ul><li><strong>account=<\/strong> le nom du groupe projet qui vous a \u00e9t\u00e9 attribu\u00e9 par le comit\u00e9 scientifique (re\u00e7u par e-mail)<\/li><li><strong>partition= <\/strong>la file sur laquelle votre job sera envoy\u00e9. Par d\u00e9faut, si aucune partition n&rsquo;est sp\u00e9cifi\u00e9e, le job est envoy\u00e9 sur cpucourt. Veillez \u00e0 choisir la bonne partition en fonction des besoins de votre job (temps, ressources). <a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=66\">Voir la description des partitions ici<\/a>.<\/li><li><strong>time=<\/strong> temps (aussi appel\u00e9 walltime) au bout duquel votre job sera arr\u00eat\u00e9 par Slurm (avec time=jj-hh:mm:ss). Le walltime de votre job doit \u00eatre inf\u00e9rieur ou \u00e9gal au walltime maximum d\u00e9fini pour la partition sur laquelle vous soumettez votre job (<a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=66\">voir les limites ici<\/a>).<\/li><li>les ressources que vous souhaitez r\u00e9server (par d\u00e9faut, 1 coeur). Vous pouvez notamment utiliser :<ul><li><strong>-n ou &#8211;ntasks<\/strong>= pour le nombre de t\u00e2ches \u00e0 ex\u00e9cuter. Par d\u00e9faut, Slurm alloue un coeur par t\u00e2che. Si votre job est s\u00e9quentiel (aucune parall\u00e9lisation), d\u00e9finir uniquement ntasks \u00e9gal \u00e0 1. Donner une valeur sup\u00e9rieure \u00e0 1 pour les jobs MPI.<\/li><li><strong>-N ou &#8211;nodes<\/strong>= pour le nombre de noeuds. S&rsquo;il n&rsquo;est pas sp\u00e9cifi\u00e9, l&rsquo;allocation se basera sur les autres options de ressources. Si vous ne sp\u00e9cifiez que le nombre de noeuds, avec la file cpucourt (qui n&rsquo;est pas exclusive) cela r\u00e9servera par d\u00e9faut 1 coeur par noeud r\u00e9serv\u00e9.<\/li><\/ul><ul><li><strong>cpus-per-task=<\/strong> \u00e0 utiliser pour les jobs OpenMP. Cette option sp\u00e9cifie le nombre de threads voulus (\u00e0 associer avec ntasks=1). Slurm alloue un coeur par cpu.<\/li><li><strong>ntasks-per-node= <\/strong>nombre de t\u00e2ches \u00e0 effectuer sur un m\u00eame noeud.<\/li><li><strong>ntasks-per-socket=<\/strong> nombre de t\u00e2ches \u00e0 effectuer sur un m\u00eame processeur. Pour rappel, les noeuds des files cpucourt et cpulong disposent de 2 processeurs de 20 coeurs chacun.<\/li><li><strong>constraint<\/strong>=intel ou amd selon le type de processeur que vous voulez utiliser (<a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=2086\" data-type=\"page\" data-id=\"2086\">plus de d\u00e9tails sur cette page<\/a>)<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"alert alert-danger\"><strong>Attention :<\/strong> m\u00eame si votre job n&rsquo;a pas termin\u00e9 son ex\u00e9cution une fois le walltime atteint, votre job sera automatiquement arr\u00eat\u00e9. Il vous est donc fortement recommand\u00e9 de bien estimer le temps d&rsquo;ex\u00e9cution de votre job et d&rsquo;introduire des points de reprise dans votre code.<\/p>\n\n\n\n<h2><span class=\"ez-toc-section\" id=\"Soumettre_un_job\"><\/span>Soumettre un job<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3><span class=\"ez-toc-section\" id=\"Dans_un_script\"><\/span>Dans un script<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Pour lancer le job : <strong>sbatch nom_de_votre_fichier<\/strong><\/p>\n\n\n\n<p>La liste compl\u00e8te des options lors de la soumission d&rsquo;un job est \u00e0 retrouver&nbsp;<a href=\"https:\/\/slurm.schedmd.com\/sbatch.html\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>.<\/p>\n\n\n\n<p>Exemple de script nomm\u00e9 \u00ab\u00a0myJob\u00a0\u00bb qui permet d&rsquo;ex\u00e9cuter 5 t\u00e2ches (ici une t\u00e2che prendra 1 coeur). Les ressources seront r\u00e9serv\u00e9es pendant 2 heures maximum et le job sera envoy\u00e9 sur la file des jobs courts (cpucourt).<strong> <\/strong><\/p>\n\n\n\n<pre class=\"bash alert\">#!\/bin\/bash<br><br>#SBATCH --job-name=myJob<br>#SBATCH --output=output.txt<br>\n#SBATCH --ntasks=5<br>#SBATCH --time=0-02:00:00\n#SBATCH --account=nom_de_votre_projet<br>#SBATCH --partition=cpucourt<br>\n#SBATCH --mail-user=...@univ-cotedazur.fr<br>#SBATCH --mail-type=BEGIN,END,FAIL<br><br>module purge<br>module load ...<br><br>mes commandes pour ex\u00e9cuter le job ...<br><\/pre>\n\n\n\n<p>Bien que facultatives, les commandes&nbsp;<em>mail-user<\/em>&nbsp;et&nbsp;<em>mail-type<\/em>&nbsp;vous permettent de recevoir par e-mail des notifications sur l&rsquo;\u00e9tat de votre job.<\/p>\n\n\n\n<p>Les modules permettent de modifier de mani\u00e8re dynamique les variables d&rsquo;environnement n\u00e9cessaires \u00e0 l&rsquo;ex\u00e9cution de votre code (essentiellement PATH, LD_LIBRARY_PATH ou encore MAN_PATH), en fonction du module que vous chargez. Pour plus d&rsquo;informations sur l&rsquo;utilisation des modules, <a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=198\">cliquez ici<\/a>. La liste compl\u00e8te des modules install\u00e9s sur le cluster est <a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=207\">consultable ici<\/a>.<\/p>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"Jobs_OpenMP\"><\/span>Jobs OpenMP<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Avec OpenMP, la parall\u00e9lisation ne peut se faire qu&rsquo;entre les diff\u00e9rents threads d&rsquo;un seul et m\u00eame n\u0153ud. Il est donc recommand\u00e9 de d\u00e9finir ntasks \u00e0 1 afin que l&rsquo;ex\u00e9cution du code ne soit lanc\u00e9e qu&rsquo;une seule fois. Le nombre de threads voulus est \u00e0 d\u00e9finir avec cpus-per-tasks, qui correspond au nombre de c\u0153urs qui seront allou\u00e9s au job sur ce n\u0153ud. Voici un exemple :<\/p>\n\n\n\n<pre class=\"bash alert\">#!\/bin\/bash<br><br>#SBATCH --job-name=myJob\n#SBATCH --nodes=1\n#SBATCH --ntasks=1<br>#SBATCH --cpus-per-task=12<br>#SBATCH --time=0-02:00:00\n#SBATCH --account=projectname<br>#SBATCH --partition=cpucourt<br><br>export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK\n<\/pre>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"Jobs_MPI\"><\/span>Jobs MPI<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=367\">Voir cette page.<\/a><\/p>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"Jobs_Python\"><\/span>Jobs Python<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=364\">Voir cette page<\/a> pour cr\u00e9er votre environnement Miniconda.<\/p>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"GPU\"><\/span>GPU<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Pour les jobs utilisant le GPU, il faut obligatoirement rajouter les deux options ci-dessous, <em>gpus <\/em>\u00e9tant le nombre de cartes GPU \u00e0 r\u00e9server<strong>.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#SBATCH --gpus=1\n#SBATCH --partition=gpu<\/code><\/pre>\n\n\n\n<p><strong>Attention, dans certains codes utilisant la notation cuda:0 vous devez absolument remplacer cette notation par cuda:$CUDA_VISIBLE_DEVICES<\/strong> <strong>afin que votre job tourne bien sur la ou les cartes graphiques attribu\u00e9es.<\/strong><\/p>\n\n\n\n<p>Si vous souhaitez pr\u00e9ciser le type carte GPU souhait\u00e9 (ici un GPU H100, A100 ou V100) :<\/p>\n\n\n\n<pre class=\"wp-block-verse\">#SBATCH --gpus=h100:1\nou\n#SBATCH --gpus=a100:1\nou\n#SBATCH --gpus=v100:1<\/pre>\n\n\n\n<p>Pour d\u00e9finir le nombre de c\u0153urs utilisables par carte GPU, vous pouvez rajouter l&rsquo;option suivante :<\/p>\n\n\n\n<pre class=\"wp-block-verse\"><code>#SBATCH <\/code>--cpus-per-gpu=<\/pre>\n\n\n\n<h3><span class=\"ez-toc-section\" id=\"En_mode_interactif\"><\/span>En mode interactif<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Le mode interactif est une alternative au mode \u00ab\u00a0j&rsquo;envoie mon script avec sbatch et je le laisse tourner\u00a0\u00bb. <\/p>\n\n\n\n<p>Ce mode vous permet de lancer un shell interactif sur un n\u0153ud de calcul afin que vous puissiez directement travailler dessus. Il est particuli\u00e8rement adapt\u00e9 aux cas suivants :<\/p>\n\n\n\n<ul><li>vous voulez lancer des ex\u00e9cutions qui durent peu de temps<\/li><li>vous voulez compiler un code<\/li><li>vous voulez d\u00e9sarchiver un fichier<\/li><li>vous utilisez un logiciel avec lequel il vous est n\u00e9cessaire d&rsquo;interagir en temps r\u00e9el<\/li><\/ul>\n\n\n\n<p><strong>Ce mode est id\u00e9al pour toute ex\u00e9cution de serveur type Jupyter.<\/strong><\/p>\n\n\n\n<p>Pour lancer un shell interactif bash pendant 1h sur la partition <em>cpucourt<\/em> :<\/p>\n\n\n\n<pre class=\"bash alert\">srun -A mon_account_Slurm -p cpucourt -t 01:00:00 --pty bash -i<\/pre>\n\n\n\n<p>Dans cet exemple, il n&rsquo;y a pas d&rsquo;option -N ou -n donc un seul c\u0153ur sera r\u00e9serv\u00e9.<\/p>\n\n\n\n<p>Pour un job sur GPU, il faut indiquer le nombre de cartes GPU voulues (ici 1) :<\/p>\n\n\n\n<pre class=\"wp-block-verse\">srun -A mon_account_Slurm -p gpu --gres=gpu:1 -t 01:00:00 --pty bash -i<\/pre>\n\n\n\n<h4><span class=\"ez-toc-section\" id=\"Jupyter\"><\/span>Jupyter<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=2171\" data-type=\"page\" data-id=\"2171\">Voir cette page.<\/a><\/p>\n\n\n\n<h3><span class=\"ez-toc-section\" id=\"Sur_le_noeud_de_visualisation\"><\/span>Sur le noeud de visualisation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><a href=\"https:\/\/calculs.univ-cotedazur.fr\/?page_id=1763\" data-type=\"page\" data-id=\"1763\">Voir cette page.<\/a><\/p>\n\n\n\n<h3><span class=\"ez-toc-section\" id=\"Reserver_des_noeuds_en_mode_exclusif\"><\/span>R\u00e9server des n\u0153uds en mode exclusif<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Le mode par d\u00e9faut sur Azzurra est le mode partag\u00e9.<\/strong> Ce qui signifie que lorsque vous r\u00e9servez un certain nombre de coeurs sur un ou plusieurs noeuds, d\u2019autres jobs que le v\u00f4tre peuvent tourner sur les coeurs restants de ce(s) noeud(s).<\/p>\n\n\n\n<p><strong>En mode exclusif, vous r\u00e9servez tous les c\u0153urs d\u2019un ou plusieurs n\u0153uds. <\/strong>Aucun autre job ne tournera en m\u00eame temps que le v\u00f4tre sur le(s) n\u0153ud(s) r\u00e9serv\u00e9(s). Cependant, m\u00eame si votre job n\u2019utilise pas tous les c\u0153urs d\u2019un m\u00eame n\u0153ud, Slurm consid\u00e8rera que vous avez consomm\u00e9 le temps \u00e9coul\u00e9 pour le job fois le nombre total de c\u0153urs r\u00e9serv\u00e9s. <\/p>\n\n\n\n<p>Ajoutez cette option pour passer en mode exclusif:<\/p>\n\n\n\n<pre class=\"wp-block-verse\">#SBATCH --exclusive (dans un script)\nou\n--exclusive (en ligne de commande)\n<\/pre>\n\n\n\n<h3><span class=\"ez-toc-section\" id=\"Dependances_entre_jobs\"><\/span>D\u00e9pendances entre jobs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Si vous avez besoin d&rsquo;envoyer une s\u00e9rie de jobs, mais qu&rsquo;ils doivent s&rsquo;ex\u00e9cuter les uns apr\u00e8s les autres, vous pouvez inclure des d\u00e9pendances. <\/p>\n\n\n\n<p>Dans l&rsquo;exemple ci-dessous, on envoie un premier job, et lorsque celui-ci est termin\u00e9, un nouveau job pourra d\u00e9buter. L&rsquo;exemple montre un cas avec un job initial puis 5 jobs d\u00e9pendants les uns des autres. Vous pouvez \u00e9videmment l&rsquo;adapter \u00e0 vos besoins. Pensez \u00e0 remplacer code.sh par le programme que vous voulez lancer et adapter les options slurm (account, partition, etc.).<\/p>\n\n\n\n<pre class=\"wp-block-verse\">#!\/bin\/sh\n id=$(sbatch --parsable --account=your_account --partition=cpucourt --job-name=job-initial --ntasks=1 --output=outjob.txt code.sh)\n echo \"job 1 has jobid $id\"\n for n in {1..5}; do\n     id=$(sbatch --parsable --account=your_account --partition=cpucourt --depend=afterany:$id --job-name=iteration-$n --ntasks=1 --output=output-iter-$n.slurmout code.sh);\n     echo \"job $n has jobid $id\"\n done<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>IMPORTANT : fonctionnement du cluster Vous ne devez pas ex\u00e9cuter votre code \/ logiciel directement sur la machine de connexion login-hpc. Vous devez travailler sur une machine (=n\u0153ud) de calcul. Pour cela, vous devez d&rsquo;abord demander \u00e0 utiliser une ou &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":104,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/pages\/109"}],"collection":[{"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=109"}],"version-history":[{"count":122,"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/pages\/109\/revisions"}],"predecessor-version":[{"id":3126,"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/pages\/109\/revisions\/3126"}],"up":[{"embeddable":true,"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=\/wp\/v2\/pages\/104"}],"wp:attachment":[{"href":"https:\/\/calculs.univ-cotedazur.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}