From c68d2cc61ed3b1b2880083be13e47e7c84309a28 Mon Sep 17 00:00:00 2001 From: plstonge Date: Thu, 29 Feb 2024 02:16:25 +0000 Subject: [PATCH] deploy: ad85a670e23112f56778d514b137b909e4d07ec5 --- 2-resources.html | 257 ++++++++++++++++++----------------- _images/win-task-manager.png | Bin 58923 -> 0 bytes _sources/2-resources.ipynb | 248 ++++++++++++++++----------------- searchindex.js | 2 +- 4 files changed, 258 insertions(+), 249 deletions(-) delete mode 100644 _images/win-task-manager.png diff --git a/2-resources.html b/2-resources.html index d492b06..fa28fc4 100644 --- a/2-resources.html +++ b/2-resources.html @@ -352,7 +352,7 @@

Contents

  • Goal - Writing a Proper Job Script for Slurm
  • Analysing Compute Jobs on Your Computer
  • @@ -413,21 +413,23 @@

    Use Resources Wisely

    Goal - Writing a Proper Job Script for Slurm#

    -

    Le principal objectif de ce chapitre est de vous permettre d’analyser -vos besoins dans le but de déterminer les ressources nécessaires -pour vos tâches de calcul. -Chaque tâche de calcul est définie par un script de tâche destiné à -l’ordonnanceur Slurm. -Typiquement écrit en commandes Bash, on y retrouve :

    +

    The main goal of this chapter is to teach you how to +analyze your compute tasks in order to determine the +required resources to run tasks on compute clusters. +Each compute task will eventually be defined +in a job script to be submitted to the +Slurm scheduler. +Typically written in Bash commands, job scripts have:

      -
    • Le shebang en toute -première ligne. Par exemple : #!/bin/bash

    • -
    • Les options #SBATCH en entête pour les besoins de la tâche. Les -options en entête seront lues par la commande de soumission de tâche -sbatch

    • -
    • Chargement des modules requis

    • -
    • Les commandes Bash qui seront exécutées automatiquement sur des -processeurs réservés pour la tâche

    • +
    • A shebang +at the first line. For example: #!/bin/bash

    • +
    • A header of #SBATCH options for the job’s requirements. +These options will be parsed at submission time by the +sbatch command

    • +
    • Modules +loaded before running the compute task

    • +
    • The Bash commands that will be executed +automatically on the reserved resources for the job

    For example : scripts/mpi-hello.sh

    cat scripts/mpi-hello.sh
    @@ -448,70 +450,73 @@ 

    Goal - Writing a Proper Job Script for Slurm

    Analysing Compute Jobs on Your Computer#

    -

    Lorsqu’une tâche est en cours d’exécution sur votre ordinateur, -vous pouvez surveiller différentes métriques :

    +

    While a compute task is running on your computer, +you can monitor different metrics:

      -
    • Utilisation CPU (et GPU, s’il y a lieu)

    • -
    • Mémoire-vive utilisée

    • -
    • Accès au stockage

    • +
    • CPU usage (and GPU usage, if applicable)

    • +
    • Memory usage

    • +
    • Storage access (IOPS, bandwidth)

    In Windows#

      -
    • Gestionnaire des tâches Windows

    • -
    • Pour le faire afficher, on le trouve de deux manières :

      +
    • Windows Tasks Manager

    • +
    • You can find it in two ways:

        -
      • Chercher Gestionnaire des tâches dans le menu Démarrer

      • -
      • Raccourcis clavier Ctrl+Alt+Suppr

      • +
      • Look for Task Manager in the Start menu, or

      • +
      • With the keyboard shortcut Ctrl+Alt+Delete

    -

    Aperçu du gestionnaire des tâches Windows

    +

    Windows 11 Task Manager screenshot +Image from Wikimedia

    -
    -

    In Mac OS#

    +
    +

    In macOS#

      -
    • Moniteur d’activité

    • -
    • Pour le faire afficher :

      +
    • Activity Monitor

    • +
    • To open the Activity Monitor:

        -
      • Démarrer l’application à partir des Applications et Utilitaires de Mac OS

      • -
      • Sinon, utiliser le raccourcis clavier Commande+Espace et taper les -premières lettres de “Moniteur d’activité” pour pouvoir sélectionner -cette application

      • +
      • Start it from the Applications and Utilities directory in macOS

      • +
      • Otherwise, use the Command+Space shortcut and start typing +the first letters of “Activity Monitor” to find and select it

    -

    Overview of Mac OS Activity Monitor

    +

    Overview of Mac OS Activity Monitor +Image from Apple Support

    In Linux#

    -

    Dans un terminal Unix, on peut utiliser :

    +

    In a Linux terminal, you can use:

    -

    Capture de top

    +

    Screenshot of top

    -

    Capture de htop

    +

    Screenshot of htop

    Analysing Compute Jobs on Clusters#

    -

    On commence par se connecter au noeud frontal de la grappe :

    +

    As a first step, we need to connect to the cluster:

    ssh login1
     ...
     

    Notes :

    To submit a job script, we use the sbatch command :

    @@ -611,7 +616,7 @@

    (Demo) Checking Resources Used by a Running GPU Job

    Jobs Analysis via Cluster Portals#

    -

    Béluga et Narval ont chacun un portail pour l’analyse des tâches :

    +

    Béluga and Narval each have a great portal for job monitoring:

    • https://portail.beluga.calculquebec.ca/

    • https://portail.narval.calculquebec.ca/

    • @@ -684,34 +692,34 @@

      Jobs Analysis via Cluster Portals#

      Target Efficiency of a Job#

      -

      À coût d’essais et erreurs avec une tâche de petite taille, -la cible pour :

      +

      When testing with a short and small job, the target for:

        -
      • Le calcul est une efficacité d’au moins 90%

        +
      • The compute efficiency is at least 90%

          -
        • Tâches séquentielles : il faut optimiser les accès aux données

          +
        • Serial tasks: may need to optimize the access to the data

            -
          • Utiliser adéquatement les différents types de stockage

          • +
          • Use each type of storage spaces adequately (see chapter 4)

        • -
        • Tâches parallèles : il existe un nombre maximal de processeurs -à utiliser pour respecter ce seuil :

          +
        • Parallel tasks: there is a maximum number +of CPU cores that can reach this target:

      • -
      • La mémoire-vive est une consommation de l’ordre de 80% -de ce qui est demandé à l’ordonnanceur Slurm

      • +
      • The memory usage should be around 80% +of what was requested to the Slurm scheduler

      -

      Rappel - vous pouvez obtenir ces pourcentages via les commandes -sacct -X (surtout pour obtenir les numéros de tâches) et seff. -Les valeurs à considérer sont :

      +

      Reminder - you can get these percentages with the commands +sacct -X (mainly to get job IDs) and seff. +The important values are:

        -
      • CPU Utilized et CPU Efficiency

      • -
      • Memory Utilized et Memory Efficiency

      • +
      • CPU Utilized and CPU Efficiency

      • +
      • Memory Utilized and Memory Efficiency

      Exercise - Job Efficiency#

      @@ -727,81 +735,75 @@

      Exercise - Job Efficiency

      Extrapolating Required Compute Resources#

      -

      La question qui se pose : -en augmentant la ou les dimensions du problème, quelles devraient -être la durée du calcul et la consommation en mémoire-vive? -Une analyse détaillée du code -n’est pas nécessaire pour déterminer le type de calcul qui est fait :

      +

      If you increase the size of the problem, what +should be the expected compute time and memory usage? +A detailed code analysis +is not necessary to make that approximation:

        -
      • Vous pouvez mesurer le temps d’exécution (avec la -commande time) en fonction de la taille du problème. -En extrapolant les résultats, il serait possible de prévoir -le comportement du programme sur une grappe de calcul.

      • +
      • You can measure the execution time (with the +time command) in function of the size of the problem. +By extrapolating the results, you should be able to +predict the program behavior on the compute cluster.

      time -p sleep 2
       
        -
      • Vous pouvez considérer le format des données en entrées pour -deviner l’ordre du calcul principal.

      • +
      • You can also considerate the shape of the input data +in order to guess the order of the main calculation.

      Data Size and Number of Files to Process#

      -

      En plus du temps de calcul et de l’espace mémoire, il faut aussi -considérer l’utilisation du stockage. Les valeurs à tenir compte :

      +

      On top of the compute time and memory usage, you must also considerate +the storage space usage. Values to take into account are:

        -
      1. La quantité en octets (ou Go)

        +
      2. The quantity in bytes (or GB)

          -
        • Peut servir à estimer l’utilisation de la mémoire-vive

        • -
        • Tenir compte de la taille du stockage local rapide pour -optimiser les accès aux fichiers

        • +
        • Can be used to estimate the memory usage

        • +
        • Take into account the size limit of the +local storage for optimized file access

      3. -
      4. Le nombre de fichiers à traiter

        +
      5. The number of files to process

          -
        • Considérer le parallélisme de données

        • -
        • Multiplier la durée moyenne du traitement d’un fichier par -le nombre de fichiers pour estimer la durée d’une tâche

        • -
        • Multiplier la taille moyenne des fichiers par leur nombre -pour estimer l’espace en mémoire-vive (par exemple : des images)

        • -
        • Utiliser le stockage rapide pour optimiser les accès -aléatoires et nombreux

        • +
        • Data parallelism could be a solution

        • +
        • Multiply the average run time needed to process a file by +the total number of files to get an approximate job time limit

        • +
        • Multiply the average size of files by their number to +estimate the space needed in memory (example: loading images)

        • +
        • Use the local storage to optimize +repetitive and random accesses

      -

      Pour obtenir le nombre de fichiers et la taille totale :

      +

      To get the number of files and the total size:

        -
      • Sous Windows : dans l’explorateur Windows (raccourcis clavier : Windows + E)

        +
      • In Windows: in Windows Explorer (keyboard shorcut: Windows + E)

          -
        • Sélectionner un dossier ou plusieurs fichiers

        • -
        • Bouton droit de la souris -> Propriétés

        • +
        • Select one directory or multiple files

        • +
        • Right-click -> Select Properties

      Windows data properties

        -
      • Sous Mac OS : dans Finder

        +
      • In macOS: with Finder

          -
        • Sélectionner un dossier ou plusieurs fichiers

        • -
        • Bouton droit de la souris -> Get Info

        • -
        • Autrement : avec l’affichage Par liste

          - -
        • +
        • Select one directory or multiple files

        • +
        • Right-click -> Select Get Info

        -
      • In Linux and on compute clusters :

        +
      • In Linux and on compute clusters:

        • The graphical environment can provide similar tools, but it depends on the Linux distribution and the chosen desktop

        • The command du -sb DIRECTORY (s for total sum, b for apparent size in bytes) recursively computes and displays the total size of used space in bytes. The apparent size is -important to consider while transferring or backuping the data

        • +important to considerate while transferring or backuping the data

        • The command find DIRECTORY | wc -l recursively counts and displays the number of files and subdirectories

        @@ -1110,28 +1112,29 @@

        Comparison of Compute Clusters

        Key Points#

          -
        • Prévoir les paramètres d’une tâche Slurm

          +
        • Estimate Slurm job parameters

            -
          • Nombre de processeurs (CPU) et de noeuds de calcul

          • -
          • Nombre d’accélérateurs (GPU)

          • -
          • Quantité de mémoire-vive (RAM)

          • -
          • Temps du calcul (JJ-H:M ou H:M:S)

          • +
          • Number of CPU cores and compute nodes

          • +
          • Number of accelerators (GPU)

          • +
          • Memory (RAM)

          • +
          • Compute time (DD-H:M or H:M:S)

        • -
        • Différents outils pour surveiller les ressources utilisées

          +
        • Different tools to monitor used resources

            -
          • time et autres bibliothèques de mesure du temps écoulé

          • +
          • time and other libraries to measure elapsed time

          • top, htop, nvtop, nvidia-smi

          • sacct, seff

          • -
          • du -sb, find | wc -l et autres outils du système d’exploitation

          • +
          • du -sb, find | wc -l and other operating system tools

        • -
        • On vise une efficacité de 90% et plus pour les tâches CPU

          +
        • Target efficiency of at least 90% for CPU jobs

            -
          • L’accélération avec un accélérateur (GPU) doit être significative (>5x)

          • +
          • The acceleration with a GPU should be significant (>5x)

        • -
        • Le choix de la grappe dépend des besoins de chaque type de calcul

        • +
        • The choice of a cluster depends on +the needs of each type of compute tasks

      @@ -1203,7 +1206,7 @@

      Key PointsGoal - Writing a Proper Job Script for Slurm
    • Analysing Compute Jobs on Your Computer
    • diff --git a/_images/win-task-manager.png b/_images/win-task-manager.png deleted file mode 100644 index 35e39f3e12ed7105019912e112975a1a4089c806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58923 zcmbTe2UJtfw=Yfy1w?uW0VxWINRt*sno^}#0V&eEbdpe{mw*M4Dn&XX9i)U_q)G2Z zdJ7#A5|X^|{oQ-t|GxEmZ{78uwN6fQX3m+JJ^SpvKYQ;<>?>_G%G)fr@$m2{U%pV* z!^0y$;0_Zq65JI=zz0g)3ExLg?K$3$5w>024eH&gF!a*N)5 z6y~W@jotnl$oF+=Xu0!k&C9l&%apGUk7P${GL}~4P#LBf8YX~ceD0g#yj1AguLcZN zDA(~Y)KbQkNq~j4>Gwi2$cU6$$pe2`!6X-a5UGUDO`WnE9%0DMZF!RK@d4DhqRZNe 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 !ZhVIPs3SGmfp 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 diff --git a/_sources/2-resources.ipynb b/_sources/2-resources.ipynb index 036a56c..2579895 100644 --- a/_sources/2-resources.ipynb +++ b/_sources/2-resources.ipynb @@ -22,20 +22,22 @@ "metadata": {}, "source": [ "## Goal - Writing a Proper Job Script for Slurm\n", - "Le principal objectif de ce chapitre est de vous permettre d'analyser\n", - "vos besoins dans le but de **déterminer les ressources nécessaires**\n", - "pour vos tâches de calcul.\n", - "Chaque tâche de calcul est définie par un **script de tâche** destiné à\n", - "[l'ordonnanceur Slurm](https://slurm.schedmd.com/documentation.html).\n", - "Typiquement écrit en commandes Bash, on y retrouve :\n", - "* Le [shebang](https://fr.wikipedia.org/wiki/Shebang) en toute\n", - " première ligne. Par exemple : `#!/bin/bash`\n", - "* Les options `#SBATCH` en entête pour les besoins de la tâche. Les\n", - " options en entête seront lues par la commande de soumission de tâche\n", - " [`sbatch`](https://slurm.schedmd.com/sbatch.html)\n", - "* [Chargement des modules](https://docs.alliancecan.ca/wiki/Utiliser_des_modules) requis\n", - "* Les commandes Bash qui seront exécutées automatiquement sur des\n", - " processeurs réservés pour la tâche" + "The main goal of this chapter is to teach you how to\n", + "analyze your compute tasks in order to **determine the\n", + "required resources** to run tasks on compute clusters.\n", + "Each compute task will eventually be defined\n", + "in a **job script** to be submitted to the\n", + "[Slurm scheduler](https://slurm.schedmd.com/documentation.html).\n", + "Typically written in Bash commands, job scripts have:\n", + "* A [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix))\n", + " at the first line. For example: `#!/bin/bash`\n", + "* A header of `#SBATCH` options for the job's requirements.\n", + " These options will be parsed at submission time by the\n", + " [`sbatch` command](https://slurm.schedmd.com/sbatch.html)\n", + "* [Modules](https://docs.alliancecan.ca/wiki/Utiliser_des_modules/en)\n", + " loaded before running the compute task\n", + "* The Bash commands that will be executed\n", + " automatically on the reserved resources for the job" ] }, { @@ -67,11 +69,11 @@ "metadata": {}, "source": [ "## Analysing Compute Jobs on Your Computer\n", - "Lorsqu'une tâche est en cours d'exécution sur votre ordinateur,\n", - "vous pouvez surveiller différentes métriques :\n", - "* Utilisation CPU (et GPU, s'il y a lieu)\n", - "* Mémoire-vive utilisée\n", - "* Accès au stockage" + "While a compute task is running on your computer,\n", + "you can monitor different metrics:\n", + "* CPU usage (and GPU usage, if applicable)\n", + "* Memory usage\n", + "* Storage access (IOPS, bandwidth)" ] }, { @@ -79,27 +81,28 @@ "metadata": {}, "source": [ "### In Windows\n", - "* [Gestionnaire des tâches Windows](https://fr.wikipedia.org/wiki/Gestionnaire_des_t%C3%A2ches_Windows)\n", - "* Pour le faire afficher, on le trouve de deux manières :\n", - " * Chercher *Gestionnaire des tâches* dans le menu Démarrer\n", - " * Raccourcis clavier Ctrl+Alt+Suppr\n", + "* [Windows Tasks Manager](https://en.wikipedia.org/wiki/Task_Manager_(Windows))\n", + "* You can find it in two ways:\n", + " * Look for *Task Manager* in the Start menu, or\n", + " * With the keyboard shortcut Ctrl+Alt+Delete\n", "\n", - "![Aperçu du gestionnaire des tâches Windows](images/win-task-manager.png)" + "![Windows 11 Task Manager screenshot](https://upload.wikimedia.org/wikipedia/en/a/ae/Windows_Task_Manager_screenshot.png)\n", + "_Image from Wikimedia_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### In Mac OS\n", - "* [Moniteur d’activité](https://support.apple.com/fr-ca/guide/activity-monitor/actmntr1001/mac)\n", - "* Pour le faire afficher :\n", - " * Démarrer l'application à partir des *Applications et Utilitaires* de Mac OS\n", - " * Sinon, utiliser le raccourcis clavier Commande+Espace et taper les\n", - " premières lettres de \"Moniteur d'activité\" pour pouvoir sélectionner\n", - " cette application\n", + "### In macOS\n", + "* [Activity Monitor](https://support.apple.com/en-ca/guide/activity-monitor/actmntr1001/mac)\n", + "* To open the Activity Monitor:\n", + " * Start it from the *Applications and Utilities* directory in macOS\n", + " * Otherwise, use the Command+Space shortcut and start typing\n", + " the first letters of \"Activity Monitor\" to find and select it\n", "\n", - "![Overview of Mac OS Activity Monitor](https://help.apple.com/assets/63FD404271C3B6058F265722/63FD404A71C3B6058F265732/en_US/07d6bea6dc9944ae58f6581297196752.png)" + "![Overview of Mac OS Activity Monitor](https://help.apple.com/assets/63FD404271C3B6058F265722/63FD404A71C3B6058F265732/en_US/07d6bea6dc9944ae58f6581297196752.png)\n", + "_Image from Apple Support_" ] }, { @@ -107,19 +110,21 @@ "metadata": {}, "source": [ "### In Linux\n", - "Dans un terminal Unix, on peut utiliser :\n", - "* La [commande `top`](https://man7.org/linux/man-pages/man1/top.1.html) (`q` pour quitter)\n", + "In a Linux terminal, you can use:\n", + "* The [`top` command](https://man7.org/linux/man-pages/man1/top.1.html)\n", + " (Press Q to quit)\n", "\n", - "![Capture de top](images/linux-top.png)" + "![Screenshot of top](images/linux-top.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "* La [commande `htop`](https://man7.org/linux/man-pages/man1/htop.1.html) (`q` pour quitter)\n", + "* The [`htop` command](https://man7.org/linux/man-pages/man1/htop.1.html)\n", + " (Press Q to quit)\n", "\n", - "![Capture de htop](images/linux-htop.png)" + "![Screenshot of htop](images/linux-htop.png)" ] }, { @@ -127,19 +132,19 @@ "metadata": {}, "source": [ "## Analysing Compute Jobs on Clusters\n", - "On commence par **se connecter au noeud frontal** de la grappe :\n", + "As a first step, we need to **connect to the cluster**:\n", "```Bash\n", "ssh login1\n", "...\n", "```\n", "**Notes** :\n", - "* Pour accéder aux grappes de calcul en production, il vaut mieux\n", - " utiliser [une paire de clés SSH](https://docs.alliancecan.ca/wiki/Using_SSH_keys_in_Linux/fr).\n", - "* [L'authentification multifacteur](https://docs.alliancecan.ca/wiki/Multifactor_authentication/fr)\n", - " est maintenant offerte sur les grappes nationales.\n", - " [Vidéo d'introduction ici](https://www.youtube.com/watch?v=ciycOUbchl8).\n", - "* Avec votre accès par défaut, vous avez un compte de calcul\n", - " `def-*` de base qui vous permet de lancer des tâches." + "* To connect to the national systems in production, you better use a\n", + " [pair of SSH keys](https://docs.alliancecan.ca/wiki/Using_SSH_keys_in_Linux)\n", + "* [Multifactor authentication](https://docs.alliancecan.ca/wiki/Multifactor_authentication)\n", + " is now available on national clusters. See the\n", + " [introductory video here](https://www.youtube.com/watch?v=qNsUsZ73HP0)\n", + "* With your default access, you can use at least one\n", + " `def-*` account, which allows you to submit compute jobs" ] }, { @@ -271,7 +276,7 @@ "salloc --cpus-per-task=4 --mem=8000M --time=0:15:0 --gres=gpu:1\n", "```\n", "\n", - "* For Windows and Mac OS, you can install proprietary software\n", + "* For Windows and macOS, you can install proprietary software\n", " that allows real time visualization of the GPU utilization.\n", " Please check the documentation of the GPU manufacturer for details\n", "* In Linux, with an NVIDIA GPU, we first have the\n", @@ -337,19 +342,22 @@ "metadata": {}, "source": [ "#### Comparing the Speed of CPU Cores and a GPU\n", - "Avant d'utiliser massivement les GPUs d'une grappe de calcul, il faut\n", - "tout d'abord que l'application ou l'algorithme puisse démontrer une\n", - "\"bonne performance\" en utilisant plusieurs processeurs en parallèle.\n", + "Before using GPUs on compute clusters, your application\n", + "and its main algorithm must at first demonstrate a \"good\n", + "performance\" while using regular CPU cores in parallel.\n", "\n", - "Quelques définitions :\n", - "* **Temps écoulé** = temps d'exécution total que l'on perçoit et non le temps CPU\n", - "* **Accélération** = (temps avec un processeur) / (temps avec parallélisme)\n", - "* **Efficacité** = (Accélération) / (nombre de processeurs)\n", + "A few definitions:\n", + "* **Elapsed time** = total perceived execution time, not the CPU time\n", + "* **Acceleration** = (Elapsed time with `1` CPU core) /\n", + " (Elapsed time with `N` CPU cores)\n", + "* **Efficiency** = (Acceleration) / `N`\n", "\n", - "Le coût d'un noeud GPU étant cinq fois supérieur à celui d'un noeud\n", - "régulier, l'utilisation d'un seul GPU doit permettre une accélération\n", - "d'au moins cinq fois (5x) la vitesse de huit (8) à douze (12) processeurs.\n", - "* **Accélération** = (temps avec 8 à 12 processeurs) / (temps avec un accélérateur)" + "The acquisition cost of a GPU node being about five times\n", + "the cost of a regular CPU node, the use of a single GPU\n", + "must accelerate an application at least five times (5x)\n", + "the speed of 8 to 16 cores in parallel to be worth it.\n", + "* **GPU Acceleration** = (time with 8 to 16 CPU cores) /\n", + " (time with a single GPU) >= 5" ] }, { @@ -357,7 +365,7 @@ "metadata": {}, "source": [ "### Jobs Analysis via Cluster Portals\n", - "Béluga et Narval ont chacun un portail pour l'analyse des tâches :\n", + "Béluga and Narval each have a great portal for job monitoring:\n", "* [https://portail.beluga.calculquebec.ca/](https://portail.beluga.calculquebec.ca/)\n", "* [https://portail.narval.calculquebec.ca/](https://portail.narval.calculquebec.ca/)" ] @@ -368,23 +376,23 @@ "source": [ "## Estimating Required Compute Resources\n", "### Target Efficiency of a Job\n", - "À coût d'essais et erreurs avec une **tâche de petite taille**,\n", - "la cible pour :\n", - "* **Le calcul** est une **efficacité d'au moins 90%**\n", - " * Tâches séquentielles : il faut **optimiser les accès aux données**\n", - " * Utiliser adéquatement les différents types de stockage\n", - " * Tâches parallèles : il existe un **nombre maximal de processeurs**\n", - " à utiliser pour respecter ce seuil :\n", - " * Principe de [scalabilité](https://docs.alliancecan.ca/wiki/Scalability/fr)\n", - " et [Loi d'Amdahl](https://fr.wikipedia.org/wiki/Loi_d%27Amdahl)\n", - "* **La mémoire-vive** est une consommation **de l'ordre de 80%**\n", - " de ce qui est demandé à l'ordonnanceur Slurm\n", + "When testing with a **short and small job**, the target for:\n", + "* The **compute efficiency** is **at least 90%**\n", + " * Serial tasks: may need to **optimize the access to the data**\n", + " * Use each type of storage spaces adequately (see chapter 4)\n", + " * Parallel tasks: there is a **maximum number\n", + " of CPU cores** that can reach this target:\n", + " * [Scalability](https://docs.alliancecan.ca/wiki/Scalability)\n", + " principle and the\n", + " [Amdahl's law](https://en.wikipedia.org/wiki/Amdahl%27s_law)\n", + "* The **memory usage** should be around **80%**\n", + " of what was requested to the Slurm scheduler\n", "\n", - "**Rappel** - vous pouvez obtenir ces pourcentages via les commandes\n", - "`sacct -X` (surtout pour obtenir les numéros de tâches) et `seff`.\n", - "Les valeurs à considérer sont :\n", - "* `CPU Utilized` et `CPU Efficiency`\n", - "* `Memory Utilized` et `Memory Efficiency`" + "**Reminder** - you can get these percentages with the commands\n", + "`sacct -X` (mainly to get job IDs) and `seff`.\n", + "The important values are:\n", + "* `CPU Utilized` and `CPU Efficiency`\n", + "* `Memory Utilized` and `Memory Efficiency`" ] }, { @@ -407,23 +415,22 @@ "metadata": {}, "source": [ "### Extrapolating Required Compute Resources\n", - "La question qui se pose :\n", - "**en augmentant la ou les dimensions du problème**, quelles devraient\n", - " être la durée du calcul et la consommation en mémoire-vive?\n", - "[Une analyse détaillée du code](https://fr.wikipedia.org/wiki/Analyse_de_la_complexit%C3%A9_des_algorithmes)\n", - "n'est pas nécessaire pour déterminer le type de calcul qui est fait :\n", + "**If you increase the size of the problem**, what\n", + "should be the expected compute time and memory usage?\n", + "[A detailed code analysis](https://en.wikipedia.org/wiki/Analysis_of_algorithms)\n", + "is not necessary to make that approximation:\n", "\n", - "* Vous pouvez **mesurer le temps d'exécution** (avec la\n", - " commande `time`) en fonction de la taille du problème.\n", - " En extrapolant les résultats, il serait possible de prévoir\n", - " le comportement du programme sur une grappe de calcul.\n", + "* You can **measure the execution time** (with the\n", + " `time` command) in function of the size of the problem.\n", + " By extrapolating the results, you should be able to\n", + " predict the program behavior on the compute cluster.\n", "\n", "```Bash\n", "time -p sleep 2\n", "```\n", "\n", - "* Vous pouvez considérer le **format des données en entrées** pour\n", - " deviner l'ordre du calcul principal. " + "* You can also considerate the **shape of the input data**\n", + " in order to guess the order of the main calculation." ] }, { @@ -431,30 +438,30 @@ "metadata": {}, "source": [ "### Data Size and Number of Files to Process\n", - "En plus du temps de calcul et de l'espace mémoire, il faut aussi\n", - "considérer **l'utilisation du stockage**. Les valeurs à tenir compte :\n", - "1. La **quantité** en octets (ou Go)\n", - " * Peut servir à **estimer** l'utilisation de la mémoire-vive\n", - " * Tenir compte de la taille du **stockage local rapide** pour\n", - " optimiser les accès aux fichiers\n", - "1. Le **nombre** de fichiers à traiter\n", - " * Considérer le **parallélisme de données**\n", - " * **Multiplier la durée moyenne** du traitement d'un fichier par\n", - " le nombre de fichiers pour estimer la durée d'une tâche\n", - " * **Multiplier la taille moyenne** des fichiers par leur nombre\n", - " pour estimer l'espace en mémoire-vive (par exemple : des images)\n", - " * Utiliser le stockage rapide pour **optimiser les accès**\n", - " aléatoires et nombreux" + "On top of the compute time and memory usage, you must also considerate\n", + "the **storage space usage**. Values to take into account are:\n", + "1. The **quantity** in bytes (or GB)\n", + " * Can be used to **estimate** the memory usage\n", + " * Take into account the size limit of the\n", + " **local storage** for optimized file access\n", + "1. The **number** of files to process\n", + " * **Data parallelism** could be a solution\n", + " * **Multiply the average run time** needed to process a file by\n", + " the total number of files to get an approximate job time limit\n", + " * **Multiply the average size of files** by their number to\n", + " estimate the space needed in memory (example: loading images)\n", + " * Use the local storage to **optimize\n", + " repetitive and random accesses**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Pour obtenir le nombre de fichiers et la taille totale :\n", - "* **Sous Windows** : dans l'explorateur Windows (raccourcis clavier : Windows + E)\n", - " * Sélectionner un dossier ou plusieurs fichiers\n", - " * Bouton droit de la souris -> *Propriétés*\n", + "To get the number of files and the total size:\n", + "* **In Windows**: in Windows Explorer (keyboard shorcut: Windows + E)\n", + " * Select one directory or multiple files\n", + " * Right-click -> Select *Properties*\n", "\n", "![Windows data properties](images/win-data-size.png)" ] @@ -463,24 +470,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "* **Sous Mac OS** : dans *Finder*\n", - " * Sélectionner un dossier ou plusieurs fichiers\n", - " * Bouton droit de la souris -> *Get Info*\n", - " * Autrement : avec l'affichage *Par liste*\n", - " * [Activer *Calculer toutes les tailles*](https://www.solutionenligne.org/comment-afficher-taille-dossiers-fichiers-dans-finder-mac-os/)" + "* **In macOS**: with *Finder*\n", + " * Select one directory or multiple files\n", + " * Right-click -> Select *Get Info*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "* **In Linux** and on **compute clusters** :\n", + "* **In Linux** and on **compute clusters**:\n", " * The graphical environment can provide similar tools, but\n", " it depends on the Linux distribution and the chosen desktop\n", " * The command `du -sb DIRECTORY` (`s` for total sum, `b` for\n", " apparent size in bytes) recursively computes and displays\n", " the total size of used space in bytes. The apparent size is\n", - " important to consider while transferring or backuping the data\n", + " important to considerate while transferring or backuping the data\n", " * The command `find DIRECTORY | wc -l` recursively counts\n", " and displays the number of files and subdirectories\n", "\n", @@ -577,19 +582,20 @@ "metadata": {}, "source": [ "## Key Points\n", - "* Prévoir les **paramètres d'une tâche Slurm**\n", - " * Nombre de processeurs (CPU) et de noeuds de calcul\n", - " * Nombre d'accélérateurs (GPU)\n", - " * Quantité de mémoire-vive (RAM)\n", - " * Temps du calcul (`JJ-H:M` ou `H:M:S`)\n", - "* Différents **outils pour surveiller** les ressources utilisées\n", - " * `time` et autres bibliothèques de mesure du temps écoulé\n", + "* Estimate **Slurm job parameters**\n", + " * Number of CPU cores and compute nodes\n", + " * Number of accelerators (GPU)\n", + " * Memory (RAM)\n", + " * Compute time (`DD-H:M` or `H:M:S`)\n", + "* Different **tools to monitor** used resources\n", + " * `time` and other libraries to measure elapsed time\n", " * `top`, `htop`, `nvtop`, `nvidia-smi`\n", " * `sacct`, `seff`\n", - " * `du -sb`, `find | wc -l` et autres outils du système d'exploitation\n", - "* On vise une **efficacité de 90%** et plus pour les tâches CPU\n", - " * L'accélération avec un accélérateur (GPU) doit être significative (>5x)\n", - "* Le choix de la grappe dépend des besoins de chaque type de calcul" + " * `du -sb`, `find | wc -l` and other operating system tools\n", + "* Target **efficiency of at least 90%** for CPU jobs\n", + " * The acceleration with a GPU should be significant (>5x)\n", + "* The choice of a cluster depends on\n", + " the needs of each type of compute tasks" ] }, { diff --git a/searchindex.js b/searchindex.js index 9d3bab7..494547b 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["0-about", "1-introduction", "2-resources", "3-task-arrays", "4-storage", "90-exercises", "99-references", "data/README", "extra/acceleration", "extra/estimer-mem", "extra/glost-meta-farm", "extra/maitriser-slurm", "extra/stockage-avance"], "filenames": ["0-about.ipynb", "1-introduction.ipynb", "2-resources.ipynb", "3-task-arrays.ipynb", "4-storage.ipynb", "90-exercises.ipynb", "99-references.ipynb", "data/README.md", "extra/acceleration.ipynb", "extra/estimer-mem.ipynb", "extra/glost-meta-farm.ipynb", "extra/maitriser-slurm.ipynb", "extra/stockage-avance.ipynb"], "titles": ["Mastering the Alliance\u2019s Compute Systems", "Introduction", "Use Resources Wisely", "Task Arrays for Data Parallelism", "Storage Spaces", "Additional Exercises", "References", "Generating the data", "Analyse d\u2019acc\u00e9l\u00e9ration", "Estimation des besoins en m\u00e9moire-vive", "Le Greedy Launcher Of Small Tasks, ou GLOST", "Ma\u00eetriser l\u2019ordonnanceur Slurm", "Notions avanc\u00e9es du stockage"], "terms": {"intermedi": 0, "level": 0, "i": [0, 1, 2, 3, 4, 10, 11], "follow": [0, 2, 3, 4], "up": 0, "first": [0, 2], "step": [0, 2], "cluster": [0, 1, 6], "The": [0, 2, 3, 4], "main": [0, 3], "goal": 0, "explor": [0, 5, 8], "more": 0, "depth": 0, "some": [0, 1, 2], "kei": [0, 6], "concept": 0, "advanc": [0, 1], "research": [0, 2, 6], "note": [0, 2, 8, 12], "notebook": [0, 6], "script": [0, 3, 4, 5, 6, 8, 10, 11], "ar": [0, 1, 2, 3, 4], "publish": 0, "github": 0, "introduct": [0, 2], "remind": 0, "high": [0, 2], "perform": [0, 2, 3, 4, 5, 8], "differ": 0, "kind": 0, "task": [0, 2, 6], "question": [0, 2, 5, 6, 12], "think": 0, "us": [0, 1, 4, 6], "resourc": [0, 1, 3, 6], "wise": 0, "analys": [0, 11], "job": [0, 1, 4, 6, 11], "your": [0, 1, 6], "estim": [0, 1, 11], "requir": [0, 1, 3], "comparison": 0, "arrai": [0, 1, 6], "data": [0, 6], "parallel": [0, 2, 6, 12], "gnu": [0, 6], "storag": [0, 1, 2, 6], "space": [0, 1, 2, 6], "type": [0, 1, 2, 6, 10, 12], "manag": [0, 1, 6], "see": [0, 3], "page": [0, 2, 3, 8], "initi": 1, "problem": [1, 2], "when": [1, 3], "we": [1, 2, 3], "need": 1, "run": [1, 3, 6, 10, 11], "veri": 1, "larg": [1, 2, 3, 6, 12], "number": [1, 4], "calcul": [1, 2, 3, 4, 5, 6, 9, 10, 11, 12], "process": [1, 4], "dataset": 1, "becom": [1, 4], "necessari": [1, 4], "becaus": 1, "share": [1, 6], "demand": [1, 4], "each": [1, 3, 4], "submit": [1, 2, 3, 6, 10], "schedul": [1, 6], "It": [1, 4], "execut": [1, 2, 3], "two": [1, 2], "categori": 1, "work": [1, 3], "same": [1, 3], "within": 1, "set": [1, 6], "serial": 1, "have": [1, 2, 3, 4, 6], "vector": 1, "descript": [1, 4, 12], "oper": [1, 2], "appli": 1, "modern": 1, "processor": 1, "an": [1, 2], "acceler": 1, "gpu": [1, 4, 5, 6, 11], "A": [1, 3, 8, 9, 11], "lot": [1, 3], "independ": 1, "multipl": [1, 5], "simultan": 1, "probabl": [1, 4], "Or": [1, 4, 8, 12], "split": 1, "chunk": [1, 7], "what": 1, "do": 1, "you": [1, 2, 3, 4, 6], "perhap": 1, "small": 1, "file": [1, 3, 4, 6, 7], "few": 1, "which": [1, 2, 3, 4], "should": [1, 2, 3], "chosen": [1, 2], "quantiti": 1, "request": [1, 2], "how": 1, "plan": [1, 4], "usag": [1, 2, 3, 4], "activ": [1, 2, 6], "who": 1, "abl": 1, "access": [1, 2, 4, 6, 12], "archiv": [1, 4, 6], "final": [1, 8], "optim": 1, "monitor": [1, 2, 3, 4, 6], "profil": [1, 2, 6], "those": 1, "With": [2, 6], "digit": [2, 6], "allianc": [2, 6], "canada": [2, 6], "account": [2, 6], "mani": [2, 3], "b\u00e9luga": [2, 4, 6], "cedar": [2, 4, 6], "graham": [2, 4, 6], "narval": [2, 4, 6], "niagara": [2, 4, 6], "temporari": 2, "project": [2, 6], "nearlin": [2, 6], "while": 2, "being": 2, "still": 2, "limit": [2, 10, 11], "carefulli": 2, "everyon": 2, "order": [2, 3], "maximis": 2, "amount": 2, "produc": 2, "scientif": 2, "result": [2, 3], "themselv": 2, "other": [2, 6], "le": [2, 3, 4, 5, 11, 12], "princip": 2, "objectif": 2, "de": [2, 3, 4, 8, 11], "ce": [2, 3, 4, 5, 8, 11, 12], "chapitr": [2, 3, 4, 11, 12], "est": [2, 3, 4, 5, 8, 10, 11, 12], "vou": [2, 3, 5, 8, 11, 12], "permettr": [2, 8], "d": [2, 3, 4, 5, 9, 10], "vo": [2, 4, 5, 11], "besoin": [2, 4, 11], "dan": [2, 3, 4, 5, 8, 9, 10, 11], "d\u00e9termin": [2, 11], "ressourc": [2, 3, 11], "n\u00e9cessair": [2, 3, 4, 12], "pour": [2, 3, 4, 5, 8, 10, 11, 12], "t\u00e2che": [2, 3, 4, 5, 10, 12], "chaqu": [2, 3, 4, 9, 10, 11, 12], "d\u00e9fini": 2, "par": [2, 3, 4, 5, 8, 9, 10, 11, 12], "un": [2, 3, 4, 5, 9, 10], "destin\u00e9": 2, "\u00e0": [2, 3, 4, 5, 8, 12], "l": [2, 3, 4, 8, 9, 10, 12], "ordonnanceur": [2, 3, 5, 8], "typiqu": [2, 4, 9, 12], "\u00e9crit": [2, 12], "en": [2, 3, 4, 5, 8, 10, 12], "command": [2, 4, 5, 6, 8, 10, 11, 12], "bash": [2, 3, 4, 5, 8, 10, 11], "y": [2, 3, 4, 10, 12], "retrouv": [2, 3], "shebang": [2, 6], "tout": [2, 3, 4, 5, 8, 9, 10, 11, 12], "premi\u00e8r": 2, "lign": [2, 3, 10], "exempl": [2, 3, 8, 9, 10], "bin": 2, "option": [2, 3], "sbatch": [2, 3, 5, 6, 10, 11], "ent\u00eat": [2, 3], "la": [2, 3, 4, 5, 9, 10, 11, 12], "seront": [2, 3, 4, 5], "lue": 2, "soumiss": [2, 10], "chargement": 2, "modul": [2, 5, 6, 9, 10], "requi": [2, 5, 8], "qui": [2, 3, 4, 8, 10, 11, 12], "ex\u00e9cut\u00e9": [2, 3], "automatiqu": [2, 3, 12], "sur": [2, 4, 8, 10, 11, 12], "processeur": [2, 3, 5, 8, 10, 11], "r\u00e9serv\u00e9": 2, "For": [2, 3], "exampl": [2, 3], "mpi": [2, 10], "hello": 2, "sh": [2, 3, 4, 5, 8, 10, 11], "cat": [2, 3, 5, 8, 10, 11, 12], "ntask": 2, "10": [2, 3, 4, 7, 9, 10, 12], "mem": 2, "per": [2, 3, 4], "1000m": 2, "time": [2, 4, 5, 7], "0": [2, 3, 5, 7, 8, 9, 10, 11], "00": 2, "load": [2, 5, 7, 9, 10], "gcc": [2, 5, 7], "9": [2, 7, 8], "3": [2, 3, 5, 7, 9], "dev": 2, "null": 2, "mpirun": 2, "printenv": 2, "hostnam": [2, 6], "ompi_comm_world_rank": 2, "ompi_comm_world_s": 2, "our": 2, "document": [2, 3, 6], "about": [2, 4, 6], "start": 2, "thi": [2, 3], "lorsqu": [2, 3, 5, 8, 10, 11, 12], "cour": [2, 3, 10, 11], "ex\u00e9cut": [2, 3, 4, 5, 8, 10], "votr": [2, 11, 12], "ordinateur": [2, 5], "pouvez": [2, 5, 8, 11, 12], "surveil": 2, "diff\u00e9rent": [2, 3, 4, 5, 9, 11, 12], "m\u00e9triqu": 2, "utilis": [2, 3, 4, 8, 9, 10, 11, 12], "et": [2, 3, 4, 5, 9, 12], "": [2, 3, 4, 5, 6, 8, 10, 12], "il": [2, 3, 4, 5, 8, 9, 10, 11, 12], "lieu": [2, 3, 12], "m\u00e9moir": [2, 5, 8, 11], "vive": [2, 5, 8], "utilis\u00e9": [2, 3, 4, 11, 12], "acc\u00e8": [2, 4], "au": [2, 3, 8, 10, 11, 12], "stockag": [2, 4], "gestionnair": [2, 4, 10], "fair": [2, 12], "affich": [2, 11], "trouv": 2, "deux": [2, 9, 12], "mani\u00e8r": 2, "chercher": 2, "menu": 2, "d\u00e9marrer": 2, "raccourci": 2, "clavier": 2, "ctrl": [2, 8, 9], "alt": 2, "suppr": 2, "moniteur": 2, "activit\u00e9": 2, "applic": [2, 8, 9], "partir": [2, 12], "utilitair": 2, "sinon": 2, "espac": [2, 4, 9, 12], "taper": 2, "lettr": 2, "pouvoir": [2, 5], "s\u00e9lectionn": 2, "cett": [2, 5, 11, 12], "termin": [2, 8, 10, 12], "unix": 2, "peut": [2, 3, 4, 8, 9, 10, 12], "top": [2, 6, 10], "q": [2, 3, 10], "quitter": [2, 10], "htop": [2, 6], "On": [2, 4, 5, 8, 10], "commenc": 2, "se": [2, 4, 5, 9, 10, 11, 12], "connect": [2, 6], "noeud": [2, 3, 4, 5, 8, 10, 11, 12], "frontal": 2, "grapp": [2, 4, 8, 11, 12], "ssh": [2, 6, 10], "login1": [2, 4], "acc\u00e9der": 2, "aux": [2, 4, 5, 12], "product": 2, "vaut": [2, 3, 4, 11, 12], "mieux": [2, 3, 4, 11, 12], "pair": 2, "cl\u00e9": 2, "authentif": 2, "multifacteur": 2, "mainten": 2, "offert": 2, "national": [2, 4, 11], "vid\u00e9o": 2, "ici": [2, 3], "avec": [2, 3, 4, 5, 8, 9, 11, 12], "d\u00e9faut": [2, 4], "avez": 2, "compt": [2, 11], "def": [2, 4, 11, 12], "base": 2, "permet": [2, 3, 5, 10, 11], "lancer": 2, "To": [2, 3, 4, 12], "blastn": [2, 3, 4], "gen": [2, 3, 5], "seq": [2, 3], "And": 2, "statu": [2, 3, 6], "squeue": [2, 3, 4, 5, 6, 10, 11], "u": [2, 3, 4, 5, 10, 11], "user": [2, 3, 4, 5, 10, 11], "sq": 2, "sacct": [2, 5, 6, 8, 11], "can": [2, 3], "get": [2, 6], "detail": [2, 4], "tabl": [2, 4, 10], "sinc": 2, "midnight": 2, "seff": [2, 3, 5, 6, 8, 11], "short": [2, 4], "report": [2, 4], "singl": 2, "includ": 2, "elaps": [2, 11], "total": [2, 3, 8, 11, 12], "maximum": [2, 3, 4], "memori": [2, 6, 8], "valu": 2, "given": 2, "percentag": [2, 6], "job_id": [2, 3], "3d": 2, "matrix": 2, "python": [2, 4, 5, 6, 7, 9], "interact": 2, "salloc": [2, 4], "4": [2, 3, 5, 8, 9, 10], "8000m": 2, "15": [2, 7], "one": [2, 3, 6], "1": [2, 3, 5, 8, 9, 10, 11, 12], "press": [2, 3], "quit": [2, 3, 9], "four": [2, 3, 7], "grep": 2, "sec": 2, "log": [2, 7], "exit": [2, 4, 10], "go": [2, 12], "back": 2, "If": [2, 3], "jupyterhub": [2, 6], "code": [2, 4, 5, 6], "visual": [2, 6], "real": 2, "machin": [2, 9, 12], "tab": 2, "dashboard": 2, "allow": [2, 3, 4], "correspond": [2, 8], "node": [2, 3, 4, 6], "inv": [2, 5], "mat": [2, 5], "here": 2, "gener": [2, 4], "valid": [2, 3, 5], "identifi": [2, 3, 5, 11], "node_nam": 2, "100": [2, 8, 9, 12], "n": [2, 3, 5, 8, 10, 11, 12], "where": [2, 3], "reserv": [2, 6], "doe": 2, "seem": 2, "fulli": 2, "util": [2, 8], "inspect": [2, 3, 11], "time_inv": 2, "csv": [2, 5], "ani": 2, "find": [2, 3, 4], "caus": [2, 11], "correct": [2, 5], "compil": [2, 4], "paramet": 2, "resubmit": 2, "redo": 2, "abov": [2, 3], "gre": 2, "instal": [2, 4, 6], "proprietari": 2, "softwar": [2, 6], "pleas": 2, "manufactur": 2, "nvidia": [2, 6], "smi": [2, 6], "There": 2, "also": 2, "nvtop": [2, 6], "tg": 2, "1gpu": 2, "tail": [2, 3], "24": [2, 5], "avant": [2, 4, 8, 12], "massiv": [2, 8], "faut": [2, 4, 8, 10, 11, 12], "abord": [2, 8, 10], "que": [2, 3, 4, 5, 8, 9, 10, 12], "ou": [2, 3, 4, 8, 9, 11, 12], "algorithm": [2, 6, 8], "puiss": [2, 8], "d\u00e9montrer": [2, 8], "bonn": [2, 8], "plusieur": [2, 3, 4, 8, 10, 12], "parall\u00e8l": [2, 3, 4, 10], "quelqu": [2, 3, 4, 8, 10, 12], "d\u00e9finit": [2, 8], "temp": [2, 3, 4, 5, 8, 10, 11, 12], "\u00e9coul\u00e9": [2, 8, 11], "per\u00e7oit": [2, 8], "non": [2, 3, 4, 8, 12], "acc\u00e9l\u00e9rat": 2, "parall\u00e9lism": [2, 3, 8], "efficacit\u00e9": [2, 3, 5], "nombr": [2, 3, 4, 5, 8, 10, 11], "co\u00fbt": [2, 8, 12], "\u00e9tant": [2, 8, 12], "cinq": [2, 8], "foi": [2, 5, 8, 11, 12], "sup\u00e9rieur": [2, 8], "celui": [2, 8], "r\u00e9gulier": [2, 8], "seul": [2, 3, 5, 8, 10, 12], "doit": [2, 3, 8, 10], "moin": [2, 3, 8], "5x": [2, 8], "vitess": [2, 5], "huit": [2, 8], "8": [2, 3, 5, 7, 8, 9, 10], "douz": [2, 8], "12": [2, 3, 5, 7, 8], "acc\u00e9l\u00e9rateur": [2, 8], "ont": [2, 4, 10], "chacun": [2, 5, 9], "portail": 2, "http": [2, 11], "beluga": 2, "calculquebec": 2, "ca": [2, 3, 4, 5, 8, 11, 12], "essai": 2, "erreur": [2, 5], "petit": [2, 3, 4, 12], "taill": [2, 3, 4, 5, 9], "cibl": 2, "90": [2, 8], "s\u00e9quentiel": [2, 3, 8, 10], "optimis": [2, 4, 12], "donn\u00e9": [2, 3, 4, 5, 8, 9, 11], "ad\u00e9quat": 2, "exist": [2, 8, 12], "maxim": [2, 8], "respect": [2, 8], "seuil": [2, 8], "scalabilit\u00e9": 2, "loi": 2, "amdahl": [2, 6], "consomm": [2, 5, 8], "ordr": [2, 5, 8], "80": [2, 8], "demand\u00e9": [2, 8, 11], "rappel": [2, 5, 8], "obtenir": [2, 4, 5, 8, 11, 12], "pourcentag": [2, 3, 5, 8], "x": [2, 3, 8, 12], "surtout": [2, 8, 12], "num\u00e9ro": [2, 5, 8], "valeur": [2, 3, 5, 8, 9], "consid\u00e9r": [2, 3, 4, 5, 8, 9], "sont": [2, 3, 4, 5, 8, 10, 11, 12], "list": [2, 3, 5, 6, 11], "pose": 2, "augment": [2, 4, 11], "dimens": [2, 5], "du": [2, 3, 4, 5, 11], "probl\u00e8m": [2, 12], "quell": [2, 5, 12], "devraient": 2, "\u00eatre": [2, 3, 5, 8, 10, 12], "dur\u00e9": [2, 4, 12], "d\u00e9taill\u00e9": 2, "pa": [2, 3, 4, 5, 11, 12], "fait": [2, 5, 8, 10, 11, 12], "mesur": [2, 5, 12], "fonction": [2, 3, 4, 8, 12], "r\u00e9sultat": [2, 3, 4, 5, 8, 10, 12], "serait": 2, "possibl": [2, 3, 8, 9, 10, 11, 12], "pr\u00e9voir": 2, "comport": 2, "programm": [2, 3, 8], "p": [2, 3, 5, 7, 8, 10, 11, 12], "sleep": [2, 3, 11], "2": [2, 3, 5, 7, 9, 10], "format": [2, 6, 11, 12], "entr\u00e9": [2, 4], "devin": 2, "plu": [2, 3, 4, 9, 10, 11, 12], "aussi": [2, 3, 8, 11], "tenir": 2, "quantit\u00e9": [2, 5, 12], "octet": [2, 9, 12], "servir": 2, "local": [2, 3, 6, 12], "rapid": [2, 4], "fichier": [2, 4, 5, 8, 9, 10], "traiter": [2, 4, 9, 11], "multipli": [2, 9], "moyenn": [2, 9], "traitement": [2, 4], "leur": [2, 3, 11, 12], "imag": [2, 12], "al\u00e9atoir": [2, 5], "nombreux": [2, 4, 12], "sou": [2, 10, 12], "explorateur": 2, "e": [2, 8], "dossier": [2, 4, 5, 10], "bouton": 2, "droit": 2, "souri": 2, "propri\u00e9t\u00e9": 2, "finder": 2, "info": 2, "autrement": [2, 11], "affichag": [2, 11], "graphic": 2, "environ": [2, 5], "provid": [2, 3], "similar": [2, 3], "tool": [2, 6], "depend": 2, "distribut": 2, "desktop": 2, "sb": 2, "directori": [2, 3, 4, 6], "sum": 2, "b": [2, 3, 5, 9], "appar": [2, 12], "byte": 2, "recurs": 2, "displai": 2, "import": [2, 4, 8, 9, 11, 12], "consid": 2, "transfer": [2, 6], "backup": [2, 12], "wc": [2, 4, 10], "count": 2, "subdirectori": 2, "avail": [2, 4, 6], "march": 2, "2019": 2, "june": 2, "2017": 2, "octob": 2, "2021": 2, "april": 2, "2018": 2, "citi": 2, "montr\u00e9al": 2, "burnabi": 2, "waterloo": 2, "toronto": 2, "provinc": 2, "qu\u00e9bec": [2, 6], "c": [2, 3, 4, 8, 9, 11, 12], "ontario": 2, "amd": 2, "intel": 2, "broadwel": 2, "avx2": 2, "724": 2, "32": [2, 5, 9], "983": 2, "skylak": 2, "avx512": 2, "802": 2, "40": 2, "640": 2, "48": [2, 5], "1548": 2, "cascad": 2, "lake": 2, "768": 2, "136": 2, "44": 2, "476": 2, "epyc": 2, "rome": 2, "1181": 2, "64": [2, 3, 9], "2400m": 2, "160": 2, "4000m": 2, "1408": 2, "903": 2, "1145": 2, "576": 2, "4400m": 2, "4800m": 2, "589": 2, "2024": 2, "96": [2, 5], "56": 2, "16000m": 2, "19200m": 2, "53": [2, 9], "32000m": 2, "36": 2, "48000m": 2, "96000m": 2, "model": 2, "mist": [2, 6], "power9": [2, 6], "p100": 2, "12g": 2, "456": 2, "320": 2, "16g": 2, "128": [2, 9], "t4": 2, "144": [2, 5], "v100": 2, "688": 2, "54": 2, "32g": 2, "16": [2, 3, 5, 7, 8, 9], "216": 2, "a100": 2, "40g": 2, "636": 2, "specif": [2, 4, 6], "fast": 2, "network": 2, "infiniband": 2, "omnipath": 2, "topologi": 2, "fat": 2, "tree": 2, "dragonfli": 2, "island": 2, "1200": 2, "1024": 2, "1536": 2, "3072": 2, "3584": 2, "17280": 2, "block": 2, "factor": 2, "max": [2, 8, 9], "5": [2, 3, 5, 8], "7": [2, 3, 9, 11, 12], "granular": 2, "dai": [2, 4], "28": 2, "all": [2, 3, 6], "describ": 2, "last": 2, "chapter": [2, 3], "param\u00e8tr": [2, 3, 5, 10], "ram": 2, "jj": 2, "h": [2, 4, 10], "m": [2, 3, 11], "outil": [2, 3, 10, 12], "autr": [2, 4, 10, 12], "biblioth\u00e8qu": [2, 9], "syst\u00e8m": [2, 4, 12], "exploit": 2, "vise": [2, 8], "signif": 2, "choix": 2, "d\u00e9pend": [2, 9, 11], "haut": 3, "consist": 3, "seulement": [3, 4, 10, 11, 12], "mai": [3, 4, 5, 9, 10, 11], "processu": [3, 10], "simultan\u00e9": 3, "donnera": 3, "g\u00e9rer": [3, 12], "grand": [3, 4, 11, 12], "projet": [3, 4, 12], "recherch": [3, 4, 11, 12], "requiert": 3, "centain": 3, "pleinement": 3, "g\u00e9rant": 3, "longu": [3, 4, 12], "peu": [3, 4, 10], "comm": [3, 4, 10], "\u00e9chell": [3, 9, 12], "officiel": 3, "tutoriel": 3, "ok": 3, "pourquoi": [3, 4], "ne": [3, 4, 10, 11, 12], "simplement": 3, "soumettr": [3, 4, 5], "moment": 3, "1000": [3, 4, 9], "pend": [3, 11], "certain": [3, 9, 11, 12], "tellement": 3, "court": [3, 10], "minut": [3, 4, 11], "d\u00e9marrag": [3, 5], "fin": [3, 4], "compterai": 3, "significatif": 3, "r\u00e9el": 3, "diminu": [3, 8], "avantag": 3, "nou": [3, 10, 12], "\u00e9vite": 3, "boucl": 3, "soumett": 3, "similair": 3, "bien": [3, 10, 11], "facilit": 3, "semblabl": 3, "dispon": [3, 4, 10, 11], "sp\u00e9cifier": [3, 11, 12], "reprendr": 3, "s\u00e9quenc": 3, "situat": 3, "h\u00e2tive": 3, "basic": 3, "element": 3, "command_templ": 3, "manual": 3, "man": 3, "default": [3, 4], "placehold": 3, "chang": 3, "echo": [3, 10], "txt": [3, 5, 10], "citat": 3, "commit": 3, "cite": 3, "develop": 3, "rewrit": 3, "expans": 3, "01": 3, "like": [3, 6], "In": 3, "text": 3, "param": 3, "specifi": 3, "separ": 3, "between": 3, "argument": [3, 5], "filenam": 3, "prll": 3, "exec": 3, "prefer": 3, "prior": 3, "comput": [3, 4, 6], "cmd": 3, "much": 3, "simplifi": [3, 5], "flag": 3, "done": 3, "alreadi": 3, "fasta": 3, "fa": [3, 7], "were": 3, "creat": [3, 4], "previou": 3, "fictiv": 3, "speci": [3, 7], "known": 3, "These": 3, "convert": [3, 7], "blast": [3, 7], "databas": [3, 7], "unknown": 3, "k": 3, "through": 3, "z": [3, 12], "want": 3, "o": [3, 5, 12], "r": [3, 11, 12], "t": [3, 11, 12], "v": 3, "w": [3, 12], "make": [3, 4, 7], "test": 3, "cpu": [3, 4, 5, 6, 11, 12], "core": 3, "res_prll": [3, 4], "At": 3, "end": 3, "check": [3, 4, 6], "glost": [3, 6], "meta": [3, 6], "farm": [3, 6], "meilleur": [3, 5], "alor": [3, 10, 11], "pr\u00e9c\u00e9dent": 3, "vraiment": [3, 12], "appropri\u00e9": 3, "long": [3, 6], "veut": 3, "\u00e9viter": [3, 4], "d\u00e9passent": 3, "troi": [3, 5, 9], "jour": [3, 4, 11, 12], "r\u00e9duir": [3, 10], "risqu": 3, "subir": 3, "d\u00e9faillanc": 3, "mat\u00e9riel": 3, "vecteur": 3, "o\u00f9": [3, 10, 12], "m\u00eame": [3, 4, 5, 10, 11, 12], "combinaison": [3, 5, 10], "moyen": 3, "coder": 3, "tell": 3, "sort": [3, 5, 6], "d\u00e9termin\u00e9": 3, "indic": 3, "uniqu": [3, 10], "soit": [3, 5], "ajout": [3, 12], "voir": [3, 4, 8, 10, 12], "contient": 3, "caract\u00e8r": [3, 9], "soulign": 3, "_": 3, "associ\u00e9": 3, "25249551_15": 3, "variabl": [3, 4, 10, 12], "environn": [3, 4], "slurm_array_task_id": 3, "actuel": 3, "agit": [3, 5], "entier": 3, "parmi": 3, "wai": 3, "below": 3, "export": [3, 4], "71": 3, "onli": 3, "param_r": 3, "integ": 3, "divis": [3, 8], "param_c": 3, "modulo": 3, "remaind": 3, "head": 3, "onc": 3, "out": 3, "res_arrai": 3, "modifi": [3, 12], "investig": [3, 6], "values1": 3, "values2": 3, "sep": 3, "param_pair": 3, "n_processes_per_nod": 3, "command_list": 3, "99": 3, "personnel": 4, "temporair": [4, 12], "r\u00e9seau": 4, "partag\u00e9": [4, 12], "aspect": 4, "gro": [4, 12], "tr\u00e8": [4, 10, 11, 12], "transf\u00e9rabilit\u00e9": 4, "regroup\u00e9": 4, "compress\u00e9": [4, 12], "vie": 4, "pendant": [4, 10, 12], "entr": [4, 11, 12], "niveau": [4, 12], "confidentiel": 4, "publi\u00e9": [4, 12], "principaux": 4, "gestion": 4, "show": [4, 6, 11], "from": [4, 6], "login": 4, "ye": 4, "No": 4, "cd": [4, 10, 12], "ld": [4, 12], "lor": [4, 12], "connexion": 4, "quota": [4, 6, 12], "relativ": 4, "accept": 4, "id\u00e9al": [4, 12], "logiciel": 4, "df": 4, "limit\u00e9": [4, 12], "faibl": [4, 11, 12], "latenc": 4, "compar\u00e9": 4, "lustr": [4, 6, 12], "band": [4, 12], "passant": [4, 12], "particuli": 4, "supprim\u00e9": 4, "si": [4, 11, 12], "travail": [4, 10], "son": [4, 8, 11], "propr": 4, "r\u00e9p\u00e9tition": [4, 12], "sauvegard": [4, 12], "constam": 4, "modifi\u00e9": 4, "ver": 4, "capacit\u00e9": 4, "sauvegard\u00e9": [4, 5], "purg": [4, 6], "mensuel": 4, "\u00e2g\u00e9e": 4, "60": 4, "selon": [4, 8, 10, 11], "ensembl": 4, "utilisateur": [4, 11], "stocker": 4, "interm\u00e9diair": 4, "trop": [4, 5], "sponsor00": [4, 12], "group": [4, 10, 11], "sauf": [4, 12], "simpl": [4, 9, 10, 11], "jusqu": [4, 9], "\u00e9lev\u00e9": [4, 11], "alloc": [4, 6, 11], "sp\u00e9cial": 4, "quotidienn": 4, "500k": [4, 12], "potentiel": [4, 12], "configur": [4, 12], "acl": 4, "important": [4, 12], "jeux": 4, "r\u00e9utilis\u00e9": 4, "moi": [4, 12], "personn": [4, 12], "finaux": 4, "co\u00fbteux": 4, "reproduir": [4, 12], "interfac": 4, "disqu": [4, 12], "ancienn": 4, "ruban": 4, "diagnostiqu": 4, "\u00e9tat": 4, "part": 4, "migrat": 4, "r\u00e9duit": [4, 11], "\u00e9conomi": 4, "argent": 4, "lectur": [4, 8, 12], "migr\u00e9": 4, "cr\u00e9era": 4, "requ\u00eat": 4, "bloquant": 4, "causant": 4, "r\u00e9pons": 4, "heur": 4, "archivag": 4, "surcharg\u00e9": 4, "voil\u00e0": 4, "imp\u00e9ratif": 4, "copier": 4, "regroup": 4, "proven": 4, "As": 4, "pass": [4, 11], "tend": 4, "accumul": [4, 12], "eventu": 4, "well": 4, "hi": 4, "diskusage_report": [4, 6], "insid": 4, "everi": 4, "stat": 4, "name": 4, "json": 4, "diskusage_explor": [4, 6], "summari": 4, "navig": 4, "sub": 4, "further": 4, "analysi": [4, 6], "inform": [4, 6, 10, 11], "good": 4, "easier": 4, "delet": 4, "\u00e9tape": 4, "t\u00e9l\u00e9chargement": 4, "semain": [4, 12], "nul": 4, "prot\u00e9ger": 4, "davantag": 4, "s\u00e9rie": 4, "partit": [4, 6], "fic": 4, "d\u00e9placer": 4, "pr\u00e9sent": [4, 12], "fournir": [4, 12], "nom": [4, 11, 12], "redirig": 4, "sorti": [4, 5], "rapatri": 4, "post": 4, "tou": [4, 5, 11, 12], "afin": [4, 5, 8], "garder": [4, 12], "essentiel": 4, "postprocess": 4, "both": 4, "tsv": 4, "professeur": 4, "soient": [4, 9], "contr": 4, "avoir": [4, 12], "consent": 4, "isol\u00e9": 4, "involontair": 4, "absenc": 4, "politiqu": [4, 12], "universit\u00e9": [4, 12], "permettra": 4, "planifi": 4, "d\u00e8": [4, 12], "optimis\u00e9": [4, 12], "mo": [4, 12], "mettr": 4, "r\u00e9pertoir": [4, 12], "item": 4, "transfert": [4, 12], "zip": [4, 12], "dar": [4, 6, 12], "etc": [4, 5, 8], "devrait": [4, 8, 12], "quoi": 4, "quand": [4, 10, 12], "aper\u00e7u": 4, "critiqu": [4, 12], "copi": [4, 12], "ailleur": 4, "version": 4, "cet": 5, "exercic": 5, "invers": 5, "matric": [5, 9], "py": 5, "suivr": 5, "\u00e9volut": 5, "30": 5, "second": [5, 10, 12], "temps_inv": 5, "panda": 5, "numpi": [5, 9], "pred": 5, "scipi": [5, 9], "stack": [5, 9], "\u00e9t\u00e9": 5, "maximal": 5, "effectu": [5, 10], "matriciel": 5, "home": [5, 6], "b5d": 5, "tirer": 5, "profit": 5, "niveaux": 5, "cach": 5, "d\u00e9couper": 5, "cube": [5, 9], "bloc": 5, "b1": 5, "b2": 5, "b3": 5, "prism": 5, "p1": 5, "p2": 5, "p3": 5, "donc": [5, 8, 9, 10, 12], "peuvent": [5, 9, 10], "fourni": 5, "omp": 5, "compil\u00e9": 5, "openmp": 5, "fonctionn": [5, 10], "ind\u00e9pendant": 5, "g\u00e9n\u00e9rer": 5, "extra": [5, 8], "scratch": [5, 6, 10, 12], "\u00e9ditez": 5, "demandez": 5, "slurm": [5, 6, 8, 10], "charger": 5, "apr\u00e8": 5, "construisez": 5, "srun": [5, 10], "compl\u00e9t\u00e9": [5, 10, 11], "devriez": 5, "optimal": 5, "2000m": 5, "appel\u00e9": 5, "auront": 5, "tester": [5, 10], "6": 5, "utilisez": 5, "d\u00e9tail": [5, 11], "derni\u00e8r": 5, "consomm\u00e9": 5, "sachant": 5, "nouveau": [5, 10, 11, 12], "lancement": 5, "successif": 5, "r\u00e9servez": 5, "suffisam": 5, "soumettez": 5, "v\u00e9rifiez": 5, "essayez": 5, "system": 6, "nation": 6, "compress": 6, "disk": [6, 12], "tape": [6, 12], "tar": [6, 12], "filesystem": 6, "polici": 6, "automat": 6, "frequent": 6, "ask": 6, "exceed": 6, "handl": 6, "collect": 6, "hierarch": 6, "hdf5": 6, "slurm_tmpdir": 6, "mid": 6, "term": 6, "rsync": 6, "host": 6, "linux": 6, "multifactor": 6, "authent": 6, "complet": 6, "debug": 6, "scalabl": 6, "restart": 6, "capabl": 6, "ccdb": [6, 11], "competit": 6, "feder": 6, "repositori": 6, "frdr": 6, "cloud": 6, "servic": 6, "sshare": [6, 11], "scontrol": [6, 11], "extern": 6, "link": 6, "window": 6, "maco": 6, "resid": 6, "size": [6, 12], "rss": 6, "law": 6, "apach": 6, "parquet": 6, "feather": 6, "offici": 6, "subsystem": 6, "wsl": 6, "editor": 6, "jupyterlab": 6, "jupyt": 6, "spyder": 6, "id": [6, 10, 12], "studio": 6, "train": 6, "workshop": 6, "tutori": 6, "webinar": 6, "upcom": 6, "carpentri": 6, "lesson": 6, "seqkit": 7, "know": 7, "species_": 7, "unknow": 7, "chr_": 7, "divid": 7, "db": 7, "species_a": 7, "queri": 7, "chr_m": 7, "out_a_m": 7, "suppos": 8, "suivant": [8, 11], "lanc\u00e9": 8, "proc": 8, "876": 8, "220": 8, "035": 8, "calc": 8, "acc": 8, "eff": 8, "minim": 8, "figur": 8, "section": 8, "via": [8, 10], "effici": 8, "voici": 8, "t_": 8, "fraction": 8, "op\u00e9rat": 8, "\u00e9critur": 8, "commun": 8, "synchronis": [8, 12], "mod\u00e8l": 8, "t_p": 8, "left": 8, "frac": 8, "right": 8, "l\u00e0": 8, "red\u00e9finir": 8, "isol": 8, "\u00e9ventuel": 8, "impli": 8, "impos": 8, "minimal": 8, "geq": 8, "leq": 8, "con\u00e7u": 8, "recevoir": 8, "redirig\u00e9": 8, "canal": 8, "stdin": 8, "blocag": 8, "n_max": 8, "61": 8, "donner": 8, "qu": [8, 10, 11, 12], "arrondir": 8, "baiss": 8, "car": [8, 12], "metriqu": 8, "970874": 8, "58333": 8, "n_max_enti": 8, "ayant": 9, "id\u00e9": [9, 11], "devient": [9, 11], "prendront": 9, "prend": [9, 10], "cepend": 9, "langu": 9, "encodag": 9, "utf": 9, "rendr": 9, "quatr": 9, "latin": 9, "germaniqu": 9, "session": 9, "sy": 9, "euro": 9, "getsizeof": 9, "49": 9, "76": 9, "78": 9, "sortir": 9, "prennent": [9, 12], "bit": 9, "plage": 9, "souhait\u00e9": 9, "65": 9, "mill": 9, "65535": 9, "32767": 9, "milliard": 9, "31": 9, "18": 9, "trillion": 9, "63": 9, "np": 9, "zero": 9, "dtype": 9, "int64": 9, "8000136": 9, "int32": 9, "4000136": 9, "iinfo": 9, "int16": 9, "min": 9, "32768": 9, "voit": 9, "apprentissag": 9, "n\u00e9anmoin": 9, "initial": 9, "doubl": 9, "pr\u00e9cision": 9, "r\u00e9solut": 9, "23": 9, "d\u00e9cimal": 9, "38": 9, "52": 9, "11": 9, "308": 9, "ndarrai": 9, "float32": 9, "pi": 9, "print": 9, "1415927": 9, "141592653589793": 9, "langag": 9, "syst\u00e9matiqu": 9, "compilateur": 9, "repr\u00e9sent\u00e9": 9, "complex": 9, "nb_matric": 9, "prod_mat": 9, "25000": 9, "carr\u00e9": 9, "octets_par_nombr": 9, "memoir": 9, "diff\u00e9renc": [10, 12], "ordonnanc": 10, "architectur": 10, "travailleur": 10, "envoi": 10, "signal": 10, "d\u00e9finir": 10, "list\u00e9": 10, "s\u00e9par\u00e9": 10, "op\u00e9rateur": 10, "bonjour": 10, "mond": 10, "g\u00e9n\u00e9rez": 10, "less": 10, "lancez": 10, "allez": 10, "nom_noeud": 10, "jobid": [10, 11], "no_tach": 10, "pty": 10, "listez": 10, "res_glost": 10, "puissant": 10, "reprend": 10, "z\u00e9ro": 10, "mode": 10, "impliqu": [10, 12], "restant": [10, 11], "consult": 10, "prochain": 10, "prendr": 10, "ell": [10, 11, 12], "atteint": 10, "sa": 10, "rest": [10, 11], "\u00e9chou\u00e9": 10, "relanc": 10, "cr\u00e9er": [10, 12], "farm_init": 10, "align": 10, "adxkr": 10, "dat": 10, "contenir": 10, "recycl\u00e9": 10, "cp": 10, "sed": 10, "_glost": 10, "_meta": 10, "g": [10, 12], "sera": [10, 11], "trait\u00e9": [10, 12], "individuel": 10, "single_cas": 10, "nano": 10, "mkdir": [10, 12], "donne": [10, 12], "aller": [10, 11], "bon": 10, "revenir": 10, "\u00e9tion": 10, "nos": [10, 11, 12], "dt_fail": 10, "config": 10, "appel": [10, 11], "job_script": 10, "commande1a": 10, "commande1b": 10, "fichier1": 10, "commande2a": 10, "commande2b": 10, "fichier2": 10, "glost_launch": 10, "liste_command": 10, "approfondir": 11, "remplisson": 11, "g\u00e9r\u00e9e": 11, "300": [11, 12], "r\u00e9p\u00e9ter": 11, "trier": 11, "priorit\u00e9": 11, "priorit": 11, "propo": [11, 12], "colonn": 11, "num\u00e9riqu": 11, "cr\u00e9e": 11, "charg": 11, "jamai": 11, "venait": 11, "watch": 11, "chose": 11, "savoir": 11, "g\u00e9n\u00e9ralement": [11, 12], "comp\u00e9tit": 11, "ainsi": [11, 12], "aucun": [11, 12], "impact": 11, "incluant": 11, "laquel": 11, "assign\u00e9": 11, "dd": 11, "comprendr": 11, "majoritair": 11, "r\u00e9cent": 11, "proport": 11, "concern": [11, 12], "prof1_cpu": 11, "prof1": 11, "grad2": 11, "postdoc3": 11, "levelf": 11, "consid\u00e9r\u00e9": 11, "normal": [11, 12], "autour": 11, "proch": 11, "bass": 11, "perd": 11, "progressiv": 11, "ratio": 11, "r\u00e9duisant": 11, "50": 11, "cons\u00e9quent": 11, "allou\u00e9": [11, 12], "j": 11, "jobnam": 11, "maxrss": 11, "encor": 11, "permett": [11, 12], "ajust": 11, "ultim": 11, "computecanada": 11, "me": 11, "group_usag": 11, "tenant": 11, "pass\u00e9": 11, "concour": 11, "lister": [11, 12], "possibilit\u00e9": 11, "direct": 11, "pr\u00e9cise": 11, "avon": 12, "vu": 12, "comment": 12, "gpf": 12, "dire": 12, "ko": 12, "\u00e9gale": 12, "difficil": 12, "point": 12, "vue": 12, "raisonn": 12, "3k": 12, "lourdeur": 12, "sentir": 12, "10k": 12, "classer": 12, "facil": 12, "1m": 12, "5m": 12, "24h": 12, "10m": 12, "fr\u00e9quent": 12, "m\u00e9tadonn\u00e9": 12, "pr\u00e9f\u00e9rabl": 12, "jeu": 12, "d\u00e9codabl": 12, "winzip": 12, "7z": 12, "gzip": 12, "d\u00e9monstrat": 12, "cr\u00e9ation": 12, "arch": 12, "tair": 12, "avertiss": 12, "\u00e9crasement": 12, "existant": 12, "d\u00e9coup": 12, "extens": 12, "png": 12, "exclur": 12, "voulon": 12, "lire": 12, "\u00e9crire": 12, "avantageux": 12, "d\u00e9compress": 12, "plut\u00f4t": 12, "montr": 12, "r\u00e9ellement": 12, "noter": 12, "surcharg": 12, "survol": 12, "r\u00e9cursif": 12, "constitu": 12, "pratiqu": 12, "offrent": 12, "efficac": 12, "restez": 12, "aff\u00fbt": 12, "dont": 12, "repr\u00e9sent": 12, "volum": 12, "virtuel": 12, "\u00e9conomis": 12, "serveur": 12, "h\u00f4te": 12, "lu": 12, "catastrophiqu": 12, "solut": 12, "encapsul": 12, "attent": 12, "manipul\u00e9": 12, "planif": 12, "poser": 12, "affair": 12, "persistant": 12, "pert": 12, "recalcul": 12, "oui": 12, "quel": 12, "fr\u00e9quenc": 12, "combien": 12, "s\u00e9pare": 12, "courant": 12, "tard": 12, "publier": 12, "d\u00e9p\u00f4t": 12, "urgenc": 12, "doivent": 12, "place": 12, "mal": 12, "d\u00e9crite": 12, "identif": 12, "compr\u00e9hens": 12, "public": 12, "devienn": 12, "laborieus": 12, "h\u00e9ritent": 12, "gitignor": 12, "ignor": 12, "readm": 12, "md": 12, "confidentialit\u00e9": 12, "h\u00e9berger": 12, "d\u00e9part": 12, "r\u00e9f\u00e9rez": 12, "san": 12, "pr\u00e9caution": 12, "laissez": 12, "risquent": 12, "membr": 12, "laboratoir": 12, "poursuiv": 12, "mettez": 12, "enlev": 12, "chmod": 12, "gid": 12, "chgrp": 12, "resultat": 12, "lr": 12, "permiss": 12, "r\u00e9cursiv": 12, "rx": 12, "visit": 12, "userxi": 12, "pwd": 12}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"master": 0, "allianc": 0, "": 0, "comput": [0, 1, 2], "system": 0, "about": [0, 1], "thi": 0, "workshop": 0, "tabl": 0, "content": 0, "refer": [0, 6], "introduct": 1, "remind": 1, "high": 1, "perform": 1, "differ": [1, 4], "kind": 1, "task": [1, 3, 10], "data": [1, 2, 3, 4, 7], "parallel": [1, 3, 5, 10], "question": 1, "think": 1, "us": [2, 3], "resourc": 2, "wise": 2, "goal": 2, "write": 2, "proper": 2, "job": [2, 3], "script": 2, "slurm": [2, 3, 11], "analys": [2, 5, 8], "your": [2, 4], "In": [2, 4], "window": 2, "mac": 2, "o": 2, "linux": 2, "cluster": 2, "complet": 2, "run": [2, 4], "exercis": [2, 3, 4, 5], "check": 2, "demo": 2, "gpu": [2, 8], "test": 2, "crunch": 2, "py": 2, "One": [2, 3], "compar": [2, 8], "speed": 2, "cpu": [2, 8], "core": 2, "analysi": 2, "via": 2, "portal": 2, "estim": [2, 9], "requir": [2, 7], "target": 2, "effici": 2, "extrapol": [2, 8], "size": 2, "number": [2, 3], "file": [2, 12], "process": [2, 3], "comparison": 2, "kei": [2, 3, 4], "point": [2, 3, 4, 10, 11], "arrai": 3, "gnu": [3, 5, 10], "why": 3, "Not": 3, "command": 3, "syntax": 3, "case": [3, 4], "sequenc": [3, 7], "paramet": 3, "valu": 3, "multipl": 3, "combin": 3, "limit": 3, "simultan": 3, "align": 3, "dna": 3, "other": 3, "tool": 3, "storag": 4, "space": 4, "type": [4, 9], "home": 4, "person": 4, "slurm_tmpdir": 4, "temporari": 4, "local": 4, "scratch": 4, "network": 4, "project": 4, "share": 4, "nearlin": 4, "long": 4, "term": 4, "manag": 4, "life": 4, "cycl": 4, "activ": [4, 11, 12], "exampl": [4, 7], "small": [4, 10], "pipelin": 4, "inaccess": 4, "addit": 5, "complexit\u00e9": 5, "de": [5, 9, 10, 12], "l": [5, 11], "algorithm": 5, "instal": 5, "benchmark": 5, "5d": 5, "utilis": 5, "glost": [5, 10], "ressourc": [5, 8], "utilis\u00e9": 5, "probl\u00e8m": 5, "plu": 5, "grand": 5, "gener": 7, "modul": 7, "random": 7, "blastn": [7, 10], "d": [8, 11, 12], "acc\u00e9l\u00e9rat": 8, "la": 8, "vitess": 8, "v": 8, "exercic": [8, 10], "calcul": 8, "et": [8, 10, 11], "efficacit\u00e9": 8, "le": [8, 9, 10], "n\u00e9cessair": 8, "cibl": 8, "du": [8, 12], "parall\u00e8l": 8, "loi": 8, "amdahl": 8, "taill": [8, 12], "maximal": 8, "un": [8, 11, 12], "t\u00e2che": [8, 11], "besoin": 9, "en": [9, 11], "m\u00e9moir": 9, "vive": 9, "stockag": [9, 12], "selon": 9, "base": 9, "pour": 9, "text": 9, "nombr": [9, 12], "entier": 9, "\u00e0": [9, 10, 11], "virgul": 9, "flottant": 9, "greedi": 10, "launcher": 10, "Of": 10, "ou": 10, "list": 10, "ca": 10, "avec": 10, "meta": 10, "farm": 10, "meilleur": 10, "retenir": [10, 11], "ma\u00eetris": 11, "ordonnanceur": 11, "attent": 11, "partit": 11, "autr": 11, "sp\u00e9cific": 11, "politiqu": 11, "ordonnanc": 11, "termin\u00e9": 11, "notion": 12, "avanc\u00e9": 12, "caract\u00e9ristiqu": 12, "vo": 12, "donn\u00e9": 12, "transf\u00e9rabilit\u00e9": 12, "regroup": 12, "dan": 12, "fichier": 12, "archiv": 12, "compress": 12, "\u00e9par": 12, "spars": 12, "plan": 12, "gestion": 12, "vie": 12, "niveaux": 12, "acc\u00e8": 12, "exempl": 12, "partag": 12, "dossier": 12}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 60}, "alltitles": {"Mastering the Alliance\u2019s Compute Systems": [[0, "mastering-the-alliance-s-compute-systems"]], "About this workshop": [[0, "about-this-workshop"]], "Table of Contents": [[0, "table-of-contents"]], "References": [[0, "references"], [6, "references"]], "Introduction": [[1, "introduction"]], "Reminder - High Performance Computing": [[1, "reminder-high-performance-computing"]], "Different Kinds of Compute Tasks": [[1, "different-kinds-of-compute-tasks"]], "Data Parallelism": [[1, "data-parallelism"]], "Questions to Think About": [[1, "questions-to-think-about"]], "Use Resources Wisely": [[2, "use-resources-wisely"]], "Goal - Writing a Proper Job Script for Slurm": [[2, "goal-writing-a-proper-job-script-for-slurm"]], "Analysing Compute Jobs on Your Computer": [[2, "analysing-compute-jobs-on-your-computer"]], "In Windows": [[2, "in-windows"]], "In Mac OS": [[2, "in-mac-os"]], "In Linux": [[2, "in-linux"]], "Analysing Compute Jobs on Clusters": [[2, "analysing-compute-jobs-on-clusters"]], "Resources Used by a Completed Job": [[2, "resources-used-by-a-completed-job"]], "Resources Used by a Running Job": [[2, "resources-used-by-a-running-job"]], "Exercise - Checking Resources Used by a Running Job": [[2, "exercise-checking-resources-used-by-a-running-job"]], "(Demo) Checking Resources Used by a Running GPU Job": [[2, "demo-checking-resources-used-by-a-running-gpu-job"]], "Exercise - Testing crunch.py with One GPU": [[2, "exercise-testing-crunch-py-with-one-gpu"]], "Comparing the Speed of CPU Cores and a GPU": [[2, "comparing-the-speed-of-cpu-cores-and-a-gpu"]], "Jobs Analysis via Cluster Portals": [[2, "jobs-analysis-via-cluster-portals"]], "Estimating Required Compute Resources": [[2, "estimating-required-compute-resources"]], "Target Efficiency of a Job": [[2, "target-efficiency-of-a-job"]], "Exercise - Job Efficiency": [[2, "exercise-job-efficiency"]], "Extrapolating Required Compute Resources": [[2, "extrapolating-required-compute-resources"]], "Data Size and Number of Files to Process": [[2, "data-size-and-number-of-files-to-process"]], "Comparison of Compute Clusters": [[2, "comparison-of-compute-clusters"]], "Key Points": [[2, "key-points"], [3, "key-points"], [4, "key-points"]], "Task Arrays for Data Parallelism": [[3, "task-arrays-for-data-parallelism"]], "GNU Parallel": [[3, "gnu-parallel"]], "Why Not Slurm?": [[3, "why-not-slurm"]], "GNU Parallel Command Syntax": [[3, "gnu-parallel-command-syntax"]], "Use Cases": [[3, "use-cases"]], "One Sequence of Parameter Values": [[3, "one-sequence-of-parameter-values"]], "Multiple Combinations of Parameter Values": [[3, "multiple-combinations-of-parameter-values"]], "Limiting the Number of Simultaneous Processes": [[3, "limiting-the-number-of-simultaneous-processes"]], "Exercise - Aligning DNA Sequences": [[3, "exercise-aligning-dna-sequences"]], "Other Tools": [[3, "other-tools"]], "Job Arrays": [[3, "job-arrays"]], "Exercise - Job Arrays": [[3, "exercise-job-arrays"]], "Storage Spaces": [[4, "storage-spaces"]], "Different Types of Storage": [[4, "different-types-of-storage"]], "$HOME - Your Personal Space": [[4, "home-your-personal-space"]], "$SLURM_TMPDIR - Temporary Local Space": [[4, "slurm-tmpdir-temporary-local-space"]], "$SCRATCH - Temporary Network Space": [[4, "scratch-temporary-network-space"]], "/project - Shared Project Space": [[4, "project-shared-project-space"]], "/nearline - Long Term Storage": [[4, "nearline-long-term-storage"]], "Storage Management": [[4, "storage-management"]], "Life Cycle of Active Data": [[4, "life-cycle-of-active-data"]], "Example of the Life Cycle of Active Data": [[4, "example-of-the-life-cycle-of-active-data"]], "Exercise - Running a Small Pipeline": [[4, "exercise-running-a-small-pipeline"]], "In Case of Inaccessible Data": [[4, "in-case-of-inaccessible-data"]], "Additional Exercises": [[5, "additional-exercises"]], "Complexit\u00e9 de l\u2019algorithme": [[5, "complexite-de-l-algorithme"]], "Installation de Benchmark 5D": [[5, "installation-de-benchmark-5d"]], "Utiliser GLOST": [[5, "utiliser-glost"]], "Utiliser GNU Parallel": [[5, "utiliser-gnu-parallel"]], "Analyse des ressources utilis\u00e9es": [[5, "analyse-des-ressources-utilisees"]], "Probl\u00e8me plus grand": [[5, "probleme-plus-grand"]], "Generating the data": [[7, "generating-the-data"]], "Required modules": [[7, "required-modules"]], "Generating random sequences": [[7, "generating-random-sequences"]], "Blastn example": [[7, "blastn-example"]], "Analyse d\u2019acc\u00e9l\u00e9ration": [[8, "analyse-d-acceleration"]], "Comparer la vitesse CPU vs GPU": [[8, "comparer-la-vitesse-cpu-vs-gpu"]], "Exercice - Calcul d\u2019acc\u00e9l\u00e9ration et d\u2019efficacit\u00e9": [[8, "exercice-calcul-d-acceleration-et-d-efficacite"]], "Extrapoler les ressources n\u00e9cessaires": [[8, "extrapoler-les-ressources-necessaires"]], "Efficacit\u00e9 cible du calcul parall\u00e8le": [[8, "efficacite-cible-du-calcul-parallele"]], "Loi d\u2019Amdahl": [[8, "loi-d-amdahl"]], "Exercice - Taille maximale d\u2019une t\u00e2che parall\u00e8le": [[8, "exercice-taille-maximale-d-une-tache-parallele"]], "Estimation des besoins en m\u00e9moire-vive": [[9, "estimation-des-besoins-en-memoire-vive"]], "Stockage en m\u00e9moire selon les types de base": [[9, "stockage-en-memoire-selon-les-types-de-base"]], "Pour des textes": [[9, "pour-des-textes"]], "Pour des nombres entiers": [[9, "pour-des-nombres-entiers"]], "Pour des nombres \u00e0 virgule flottante": [[9, "pour-des-nombres-a-virgule-flottante"]], "Le Greedy Launcher Of Small Tasks, ou GLOST": [[10, "le-greedy-launcher-of-small-tasks-ou-glost"]], "Exercice - Liste de cas Blastn avec GLOST": [[10, "exercice-liste-de-cas-blastn-avec-glost"]], "META-Farm - Le meilleur de GNU Parallel et GLOST": [[10, "meta-farm-le-meilleur-de-gnu-parallel-et-glost"]], "Points \u00e0 retenir": [[10, "points-a-retenir"], [11, "points-a-retenir"]], "Ma\u00eetriser l\u2019ordonnanceur Slurm": [[11, "maitriser-l-ordonnanceur-slurm"]], "T\u00e2ches en attente": [[11, "taches-en-attente"]], "Partition et autres sp\u00e9cifications d\u2019une t\u00e2che": [[11, "partition-et-autres-specifications-d-une-tache"]], "Politique d\u2019ordonnancement": [[11, "politique-d-ordonnancement"]], "T\u00e2ches actives": [[11, "taches-actives"]], "T\u00e2ches termin\u00e9es": [[11, "taches-terminees"]], "Notions avanc\u00e9es du stockage": [[12, "notions-avancees-du-stockage"]], "Caract\u00e9ristiques de vos donn\u00e9es": [[12, "caracteristiques-de-vos-donnees"]], "Taille": [[12, "taille"]], "Nombre": [[12, "nombre"]], "Transf\u00e9rabilit\u00e9": [[12, "transferabilite"]], "Regroupement dans un fichier archive": [[12, "regroupement-dans-un-fichier-archive"]], "Compression des fichiers": [[12, "compression-des-fichiers"]], "Fichiers \u00e9pars (sparse files)": [[12, "fichiers-epars-sparse-files"]], "Plan de gestion des donn\u00e9es actives": [[12, "plan-de-gestion-des-donnees-actives"]], "Vie des donn\u00e9es": [[12, "vie-des-donnees"]], "Niveaux d\u2019acc\u00e8s": [[12, "niveaux-d-acces"]], "Exemple de partage de dossier:": [[12, "exemple-de-partage-de-dossier"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["0-about", "1-introduction", "2-resources", "3-task-arrays", "4-storage", "90-exercises", "99-references", "data/README", "extra/acceleration", "extra/estimer-mem", "extra/glost-meta-farm", "extra/maitriser-slurm", "extra/stockage-avance"], "filenames": ["0-about.ipynb", "1-introduction.ipynb", "2-resources.ipynb", "3-task-arrays.ipynb", "4-storage.ipynb", "90-exercises.ipynb", "99-references.ipynb", "data/README.md", "extra/acceleration.ipynb", "extra/estimer-mem.ipynb", "extra/glost-meta-farm.ipynb", "extra/maitriser-slurm.ipynb", "extra/stockage-avance.ipynb"], "titles": ["Mastering the Alliance\u2019s Compute Systems", "Introduction", "Use Resources Wisely", "Task Arrays for Data Parallelism", "Storage Spaces", "Additional Exercises", "References", "Generating the data", "Analyse d\u2019acc\u00e9l\u00e9ration", "Estimation des besoins en m\u00e9moire-vive", "Le Greedy Launcher Of Small Tasks, ou GLOST", "Ma\u00eetriser l\u2019ordonnanceur Slurm", "Notions avanc\u00e9es du stockage"], "terms": {"intermedi": 0, "level": 0, "i": [0, 1, 2, 3, 4, 10, 11], "follow": [0, 2, 3, 4], "up": 0, "first": [0, 2], "step": [0, 2], "cluster": [0, 1, 6], "The": [0, 2, 3, 4], "main": [0, 2, 3], "goal": 0, "explor": [0, 2, 5, 8], "more": 0, "depth": 0, "some": [0, 1, 2], "kei": [0, 6], "concept": 0, "advanc": [0, 1], "research": [0, 2, 6], "note": [0, 2, 8, 12], "notebook": [0, 6], "script": [0, 3, 4, 5, 6, 8, 10, 11], "ar": [0, 1, 2, 3, 4], "publish": 0, "github": 0, "introduct": 0, "remind": [0, 2], "high": [0, 2], "perform": [0, 2, 3, 4, 5, 8], "differ": [0, 2], "kind": 0, "task": [0, 2, 6], "question": [0, 5, 6, 12], "think": 0, "us": [0, 1, 4, 6], "resourc": [0, 1, 3, 6], "wise": 0, "analys": [0, 11], "job": [0, 1, 4, 6, 11], "your": [0, 1, 6], "estim": [0, 1, 11], "requir": [0, 1, 3], "comparison": 0, "arrai": [0, 1, 6], "data": [0, 6], "parallel": [0, 2, 6, 12], "gnu": [0, 6], "storag": [0, 1, 2, 6], "space": [0, 1, 2, 6], "type": [0, 1, 2, 6, 10, 12], "manag": [0, 1, 2, 6], "see": [0, 2, 3], "page": [0, 2, 3, 8], "initi": 1, "problem": [1, 2], "when": [1, 2, 3], "we": [1, 2, 3], "need": [1, 2], "run": [1, 3, 6, 10, 11], "veri": 1, "larg": [1, 2, 3, 6, 12], "number": [1, 4], "calcul": [1, 2, 3, 4, 5, 6, 9, 10, 11, 12], "process": [1, 4], "dataset": 1, "becom": [1, 4], "necessari": [1, 2, 4], "becaus": 1, "share": [1, 6], "demand": [1, 4], "each": [1, 2, 3, 4], "submit": [1, 2, 3, 6, 10], "schedul": [1, 2, 6], "It": [1, 4], "execut": [1, 2, 3], "two": [1, 2], "categori": 1, "work": [1, 3], "same": [1, 3], "within": 1, "set": [1, 6], "serial": [1, 2], "have": [1, 2, 3, 4, 6], "vector": 1, "descript": [1, 4, 12], "oper": [1, 2], "appli": 1, "modern": 1, "processor": 1, "an": [1, 2], "acceler": [1, 2], "gpu": [1, 4, 5, 6, 11], "A": [1, 2, 3, 8, 9, 11], "lot": [1, 3], "independ": 1, "multipl": [1, 2, 5], "simultan": 1, "probabl": [1, 4], "Or": [1, 4, 8, 12], "split": 1, "chunk": [1, 7], "what": [1, 2], "do": 1, "you": [1, 2, 3, 4, 6], "perhap": 1, "small": [1, 2], "file": [1, 3, 4, 6, 7], "few": [1, 2], "which": [1, 2, 3, 4], "should": [1, 2, 3], "chosen": [1, 2], "quantiti": [1, 2], "request": [1, 2], "how": [1, 2], "plan": [1, 4], "usag": [1, 2, 3, 4], "activ": [1, 2, 6], "who": 1, "abl": [1, 2], "access": [1, 2, 4, 6, 12], "archiv": [1, 4, 6], "final": [1, 8], "optim": [1, 2], "monitor": [1, 2, 3, 4, 6], "profil": [1, 2, 6], "those": 1, "With": [2, 6], "digit": [2, 6], "allianc": [2, 6], "canada": [2, 6], "account": [2, 6], "mani": [2, 3], "b\u00e9luga": [2, 4, 6], "cedar": [2, 4, 6], "graham": [2, 4, 6], "narval": [2, 4, 6], "niagara": [2, 4, 6], "temporari": 2, "project": [2, 6], "nearlin": [2, 6], "while": 2, "being": 2, "still": 2, "limit": [2, 10, 11], "carefulli": 2, "everyon": 2, "order": [2, 3], "maximis": 2, "amount": 2, "produc": 2, "scientif": 2, "result": [2, 3], "themselv": 2, "other": [2, 6], "thi": [2, 3], "chapter": [2, 3], "teach": 2, "analyz": 2, "determin": 2, "eventu": [2, 4], "defin": 2, "typic": 2, "written": 2, "bash": [2, 3, 4, 5, 8, 10, 11], "command": [2, 4, 5, 6, 8, 10, 11, 12], "shebang": [2, 6], "line": 2, "For": [2, 3], "exampl": [2, 3], "bin": 2, "header": 2, "sbatch": [2, 3, 5, 6, 10, 11], "option": [2, 3], "": [2, 3, 4, 5, 6, 8, 10, 12], "These": [2, 3], "pars": 2, "submiss": 2, "time": [2, 4, 5, 7], "modul": [2, 5, 6, 9, 10], "load": [2, 5, 7, 9, 10], "befor": 2, "automat": [2, 6], "reserv": [2, 6], "mpi": [2, 10], "hello": 2, "sh": [2, 3, 4, 5, 8, 10, 11], "cat": [2, 3, 5, 8, 10, 11, 12], "ntask": 2, "10": [2, 3, 4, 7, 9, 10, 12], "mem": 2, "per": [2, 3, 4], "1000m": 2, "0": [2, 3, 5, 7, 8, 9, 10, 11], "00": 2, "gcc": [2, 5, 7], "9": [2, 7, 8], "3": [2, 3, 5, 7, 9], "dev": 2, "null": 2, "mpirun": 2, "printenv": 2, "hostnam": [2, 6], "ompi_comm_world_rank": 2, "ompi_comm_world_s": 2, "our": 2, "document": [2, 3, 6], "about": [2, 4, 6], "start": 2, "can": [2, 3], "metric": 2, "applic": [2, 8, 9], "memori": [2, 6, 8], "iop": 2, "bandwidth": 2, "find": [2, 3, 4], "wai": [2, 3], "look": 2, "menu": 2, "keyboard": 2, "shortcut": 2, "ctrl": [2, 8, 9], "alt": 2, "delet": [2, 4], "imag": [2, 12], "from": [2, 4, 6], "wikimedia": 2, "To": [2, 3, 4, 12], "open": 2, "util": [2, 8], "directori": [2, 3, 4, 6], "otherwis": 2, "letter": 2, "select": 2, "appl": 2, "support": 2, "termin": [2, 8, 10, 12], "top": [2, 6, 10], "press": [2, 3], "q": [2, 3, 10], "quit": [2, 3, 9], "htop": [2, 6], "As": [2, 4], "connect": [2, 6], "ssh": [2, 6, 10], "login1": [2, 4], "nation": [2, 6], "system": [2, 6], "product": 2, "better": 2, "pair": 2, "multifactor": [2, 6], "authent": [2, 6], "now": 2, "avail": [2, 4, 6], "introductori": 2, "video": 2, "here": 2, "default": [2, 3, 4], "least": 2, "one": [2, 3, 6], "def": [2, 4, 11, 12], "allow": [2, 3, 4], "blastn": [2, 3, 4], "gen": [2, 3, 5], "seq": [2, 3], "And": 2, "statu": [2, 3, 6], "squeue": [2, 3, 4, 5, 6, 10, 11], "u": [2, 3, 4, 5, 10, 11], "user": [2, 3, 4, 5, 10, 11], "sq": 2, "sacct": [2, 5, 6, 8, 11], "get": [2, 6], "detail": [2, 4], "tabl": [2, 4, 10], "sinc": 2, "midnight": 2, "seff": [2, 3, 5, 6, 8, 11], "short": [2, 4], "report": [2, 4], "singl": 2, "includ": 2, "elaps": [2, 11], "total": [2, 3, 8, 11, 12], "maximum": [2, 3, 4], "valu": 2, "given": 2, "percentag": [2, 6], "job_id": [2, 3], "3d": 2, "matrix": 2, "python": [2, 4, 5, 6, 7, 9], "interact": 2, "salloc": [2, 4], "4": [2, 3, 5, 8, 9, 10], "8000m": 2, "15": [2, 7], "1": [2, 3, 5, 8, 9, 10, 11, 12], "four": [2, 3, 7], "grep": 2, "sec": 2, "log": [2, 7], "exit": [2, 4, 10], "go": [2, 12], "back": 2, "If": [2, 3], "jupyterhub": [2, 6], "code": [2, 4, 5, 6], "visual": [2, 6], "real": 2, "machin": [2, 9, 12], "tab": 2, "dashboard": 2, "correspond": [2, 8], "node": [2, 3, 4, 6], "inv": [2, 5], "mat": [2, 5], "gener": [2, 4], "valid": [2, 3, 5], "identifi": [2, 3, 5, 11], "node_nam": 2, "100": [2, 8, 9, 12], "n": [2, 3, 5, 8, 10, 11, 12], "where": [2, 3], "doe": 2, "seem": 2, "fulli": 2, "inspect": [2, 3, 11], "time_inv": 2, "csv": [2, 5], "ani": 2, "caus": [2, 11], "correct": [2, 5], "compil": [2, 4], "paramet": 2, "resubmit": 2, "redo": 2, "abov": [2, 3], "gre": 2, "instal": [2, 4, 6], "proprietari": 2, "softwar": [2, 6], "pleas": 2, "manufactur": 2, "nvidia": [2, 6], "smi": [2, 6], "There": 2, "also": 2, "nvtop": [2, 6], "tg": 2, "1gpu": 2, "tail": [2, 3], "24": [2, 5], "l": [2, 3, 4, 8, 9, 10, 12], "its": 2, "algorithm": [2, 6, 8], "must": 2, "demonstr": 2, "good": [2, 4], "regular": 2, "definit": 2, "perceiv": 2, "acquisit": 2, "cost": 2, "five": 2, "5x": [2, 8], "8": [2, 3, 5, 7, 8, 9, 10], "16": [2, 3, 5, 7, 8, 9], "worth": 2, "5": [2, 3, 5, 8], "great": 2, "http": [2, 11], "portail": 2, "beluga": 2, "calculquebec": 2, "ca": [2, 3, 4, 5, 8, 11, 12], "90": [2, 8], "mai": [2, 3, 4, 5, 9, 10, 11], "adequ": 2, "reach": 2, "scalabl": [2, 6], "principl": 2, "amdahl": [2, 6], "law": [2, 6], "around": 2, "80": [2, 8], "wa": 2, "x": [2, 3, 8, 12], "mainli": 2, "id": [2, 6, 10, 12], "import": [2, 4, 8, 9, 11, 12], "list": [2, 3, 5, 6, 11], "increas": 2, "expect": 2, "make": [2, 3, 4, 7], "approxim": 2, "measur": 2, "function": 2, "By": 2, "predict": 2, "program": 2, "behavior": 2, "p": [2, 3, 5, 7, 8, 10, 11, 12], "sleep": [2, 3, 11], "2": [2, 3, 5, 7, 9, 10], "consider": 2, "shape": 2, "input": 2, "guess": 2, "On": [2, 4, 5, 8, 10], "take": 2, "byte": 2, "gb": 2, "local": [2, 3, 6, 12], "could": 2, "solut": [2, 12], "multipli": [2, 9], "averag": 2, "repetit": 2, "random": 2, "shorcut": 2, "e": [2, 8], "right": [2, 8], "click": 2, "properti": 2, "finder": 2, "info": 2, "graphic": 2, "environ": [2, 5], "provid": [2, 3], "similar": [2, 3], "tool": [2, 6], "depend": 2, "distribut": 2, "desktop": 2, "du": [2, 3, 4, 5, 11], "sb": 2, "sum": 2, "b": [2, 3, 5, 9], "appar": [2, 12], "recurs": 2, "displai": 2, "transfer": [2, 6], "backup": [2, 12], "wc": [2, 4, 10], "count": 2, "subdirectori": 2, "march": 2, "2019": 2, "june": 2, "2017": 2, "octob": 2, "2021": 2, "april": 2, "2018": 2, "citi": 2, "montr\u00e9al": 2, "burnabi": 2, "waterloo": 2, "toronto": 2, "provinc": 2, "qu\u00e9bec": [2, 6], "c": [2, 3, 4, 8, 9, 11, 12], "ontario": 2, "amd": 2, "intel": 2, "broadwel": 2, "avx2": 2, "724": 2, "32": [2, 5, 9], "983": 2, "skylak": 2, "avx512": 2, "802": 2, "40": 2, "640": 2, "48": [2, 5], "1548": 2, "cascad": 2, "lake": 2, "768": 2, "136": 2, "44": 2, "476": 2, "epyc": 2, "rome": 2, "1181": 2, "64": [2, 3, 9], "2400m": 2, "160": 2, "4000m": 2, "1408": 2, "903": 2, "1145": 2, "576": 2, "4400m": 2, "4800m": 2, "589": 2, "2024": 2, "96": [2, 5], "56": 2, "16000m": 2, "19200m": 2, "53": [2, 9], "32000m": 2, "36": 2, "48000m": 2, "96000m": 2, "model": 2, "mist": [2, 6], "power9": [2, 6], "p100": 2, "12g": 2, "456": 2, "320": 2, "16g": 2, "128": [2, 9], "t4": 2, "144": [2, 5], "v100": 2, "688": 2, "54": 2, "32g": 2, "216": 2, "a100": 2, "40g": 2, "636": 2, "specif": [2, 4, 6], "fast": 2, "network": 2, "infiniband": 2, "omnipath": 2, "topologi": 2, "fat": 2, "tree": 2, "dragonfli": 2, "island": 2, "1200": 2, "1024": 2, "1536": 2, "3072": 2, "3584": 2, "17280": 2, "block": 2, "factor": 2, "max": [2, 8, 9], "7": [2, 3, 9, 11, 12], "granular": 2, "dai": [2, 4], "28": 2, "all": [2, 3, 6], "describ": 2, "last": 2, "ram": 2, "dd": [2, 11], "h": [2, 4, 10], "m": [2, 3, 11], "librari": 2, "signific": 2, "choic": 2, "le": [3, 4, 5, 11, 12], "haut": 3, "consist": 3, "non": [3, 4, 8, 12], "seulement": [3, 4, 10, 11, 12], "au": [3, 8, 10, 11, 12], "parall\u00e8l": [3, 4, 10], "par": [3, 4, 5, 8, 9, 10, 11, 12], "t\u00e2che": [3, 4, 5, 10, 12], "parall\u00e9lism": [3, 8], "de": [3, 4, 8, 11], "aussi": [3, 8, 11], "donn\u00e9": [3, 4, 5, 8, 9, 11], "en": [3, 4, 5, 8, 10, 12], "dan": [3, 4, 5, 8, 9, 10, 11], "plusieur": [3, 4, 8, 10, 12], "et": [3, 4, 5, 9, 12], "ou": [3, 4, 8, 9, 11, 12], "processu": [3, 10], "simultan\u00e9": 3, "ce": [3, 4, 5, 8, 11, 12], "chapitr": [3, 4, 11, 12], "vou": [3, 5, 8, 11, 12], "donnera": 3, "outil": [3, 10, 12], "n\u00e9cessair": [3, 4, 12], "pour": [3, 4, 5, 8, 10, 11, 12], "g\u00e9rer": [3, 12], "un": [3, 4, 5, 9, 10], "grand": [3, 4, 11, 12], "nombr": [3, 4, 5, 8, 10, 11], "lorsqu": [3, 5, 8, 10, 11, 12], "projet": [3, 4, 12], "recherch": [3, 4, 11, 12], "requiert": 3, "centain": 3, "r\u00e9sultat": [3, 4, 5, 8, 10, 12], "la": [3, 4, 5, 9, 10, 11, 12], "permet": [3, 5, 10, 11], "d": [3, 4, 5, 9, 10], "utilis": [3, 4, 8, 9, 10, 11, 12], "pleinement": 3, "ressourc": [3, 11], "noeud": [3, 4, 5, 8, 10, 11, 12], "g\u00e9rant": 3, "ex\u00e9cut": [3, 4, 5, 8, 10], "longu": [3, 4, 12], "petit": [3, 4, 12], "taill": [3, 4, 5, 9], "est": [3, 4, 5, 8, 10, 11, 12], "peu": [3, 4, 10], "comm": [3, 4, 10], "ordonnanceur": [3, 5, 8], "\u00e0": [3, 4, 5, 8, 12], "plu": [3, 4, 9, 10, 11, 12], "\u00e9chell": [3, 9, 12], "lieu": [3, 12], "officiel": 3, "tutoriel": 3, "ok": 3, "pourquoi": [3, 4], "ne": [3, 4, 10, 11, 12], "pa": [3, 4, 5, 11, 12], "tout": [3, 4, 5, 8, 9, 10, 11, 12], "simplement": 3, "soumettr": [3, 4, 5], "moment": 3, "chaqu": [3, 4, 9, 10, 11, 12], "1000": [3, 4, 9], "pend": [3, 11], "certain": [3, 9, 11, 12], "sont": [3, 4, 5, 8, 10, 11, 12], "tellement": 3, "court": [3, 10], "minut": [3, 4, 11], "que": [3, 4, 5, 8, 9, 10, 12], "d\u00e9marrag": [3, 5], "fin": [3, 4], "compterai": 3, "pourcentag": [3, 5, 8], "significatif": 3, "temp": [3, 4, 5, 8, 10, 11, 12], "r\u00e9el": 3, "utilis\u00e9": [3, 4, 11, 12], "qui": [3, 4, 8, 10, 11, 12], "diminu": [3, 8], "leur": [3, 11, 12], "efficacit\u00e9": [3, 5], "avantag": 3, "consid\u00e9r": [3, 4, 5, 8, 9], "nou": [3, 10, 12], "\u00e9vite": 3, "boucl": 3, "soumett": 3, "similair": 3, "bien": [3, 10, 11], "facilit": 3, "semblabl": 3, "processeur": [3, 5, 8, 10, 11], "dispon": [3, 4, 10, 11], "automatiqu": [3, 12], "ex\u00e9cut\u00e9": 3, "possibl": [3, 8, 9, 10, 11, 12], "sp\u00e9cifier": [3, 11, 12], "peut": [3, 4, 8, 9, 10, 12], "reprendr": 3, "s\u00e9quenc": 3, "situat": 3, "h\u00e2tive": 3, "basic": 3, "element": 3, "command_templ": 3, "manual": 3, "man": 3, "placehold": 3, "chang": 3, "echo": [3, 10], "txt": [3, 5, 10], "citat": 3, "commit": 3, "cite": 3, "develop": 3, "rewrit": 3, "expans": 3, "01": 3, "like": [3, 6], "In": 3, "text": 3, "param": 3, "specifi": 3, "separ": 3, "between": 3, "argument": [3, 5], "filenam": 3, "prll": 3, "exec": 3, "prefer": 3, "prior": 3, "comput": [3, 4, 6], "cmd": 3, "much": 3, "simplifi": [3, 5], "flag": 3, "done": 3, "alreadi": 3, "fasta": 3, "fa": [3, 7], "were": 3, "creat": [3, 4], "previou": 3, "fictiv": 3, "speci": [3, 7], "known": 3, "convert": [3, 7], "blast": [3, 7], "databas": [3, 7], "unknown": 3, "k": 3, "through": 3, "z": [3, 12], "want": 3, "o": [3, 5, 12], "r": [3, 11, 12], "t": [3, 11, 12], "v": 3, "w": [3, 12], "y": [3, 4, 10, 12], "test": 3, "cpu": [3, 4, 5, 6, 11, 12], "core": 3, "res_prll": [3, 4], "At": 3, "end": 3, "check": [3, 4, 6], "glost": [3, 6], "s\u00e9quentiel": [3, 8, 10], "meta": [3, 6], "farm": [3, 6], "meilleur": [3, 5], "alor": [3, 10, 11], "pr\u00e9c\u00e9dent": 3, "avec": [3, 4, 5, 8, 9, 11, 12], "moin": [3, 8], "il": [3, 4, 5, 8, 9, 10, 11, 12], "vraiment": [3, 12], "appropri\u00e9": 3, "long": [3, 6], "veut": 3, "\u00e9viter": [3, 4], "d\u00e9passent": 3, "troi": [3, 5, 9], "jour": [3, 4, 11, 12], "r\u00e9duir": [3, 10], "risqu": 3, "subir": 3, "d\u00e9faillanc": 3, "mat\u00e9riel": 3, "vaut": [3, 4, 11, 12], "mieux": [3, 4, 11, 12], "vecteur": 3, "o\u00f9": [3, 10, 12], "m\u00eame": [3, 4, 5, 10, 11, 12], "programm": [3, 8], "doit": [3, 8, 10], "\u00eatre": [3, 5, 8, 10, 12], "diff\u00e9rent": [3, 4, 5, 9, 11, 12], "combinaison": [3, 5, 10], "param\u00e8tr": [3, 5, 10], "moyen": 3, "seul": [3, 5, 8, 10, 12], "coder": 3, "tell": 3, "sort": [3, 5, 6], "seront": [3, 4, 5], "d\u00e9termin\u00e9": 3, "fonction": [3, 4, 8, 12], "indic": 3, "uniqu": [3, 10], "soit": [3, 5], "lign": [3, 10], "ent\u00eat": 3, "ajout": [3, 12], "voir": [3, 4, 8, 10, 12], "ici": 3, "quelqu": [3, 4, 8, 10, 12], "exempl": [3, 8, 9, 10], "contient": 3, "caract\u00e8r": [3, 9], "soulign": 3, "_": 3, "associ\u00e9": 3, "25249551_15": 3, "variabl": [3, 4, 10, 12], "environn": [3, 4], "slurm_array_task_id": 3, "retrouv": 3, "valeur": [3, 5, 8, 9], "actuel": 3, "cour": [3, 10, 11], "agit": [3, 5], "entier": 3, "parmi": 3, "below": 3, "export": [3, 4], "71": 3, "onli": 3, "param_r": 3, "12": [3, 5, 7, 8], "integ": 3, "divis": [3, 8], "param_c": 3, "modulo": 3, "remaind": 3, "head": 3, "onc": 3, "out": 3, "res_arrai": 3, "modifi": [3, 12], "investig": [3, 6], "values1": 3, "values2": 3, "sep": 3, "param_pair": 3, "n_processes_per_nod": 3, "command_list": 3, "99": 3, "stockag": 4, "sur": [4, 8, 10, 11, 12], "grapp": [4, 8, 11, 12], "national": [4, 11], "personnel": 4, "temporair": [4, 12], "r\u00e9seau": 4, "partag\u00e9": [4, 12], "dur\u00e9": [4, 12], "vo": [4, 5, 11], "ont": [4, 10], "aspect": 4, "gro": [4, 12], "tr\u00e8": [4, 10, 11, 12], "fichier": [4, 5, 8, 9, 10], "nombreux": [4, 12], "transf\u00e9rabilit\u00e9": 4, "regroup\u00e9": 4, "compress\u00e9": [4, 12], "vie": 4, "pendant": [4, 10, 12], "entr": [4, 11, 12], "autr": [4, 10, 12], "niveau": [4, 12], "acc\u00e8": 4, "confidentiel": 4, "publi\u00e9": [4, 12], "principaux": 4, "gestion": 4, "espac": [4, 9, 12], "show": [4, 6, 11], "login": 4, "ye": 4, "No": 4, "cd": [4, 10, 12], "ld": [4, 12], "entr\u00e9": 4, "d\u00e9faut": 4, "lor": [4, 12], "connexion": 4, "quota": [4, 6, 12], "relativ": 4, "accept": 4, "id\u00e9al": [4, 12], "logiciel": 4, "df": 4, "rapid": 4, "limit\u00e9": [4, 12], "faibl": [4, 11, 12], "latenc": 4, "compar\u00e9": 4, "lustr": [4, 6, 12], "band": [4, 12], "passant": [4, 12], "particuli": 4, "supprim\u00e9": 4, "si": [4, 11, 12], "travail": [4, 10], "son": [4, 8, 11], "propr": 4, "dossier": [4, 5, 10], "r\u00e9p\u00e9tition": [4, 12], "sauvegard": [4, 12], "constam": 4, "modifi\u00e9": 4, "ver": 4, "capacit\u00e9": 4, "sauvegard\u00e9": [4, 5], "purg": [4, 6], "mensuel": 4, "\u00e2g\u00e9e": 4, "60": 4, "selon": [4, 8, 10, 11], "ensembl": 4, "utilisateur": [4, 11], "stocker": 4, "interm\u00e9diair": 4, "trop": [4, 5], "sponsor00": [4, 12], "group": [4, 10, 11], "sauf": [4, 12], "augment": [4, 11], "simpl": [4, 9, 10, 11], "jusqu": [4, 9], "\u00e9lev\u00e9": [4, 11], "alloc": [4, 6, 11], "sp\u00e9cial": 4, "quotidienn": 4, "500k": [4, 12], "potentiel": [4, 12], "configur": [4, 12], "acl": 4, "typiqu": [4, 9, 12], "important": [4, 12], "jeux": 4, "r\u00e9utilis\u00e9": 4, "moi": [4, 12], "personn": [4, 12], "finaux": 4, "co\u00fbteux": 4, "reproduir": [4, 12], "interfac": 4, "disqu": [4, 12], "ancienn": 4, "ruban": 4, "diagnostiqu": 4, "\u00e9tat": 4, "part": 4, "migrat": 4, "r\u00e9duit": [4, 11], "\u00e9conomi": 4, "argent": 4, "lectur": [4, 8, 12], "migr\u00e9": 4, "cr\u00e9era": 4, "requ\u00eat": 4, "bloquant": 4, "causant": 4, "r\u00e9pons": 4, "heur": 4, "syst\u00e8m": [4, 12], "archivag": 4, "surcharg\u00e9": 4, "voil\u00e0": 4, "imp\u00e9ratif": 4, "copier": 4, "avant": [4, 8, 12], "regroup": 4, "proven": 4, "pass": [4, 11], "tend": 4, "accumul": [4, 12], "well": 4, "hi": 4, "diskusage_report": [4, 6], "insid": 4, "everi": 4, "stat": 4, "name": 4, "json": 4, "diskusage_explor": [4, 6], "summari": 4, "navig": 4, "sub": 4, "further": 4, "analysi": [4, 6], "inform": [4, 6, 10, 11], "easier": 4, "\u00e9tape": 4, "t\u00e9l\u00e9chargement": 4, "semain": [4, 12], "nul": 4, "besoin": [4, 11], "prot\u00e9ger": 4, "davantag": 4, "s\u00e9rie": 4, "partit": [4, 6], "fic": 4, "traiter": [4, 9, 11], "se": [4, 5, 9, 10, 11, 12], "d\u00e9placer": 4, "pr\u00e9sent": [4, 12], "fournir": [4, 12], "nom": [4, 11, 12], "redirig": 4, "sorti": [4, 5], "rapatri": 4, "post": 4, "traitement": 4, "tou": [4, 5, 11, 12], "afin": [4, 5, 8], "garder": [4, 12], "essentiel": 4, "postprocess": 4, "both": 4, "tsv": 4, "professeur": 4, "soient": [4, 9], "contr": 4, "obtenir": [4, 5, 8, 11, 12], "aux": [4, 5, 12], "faut": [4, 8, 10, 11, 12], "avoir": [4, 12], "consent": 4, "isol\u00e9": 4, "involontair": 4, "absenc": 4, "politiqu": [4, 12], "universit\u00e9": [4, 12], "permettra": 4, "planifi": 4, "d\u00e8": [4, 12], "optimis\u00e9": [4, 12], "mo": [4, 12], "mettr": 4, "r\u00e9pertoir": [4, 12], "item": 4, "transfert": [4, 12], "zip": [4, 12], "dar": [4, 6, 12], "etc": [4, 5, 8], "devrait": [4, 8, 12], "quoi": 4, "quand": [4, 10, 12], "optimis": [4, 12], "aper\u00e7u": 4, "critiqu": [4, 12], "copi": [4, 12], "ailleur": 4, "gestionnair": [4, 10], "version": 4, "cet": 5, "exercic": 5, "invers": 5, "matric": [5, 9], "al\u00e9atoir": 5, "py": 5, "suivr": 5, "\u00e9volut": 5, "30": 5, "second": [5, 10, 12], "mesur": [5, 12], "temps_inv": 5, "panda": 5, "numpi": [5, 9], "pred": 5, "scipi": [5, 9], "stack": [5, 9], "quell": [5, 12], "\u00e9t\u00e9": 5, "consomm": [5, 8], "maximal": 5, "m\u00e9moir": [5, 8, 11], "vive": [5, 8], "effectu": [5, 10], "matriciel": 5, "quantit\u00e9": [5, 12], "ordr": [5, 8], "home": [5, 6], "b5d": 5, "tirer": 5, "profit": 5, "niveaux": 5, "cach": 5, "ordinateur": 5, "d\u00e9couper": 5, "cube": [5, 9], "bloc": 5, "b1": 5, "b2": 5, "b3": 5, "prism": 5, "p1": 5, "p2": 5, "p3": 5, "donc": [5, 8, 9, 10, 12], "requi": [5, 8], "dimens": 5, "peuvent": [5, 9, 10], "fourni": 5, "omp": 5, "compil\u00e9": 5, "openmp": 5, "rappel": [5, 8], "fonctionn": [5, 10], "ind\u00e9pendant": 5, "g\u00e9n\u00e9rer": 5, "cett": [5, 11, 12], "extra": [5, 8], "scratch": [5, 6, 10, 12], "\u00e9ditez": 5, "demandez": 5, "slurm": [5, 6, 8, 10], "fait": [5, 8, 10, 11, 12], "charger": 5, "apr\u00e8": 5, "construisez": 5, "srun": [5, 10], "foi": [5, 8, 11, 12], "compl\u00e9t\u00e9": [5, 10, 11], "pouvez": [5, 8, 11, 12], "devriez": 5, "pouvoir": 5, "optimal": 5, "vitess": 5, "2000m": 5, "appel\u00e9": 5, "auront": 5, "tester": [5, 10], "6": 5, "utilisez": 5, "d\u00e9tail": [5, 11], "derni\u00e8r": 5, "num\u00e9ro": [5, 8], "consomm\u00e9": 5, "sachant": 5, "nouveau": [5, 10, 11, 12], "lancement": 5, "successif": 5, "r\u00e9servez": 5, "suffisam": 5, "chacun": [5, 9], "soumettez": 5, "v\u00e9rifiez": 5, "erreur": 5, "essayez": 5, "compress": 6, "disk": [6, 12], "tape": [6, 12], "tar": [6, 12], "filesystem": 6, "polici": 6, "frequent": 6, "ask": 6, "exceed": 6, "handl": 6, "collect": 6, "hierarch": 6, "format": [6, 11, 12], "hdf5": 6, "slurm_tmpdir": 6, "mid": 6, "term": 6, "rsync": 6, "host": 6, "linux": 6, "complet": 6, "debug": 6, "restart": 6, "capabl": 6, "ccdb": [6, 11], "competit": 6, "feder": 6, "repositori": 6, "frdr": 6, "cloud": 6, "servic": 6, "sshare": [6, 11], "scontrol": [6, 11], "extern": 6, "link": 6, "window": 6, "maco": 6, "resid": 6, "size": [6, 12], "rss": 6, "apach": 6, "parquet": 6, "feather": 6, "offici": 6, "subsystem": 6, "wsl": 6, "editor": 6, "jupyterlab": 6, "jupyt": 6, "spyder": 6, "studio": 6, "train": 6, "workshop": 6, "tutori": 6, "webinar": 6, "upcom": 6, "carpentri": 6, "lesson": 6, "seqkit": 7, "know": 7, "species_": 7, "unknow": 7, "chr_": 7, "divid": 7, "db": 7, "species_a": 7, "queri": 7, "chr_m": 7, "out_a_m": 7, "massiv": 8, "abord": [8, 10], "puiss": 8, "d\u00e9montrer": 8, "bonn": 8, "d\u00e9finit": 8, "\u00e9coul\u00e9": [8, 11], "per\u00e7oit": 8, "co\u00fbt": [8, 12], "\u00e9tant": [8, 12], "cinq": 8, "sup\u00e9rieur": 8, "celui": 8, "r\u00e9gulier": 8, "permettr": 8, "huit": 8, "douz": 8, "acc\u00e9l\u00e9rateur": 8, "suppos": 8, "suivant": [8, 11], "lanc\u00e9": 8, "proc": 8, "876": 8, "220": 8, "035": 8, "calc": 8, "acc": 8, "eff": 8, "seuil": 8, "minim": 8, "exist": [8, 12], "maxim": 8, "respect": 8, "figur": 8, "section": 8, "vise": 8, "demand\u00e9": [8, 11], "via": [8, 10], "surtout": [8, 12], "effici": 8, "voici": 8, "t_": 8, "fraction": 8, "op\u00e9rat": 8, "\u00e9critur": 8, "commun": 8, "synchronis": [8, 12], "mod\u00e8l": 8, "t_p": 8, "left": 8, "frac": 8, "l\u00e0": 8, "red\u00e9finir": 8, "isol": 8, "\u00e9ventuel": 8, "impli": 8, "impos": 8, "minimal": 8, "geq": 8, "leq": 8, "con\u00e7u": 8, "recevoir": 8, "redirig\u00e9": 8, "canal": 8, "stdin": 8, "blocag": 8, "n_max": 8, "61": 8, "donner": 8, "qu": [8, 10, 11, 12], "arrondir": 8, "baiss": 8, "car": [8, 12], "metriqu": 8, "970874": 8, "58333": 8, "n_max_enti": 8, "ayant": 9, "id\u00e9": [9, 11], "devient": [9, 11], "prendront": 9, "prend": [9, 10], "deux": [9, 12], "octet": [9, 12], "moyenn": 9, "cepend": 9, "langu": 9, "encodag": 9, "utf": 9, "rendr": 9, "quatr": 9, "latin": 9, "germaniqu": 9, "session": 9, "sy": 9, "euro": 9, "getsizeof": 9, "49": 9, "76": 9, "78": 9, "sortir": 9, "prennent": [9, 12], "bit": 9, "d\u00e9pend": [9, 11], "plage": 9, "souhait\u00e9": 9, "65": 9, "mill": 9, "65535": 9, "32767": 9, "milliard": 9, "31": 9, "18": 9, "trillion": 9, "63": 9, "np": 9, "zero": 9, "dtype": 9, "int64": 9, "8000136": 9, "int32": 9, "4000136": 9, "iinfo": 9, "int16": 9, "min": 9, "32768": 9, "voit": 9, "apprentissag": 9, "n\u00e9anmoin": 9, "initial": 9, "doubl": 9, "pr\u00e9cision": 9, "r\u00e9solut": 9, "23": 9, "d\u00e9cimal": 9, "38": 9, "52": 9, "11": 9, "308": 9, "ndarrai": 9, "float32": 9, "pi": 9, "print": 9, "1415927": 9, "141592653589793": 9, "langag": 9, "syst\u00e9matiqu": 9, "compilateur": 9, "biblioth\u00e8qu": 9, "repr\u00e9sent\u00e9": 9, "complex": 9, "nb_matric": 9, "prod_mat": 9, "25000": 9, "carr\u00e9": 9, "octets_par_nombr": 9, "memoir": 9, "diff\u00e9renc": [10, 12], "ordonnanc": 10, "architectur": 10, "travailleur": 10, "envoi": 10, "signal": 10, "quitter": 10, "d\u00e9finir": 10, "list\u00e9": 10, "sou": [10, 12], "s\u00e9par\u00e9": 10, "op\u00e9rateur": 10, "bonjour": 10, "mond": 10, "g\u00e9n\u00e9rez": 10, "less": 10, "lancez": 10, "allez": 10, "nom_noeud": 10, "jobid": [10, 11], "no_tach": 10, "pty": 10, "listez": 10, "res_glost": 10, "puissant": 10, "reprend": 10, "z\u00e9ro": 10, "mode": 10, "impliqu": [10, 12], "restant": [10, 11], "consult": 10, "prochain": 10, "prendr": 10, "ell": [10, 11, 12], "atteint": 10, "sa": 10, "rest": [10, 11], "\u00e9chou\u00e9": 10, "relanc": 10, "cr\u00e9er": [10, 12], "farm_init": 10, "align": 10, "adxkr": 10, "dat": 10, "contenir": 10, "recycl\u00e9": 10, "cp": 10, "sed": 10, "_glost": 10, "_meta": 10, "g": [10, 12], "sera": [10, 11], "trait\u00e9": [10, 12], "individuel": 10, "single_cas": 10, "nano": 10, "mkdir": [10, 12], "donne": [10, 12], "aller": [10, 11], "bon": 10, "revenir": 10, "\u00e9tion": 10, "nos": [10, 11, 12], "dt_fail": 10, "config": 10, "appel": [10, 11], "job_script": 10, "soumiss": 10, "commande1a": 10, "commande1b": 10, "fichier1": 10, "commande2a": 10, "commande2b": 10, "fichier2": 10, "glost_launch": 10, "liste_command": 10, "approfondir": 11, "remplisson": 11, "g\u00e9r\u00e9e": 11, "300": [11, 12], "r\u00e9p\u00e9ter": 11, "affich": 11, "trier": 11, "priorit\u00e9": 11, "affichag": 11, "priorit": 11, "propo": [11, 12], "colonn": 11, "num\u00e9riqu": 11, "compt": 11, "cr\u00e9e": 11, "charg": 11, "jamai": 11, "venait": 11, "watch": 11, "chose": 11, "savoir": 11, "g\u00e9n\u00e9ralement": [11, 12], "comp\u00e9tit": 11, "ainsi": [11, 12], "aucun": [11, 12], "impact": 11, "votr": [11, 12], "incluant": 11, "laquel": 11, "assign\u00e9": 11, "comprendr": 11, "majoritair": 11, "r\u00e9cent": 11, "proport": 11, "concern": [11, 12], "prof1_cpu": 11, "prof1": 11, "grad2": 11, "postdoc3": 11, "levelf": 11, "consid\u00e9r\u00e9": 11, "normal": [11, 12], "autour": 11, "proch": 11, "bass": 11, "perd": 11, "progressiv": 11, "ratio": 11, "r\u00e9duisant": 11, "50": 11, "cons\u00e9quent": 11, "allou\u00e9": [11, 12], "autrement": 11, "j": 11, "jobnam": 11, "maxrss": 11, "encor": 11, "permett": [11, 12], "ajust": 11, "d\u00e9termin": 11, "ultim": 11, "computecanada": 11, "me": 11, "group_usag": 11, "tenant": 11, "pass\u00e9": 11, "concour": 11, "lister": [11, 12], "possibilit\u00e9": 11, "direct": 11, "pr\u00e9cise": 11, "avon": 12, "vu": 12, "comment": 12, "gpf": 12, "dire": 12, "ko": 12, "\u00e9gale": 12, "difficil": 12, "point": 12, "vue": 12, "raisonn": 12, "3k": 12, "lourdeur": 12, "sentir": 12, "10k": 12, "classer": 12, "facil": 12, "1m": 12, "5m": 12, "24h": 12, "10m": 12, "fr\u00e9quent": 12, "m\u00e9tadonn\u00e9": 12, "pr\u00e9f\u00e9rabl": 12, "jeu": 12, "fair": 12, "d\u00e9codabl": 12, "winzip": 12, "7z": 12, "gzip": 12, "d\u00e9monstrat": 12, "cr\u00e9ation": 12, "arch": 12, "tair": 12, "avertiss": 12, "\u00e9crasement": 12, "existant": 12, "d\u00e9coup": 12, "extens": 12, "png": 12, "exclur": 12, "voulon": 12, "lire": 12, "\u00e9crire": 12, "avantageux": 12, "d\u00e9compress": 12, "plut\u00f4t": 12, "montr": 12, "r\u00e9ellement": 12, "noter": 12, "surcharg": 12, "survol": 12, "r\u00e9cursif": 12, "constitu": 12, "pratiqu": 12, "offrent": 12, "efficac": 12, "restez": 12, "aff\u00fbt": 12, "dont": 12, "repr\u00e9sent": 12, "\u00e9crit": 12, "volum": 12, "virtuel": 12, "\u00e9conomis": 12, "serveur": 12, "h\u00f4te": 12, "probl\u00e8m": 12, "lu": 12, "catastrophiqu": 12, "encapsul": 12, "attent": 12, "manipul\u00e9": 12, "planif": 12, "poser": 12, "affair": 12, "persistant": 12, "pert": 12, "recalcul": 12, "oui": 12, "quel": 12, "fr\u00e9quenc": 12, "combien": 12, "s\u00e9pare": 12, "courant": 12, "tard": 12, "publier": 12, "d\u00e9p\u00f4t": 12, "urgenc": 12, "doivent": 12, "place": 12, "mal": 12, "d\u00e9crite": 12, "identif": 12, "compr\u00e9hens": 12, "public": 12, "devienn": 12, "laborieus": 12, "h\u00e9ritent": 12, "gitignor": 12, "ignor": 12, "readm": 12, "md": 12, "confidentialit\u00e9": 12, "h\u00e9berger": 12, "d\u00e9part": 12, "partir": 12, "r\u00e9f\u00e9rez": 12, "san": 12, "pr\u00e9caution": 12, "laissez": 12, "risquent": 12, "membr": 12, "laboratoir": 12, "poursuiv": 12, "mettez": 12, "enlev": 12, "chmod": 12, "gid": 12, "chgrp": 12, "resultat": 12, "lr": 12, "permiss": 12, "r\u00e9cursiv": 12, "rx": 12, "visit": 12, "userxi": 12, "pwd": 12}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"master": 0, "allianc": 0, "": 0, "comput": [0, 1, 2], "system": 0, "about": [0, 1], "thi": 0, "workshop": 0, "tabl": 0, "content": 0, "refer": [0, 6], "introduct": 1, "remind": 1, "high": 1, "perform": 1, "differ": [1, 4], "kind": 1, "task": [1, 3, 10], "data": [1, 2, 3, 4, 7], "parallel": [1, 3, 5, 10], "question": 1, "think": 1, "us": [2, 3], "resourc": 2, "wise": 2, "goal": 2, "write": 2, "proper": 2, "job": [2, 3], "script": 2, "slurm": [2, 3, 11], "analys": [2, 5, 8], "your": [2, 4], "In": [2, 4], "window": 2, "maco": 2, "linux": 2, "cluster": 2, "complet": 2, "run": [2, 4], "exercis": [2, 3, 4, 5], "check": 2, "demo": 2, "gpu": [2, 8], "test": 2, "crunch": 2, "py": 2, "One": [2, 3], "compar": [2, 8], "speed": 2, "cpu": [2, 8], "core": 2, "analysi": 2, "via": 2, "portal": 2, "estim": [2, 9], "requir": [2, 7], "target": 2, "effici": 2, "extrapol": [2, 8], "size": 2, "number": [2, 3], "file": [2, 12], "process": [2, 3], "comparison": 2, "kei": [2, 3, 4], "point": [2, 3, 4, 10, 11], "arrai": 3, "gnu": [3, 5, 10], "why": 3, "Not": 3, "command": 3, "syntax": 3, "case": [3, 4], "sequenc": [3, 7], "paramet": 3, "valu": 3, "multipl": 3, "combin": 3, "limit": 3, "simultan": 3, "align": 3, "dna": 3, "other": 3, "tool": 3, "storag": 4, "space": 4, "type": [4, 9], "home": 4, "person": 4, "slurm_tmpdir": 4, "temporari": 4, "local": 4, "scratch": 4, "network": 4, "project": 4, "share": 4, "nearlin": 4, "long": 4, "term": 4, "manag": 4, "life": 4, "cycl": 4, "activ": [4, 11, 12], "exampl": [4, 7], "small": [4, 10], "pipelin": 4, "inaccess": 4, "addit": 5, "complexit\u00e9": 5, "de": [5, 9, 10, 12], "l": [5, 11], "algorithm": 5, "instal": 5, "benchmark": 5, "5d": 5, "utilis": 5, "glost": [5, 10], "ressourc": [5, 8], "utilis\u00e9": 5, "probl\u00e8m": 5, "plu": 5, "grand": 5, "gener": 7, "modul": 7, "random": 7, "blastn": [7, 10], "d": [8, 11, 12], "acc\u00e9l\u00e9rat": 8, "la": 8, "vitess": 8, "v": 8, "exercic": [8, 10], "calcul": 8, "et": [8, 10, 11], "efficacit\u00e9": 8, "le": [8, 9, 10], "n\u00e9cessair": 8, "cibl": 8, "du": [8, 12], "parall\u00e8l": 8, "loi": 8, "amdahl": 8, "taill": [8, 12], "maximal": 8, "un": [8, 11, 12], "t\u00e2che": [8, 11], "besoin": 9, "en": [9, 11], "m\u00e9moir": 9, "vive": 9, "stockag": [9, 12], "selon": 9, "base": 9, "pour": 9, "text": 9, "nombr": [9, 12], "entier": 9, "\u00e0": [9, 10, 11], "virgul": 9, "flottant": 9, "greedi": 10, "launcher": 10, "Of": 10, "ou": 10, "list": 10, "ca": 10, "avec": 10, "meta": 10, "farm": 10, "meilleur": 10, "retenir": [10, 11], "ma\u00eetris": 11, "ordonnanceur": 11, "attent": 11, "partit": 11, "autr": 11, "sp\u00e9cific": 11, "politiqu": 11, "ordonnanc": 11, "termin\u00e9": 11, "notion": 12, "avanc\u00e9": 12, "caract\u00e9ristiqu": 12, "vo": 12, "donn\u00e9": 12, "transf\u00e9rabilit\u00e9": 12, "regroup": 12, "dan": 12, "fichier": 12, "archiv": 12, "compress": 12, "\u00e9par": 12, "spars": 12, "plan": 12, "gestion": 12, "vie": 12, "niveaux": 12, "acc\u00e8": 12, "exempl": 12, "partag": 12, "dossier": 12}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 60}, "alltitles": {"Mastering the Alliance\u2019s Compute Systems": [[0, "mastering-the-alliance-s-compute-systems"]], "About this workshop": [[0, "about-this-workshop"]], "Table of Contents": [[0, "table-of-contents"]], "References": [[0, "references"], [6, "references"]], "Introduction": [[1, "introduction"]], "Reminder - High Performance Computing": [[1, "reminder-high-performance-computing"]], "Different Kinds of Compute Tasks": [[1, "different-kinds-of-compute-tasks"]], "Data Parallelism": [[1, "data-parallelism"]], "Questions to Think About": [[1, "questions-to-think-about"]], "Use Resources Wisely": [[2, "use-resources-wisely"]], "Goal - Writing a Proper Job Script for Slurm": [[2, "goal-writing-a-proper-job-script-for-slurm"]], "Analysing Compute Jobs on Your Computer": [[2, "analysing-compute-jobs-on-your-computer"]], "In Windows": [[2, "in-windows"]], "In macOS": [[2, "in-macos"]], "In Linux": [[2, "in-linux"]], "Analysing Compute Jobs on Clusters": [[2, "analysing-compute-jobs-on-clusters"]], "Resources Used by a Completed Job": [[2, "resources-used-by-a-completed-job"]], "Resources Used by a Running Job": [[2, "resources-used-by-a-running-job"]], "Exercise - Checking Resources Used by a Running Job": [[2, "exercise-checking-resources-used-by-a-running-job"]], "(Demo) Checking Resources Used by a Running GPU Job": [[2, "demo-checking-resources-used-by-a-running-gpu-job"]], "Exercise - Testing crunch.py with One GPU": [[2, "exercise-testing-crunch-py-with-one-gpu"]], "Comparing the Speed of CPU Cores and a GPU": [[2, "comparing-the-speed-of-cpu-cores-and-a-gpu"]], "Jobs Analysis via Cluster Portals": [[2, "jobs-analysis-via-cluster-portals"]], "Estimating Required Compute Resources": [[2, "estimating-required-compute-resources"]], "Target Efficiency of a Job": [[2, "target-efficiency-of-a-job"]], "Exercise - Job Efficiency": [[2, "exercise-job-efficiency"]], "Extrapolating Required Compute Resources": [[2, "extrapolating-required-compute-resources"]], "Data Size and Number of Files to Process": [[2, "data-size-and-number-of-files-to-process"]], "Comparison of Compute Clusters": [[2, "comparison-of-compute-clusters"]], "Key Points": [[2, "key-points"], [3, "key-points"], [4, "key-points"]], "Task Arrays for Data Parallelism": [[3, "task-arrays-for-data-parallelism"]], "GNU Parallel": [[3, "gnu-parallel"]], "Why Not Slurm?": [[3, "why-not-slurm"]], "GNU Parallel Command Syntax": [[3, "gnu-parallel-command-syntax"]], "Use Cases": [[3, "use-cases"]], "One Sequence of Parameter Values": [[3, "one-sequence-of-parameter-values"]], "Multiple Combinations of Parameter Values": [[3, "multiple-combinations-of-parameter-values"]], "Limiting the Number of Simultaneous Processes": [[3, "limiting-the-number-of-simultaneous-processes"]], "Exercise - Aligning DNA Sequences": [[3, "exercise-aligning-dna-sequences"]], "Other Tools": [[3, "other-tools"]], "Job Arrays": [[3, "job-arrays"]], "Exercise - Job Arrays": [[3, "exercise-job-arrays"]], "Storage Spaces": [[4, "storage-spaces"]], "Different Types of Storage": [[4, "different-types-of-storage"]], "$HOME - Your Personal Space": [[4, "home-your-personal-space"]], "$SLURM_TMPDIR - Temporary Local Space": [[4, "slurm-tmpdir-temporary-local-space"]], "$SCRATCH - Temporary Network Space": [[4, "scratch-temporary-network-space"]], "/project - Shared Project Space": [[4, "project-shared-project-space"]], "/nearline - Long Term Storage": [[4, "nearline-long-term-storage"]], "Storage Management": [[4, "storage-management"]], "Life Cycle of Active Data": [[4, "life-cycle-of-active-data"]], "Example of the Life Cycle of Active Data": [[4, "example-of-the-life-cycle-of-active-data"]], "Exercise - Running a Small Pipeline": [[4, "exercise-running-a-small-pipeline"]], "In Case of Inaccessible Data": [[4, "in-case-of-inaccessible-data"]], "Additional Exercises": [[5, "additional-exercises"]], "Complexit\u00e9 de l\u2019algorithme": [[5, "complexite-de-l-algorithme"]], "Installation de Benchmark 5D": [[5, "installation-de-benchmark-5d"]], "Utiliser GLOST": [[5, "utiliser-glost"]], "Utiliser GNU Parallel": [[5, "utiliser-gnu-parallel"]], "Analyse des ressources utilis\u00e9es": [[5, "analyse-des-ressources-utilisees"]], "Probl\u00e8me plus grand": [[5, "probleme-plus-grand"]], "Generating the data": [[7, "generating-the-data"]], "Required modules": [[7, "required-modules"]], "Generating random sequences": [[7, "generating-random-sequences"]], "Blastn example": [[7, "blastn-example"]], "Analyse d\u2019acc\u00e9l\u00e9ration": [[8, "analyse-d-acceleration"]], "Comparer la vitesse CPU vs GPU": [[8, "comparer-la-vitesse-cpu-vs-gpu"]], "Exercice - Calcul d\u2019acc\u00e9l\u00e9ration et d\u2019efficacit\u00e9": [[8, "exercice-calcul-d-acceleration-et-d-efficacite"]], "Extrapoler les ressources n\u00e9cessaires": [[8, "extrapoler-les-ressources-necessaires"]], "Efficacit\u00e9 cible du calcul parall\u00e8le": [[8, "efficacite-cible-du-calcul-parallele"]], "Loi d\u2019Amdahl": [[8, "loi-d-amdahl"]], "Exercice - Taille maximale d\u2019une t\u00e2che parall\u00e8le": [[8, "exercice-taille-maximale-d-une-tache-parallele"]], "Estimation des besoins en m\u00e9moire-vive": [[9, "estimation-des-besoins-en-memoire-vive"]], "Stockage en m\u00e9moire selon les types de base": [[9, "stockage-en-memoire-selon-les-types-de-base"]], "Pour des textes": [[9, "pour-des-textes"]], "Pour des nombres entiers": [[9, "pour-des-nombres-entiers"]], "Pour des nombres \u00e0 virgule flottante": [[9, "pour-des-nombres-a-virgule-flottante"]], "Le Greedy Launcher Of Small Tasks, ou GLOST": [[10, "le-greedy-launcher-of-small-tasks-ou-glost"]], "Exercice - Liste de cas Blastn avec GLOST": [[10, "exercice-liste-de-cas-blastn-avec-glost"]], "META-Farm - Le meilleur de GNU Parallel et GLOST": [[10, "meta-farm-le-meilleur-de-gnu-parallel-et-glost"]], "Points \u00e0 retenir": [[10, "points-a-retenir"], [11, "points-a-retenir"]], "Ma\u00eetriser l\u2019ordonnanceur Slurm": [[11, "maitriser-l-ordonnanceur-slurm"]], "T\u00e2ches en attente": [[11, "taches-en-attente"]], "Partition et autres sp\u00e9cifications d\u2019une t\u00e2che": [[11, "partition-et-autres-specifications-d-une-tache"]], "Politique d\u2019ordonnancement": [[11, "politique-d-ordonnancement"]], "T\u00e2ches actives": [[11, "taches-actives"]], "T\u00e2ches termin\u00e9es": [[11, "taches-terminees"]], "Notions avanc\u00e9es du stockage": [[12, "notions-avancees-du-stockage"]], "Caract\u00e9ristiques de vos donn\u00e9es": [[12, "caracteristiques-de-vos-donnees"]], "Taille": [[12, "taille"]], "Nombre": [[12, "nombre"]], "Transf\u00e9rabilit\u00e9": [[12, "transferabilite"]], "Regroupement dans un fichier archive": [[12, "regroupement-dans-un-fichier-archive"]], "Compression des fichiers": [[12, "compression-des-fichiers"]], "Fichiers \u00e9pars (sparse files)": [[12, "fichiers-epars-sparse-files"]], "Plan de gestion des donn\u00e9es actives": [[12, "plan-de-gestion-des-donnees-actives"]], "Vie des donn\u00e9es": [[12, "vie-des-donnees"]], "Niveaux d\u2019acc\u00e8s": [[12, "niveaux-d-acces"]], "Exemple de partage de dossier:": [[12, "exemple-de-partage-de-dossier"]]}, "indexentries": {}}) \ No newline at end of file