diff --git a/4-storage.ipynb b/4-storage.ipynb index 40182bd..b3489e4 100644 --- a/4-storage.ipynb +++ b/4-storage.ipynb @@ -85,7 +85,7 @@ "metadata": {}, "source": [ "* [Very fast local storage](https://docs.alliancecan.ca/wiki/Using_node-local_storage),\n", - " but limited to the duration of the compute job\n", + " but limited in size and to the duration of the compute job\n", " * **Low latency** compared to *Lustre* (the network filesystem)\n", " * Great bandwidth, even for small files\n", " * **Data deleted at the end** of the compute job\n", @@ -114,15 +114,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "* Espace de stockage réseau de [grande capacité](https://docs.alliancecan.ca/wiki/Storage_and_file_management/fr#Quotas_et_politiques) pour des **données temporaires**\n", - " * **Pas** sauvegardé\n", - " * [Purge mensuelle](https://docs.alliancecan.ca/wiki/Scratch_purging_policy/fr) pour les données âgées de plus de 60 jours\n", - "* Performance variable selon l'utilisation de l'ensemble des utilisateurs\n", - "* Cas d'utilisation :\n", - " * Utilisation de données **pendant quelques jours** seulement\n", - " * Stocker temporairement des **résultats en grand nombre** de fichiers\n", - " * Stocker des résultats **intermédiaires** qui sont **trop gros**\n", - " pour `/project`" + "* Network storage space of\n", + " [great capacity](https://docs.alliancecan.ca/wiki/Storage_and_file_management#Filesystem_quotas_and_policies)\n", + " for **temporary data**\n", + " * **Not** backed up\n", + " * [Monthly purge](https://docs.alliancecan.ca/wiki/Scratch_purging_policy)\n", + " for the data older than 60 days\n", + "* Variable performance according to the use by all users\n", + "* Use cases:\n", + " * Using a dataset **for only a few days**\n", + " * Storing **results temporarily** if made of hundreds of files\n", + " * Storing **intermediate** results which\n", + " would be **too big** for `/project`" ] }, { @@ -141,19 +144,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "* Espace de stockage réseau de [petite à grande capacité](https://docs.alliancecan.ca/wiki/Storage_and_file_management/fr#Quotas_et_politiques) pour des **données de projet**\n", - " * Un espace projet par défaut par groupe de recherche (sauf sur Niagara)\n", - " * Petite augmentation d'espace projet **sur simple demande (jusqu'à 10 To)**\n", - " * Quota plus élevé si [allocation spéciale](https://alliancecan.ca/fr/services/calcul-informatique-de-pointe/acces-aux-ressources/concours-pour-lallocation-de-ressources)\n", - " * Sauvegardé **quotidiennement**\n", - " * Nombre de fichiers relativement limité (500k par défaut)\n", - "* Données de projet :\n", - " * Potentiellement **partagées** - [configuration des ACLs](https://docs.alliancecan.ca/wiki/Sharing_data/fr)\n", - " * Durée de vie en fonction de la durée d'un projet\n", - " * Typiquement plus importantes que les données temporaires\n", - "* Cas d'utilisation :\n", - " * Stockage de jeux de données **réutilisés sur plusieurs mois et/ou par plusieurs personnes**\n", - " * Stockage de **résultats finaux** coûteux à reproduire" + "* Network storage space of\n", + " [small or large capacity](https://docs.alliancecan.ca/wiki/Storage_and_file_management#Filesystem_quotas_and_policies)\n", + " for **project data**\n", + " * A default project space per research group (except on Niagara)\n", + " * The quota can be increased by a few TB **on demand by email**\n", + " * For a much larger project space, the PI needs to submit a\n", + " [RAC request](https://alliancecan.ca/en/services/advanced-research-computing/accessing-resources/resource-allocation-competition)\n", + " * Backed up **daily**\n", + " * The quota on the number of files is limited (500k by default)\n", + "* Project data:\n", + " * Potentially **shared** -\n", + " [configuration of ACLs](https://docs.alliancecan.ca/wiki/Sharing_data)\n", + " * Last as long as the project lasts\n", + " * Typically more important than temporary data\n", + "* Use cases:\n", + " * Storing datasets that are **reused over\n", + " multiple months or shared by many group members**\n", + " * Storing **final results** which would be too expensive to recreate" ] }, { @@ -161,28 +169,28 @@ "metadata": {}, "source": [ "### `/nearline` - Long Term Storage\n", - "Interface de stockage sur disque :\n", - "* On peut voir les fichiers avec la commande `ls`\n", - "* Les données les plus anciennes dans\n", - " [`/nearline` sont probablement sur ruban](https://docs.alliancecan.ca/wiki/Using_nearline_storage/fr)\n", - " * Voir les commandes pour [diagnostiquer l'état des fichiers](https://docs.alliancecan.ca/wiki/Using_nearline_storage/fr#Transf.C3.A9rer_des_donn.C3.A9es_.C3.A0_partir_de_.2Fnearline) dans `/nearline`\n", + "Storage interface on disk:\n", + "* We can see the files with the `ls` command\n", + "* The oldest data in\n", + " [`/nearline` is most likely moved to tape](https://docs.alliancecan.ca/wiki/Using_nearline_storage)\n", + " * There are command lines to\n", + " [check the status of your files](https://docs.alliancecan.ca/wiki/Using_nearline_storage#Transferring_data_from_Nearline)\n", + " in `/nearline`\n", "\n", - "À considérer :\n", - "* D'une part, la migration de données sur ruban réduit l'espace\n", - " utilisé sur les disques - économie d'argent pour le stockage\n", - "* D'autre part, chaque lecture de fichier migré sur ruban créera\n", - " **une requête bloquante** causant un temps de réponse de quelques\n", - " minutes à quelques heures (si le système d'archivage est surchargé\n", - " de requêtes)\n", - " * Voilà pourquoi il est impératif d'y sauvegarder un\n", - " **faible nombre de très grands fichiers**\n", - " * **À éviter** : y copier de nombreux petits fichiers avant de les\n", - " regrouper dans un fichier d'archive\n", + "To considerate:\n", + "* The migration of the data to tape reduces the space used on\n", + " disk, which saves some money when buying the storage system\n", + "* Each read operation of a migrated file to tape will create\n", + " **a blocking request** which causes a response time of a few\n", + " minutes to hours (when the tape system is overloaded of requests)\n", + " * That is why it is necessary to save\n", + " a **small number of large files**\n", + " * **To avoid**: copying numerous small files on\n", + " Nearline before grouping them in archive files\n", "\n", - "Cas d'utilisation :\n", - " * Regrouper des fichiers provenant de `/project` ou de `/scratch`\n", - " * Stockage de données importantes **qui ne seront pas utilisées\n", - " pendant plusieurs mois**" + "Use cases:\n", + " * Grouping files from `/project` or `/scratch`\n", + " * Storing important data **that will not be used for months**" ] }, { @@ -228,19 +236,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Description des différentes étapes :\n", - "* Téléchargement des données dans `/scratch`\n", - " * Pour une utilisation de quelques jours à quelques semaines\n", - " * Nul besoin de les protéger davantage\n", - "* Soumettre une série de tâches de calcul\n", - " * Une tâche par fichier dans `dossier` dans la partition `/scratch`\n", - "* Le script de tâche est dans la partition `/home`\n", - " * Utilisation des variables `$FIC` et `$SLURM_TMPDIR` pour copier le fichier à traiter localement sur le noeud de calcul\n", - " * Se déplacer dans le dossier local\n", - " * Y configurer un environnement Python\n", - " * Exécuter le code Python présent dans `/home`, fournir le nom du fichier à traiter et rediriger toutes les sorties dans un fichier local\n", - " * Rapatrier le fichier de résultats dans un dossier dans `/scratch`\n", - "* Post-traitement - traiter tous les fichiers de résultats afin de ne garder que l'essentiel dans `/project`" + "Description of each step:\n", + "* A dataset is downloaded in `/scratch`\n", + " * To be used between a few days and a few weeks\n", + " * No need to backup the data (it is easily recoverable)\n", + "* Submission of multiple compute jobs\n", + " * One job per file in `data` in the `/scratch` partition\n", + "* The job script is located in the `/home` partition\n", + " * It uses variables `$FIC` and `$SLURM_TMPDIR` to copy\n", + " the data file to process locally on the compute node\n", + " * Move the session to the local directory\n", + " * Configure a Python environment\n", + " * Execute the Python code saved in `/home`, provide the name of\n", + " the file to process and redirect the output to a local file\n", + " * Copy the results file to a directory in `/scratch`\n", + "* Post-process - process all results files and\n", + " keep only the necessary information in `/project`" ] }, { @@ -274,12 +285,14 @@ "metadata": {}, "source": [ "### In Case of Inaccessible Data\n", - "* Une professeure ou un professeur peut demander à ce que les données soient supprimées\n", - "* Par contre, pour obtenir l'accès aux données, il faut avoir le consentement de la personne qui les a isolées (probablement involontairement)\n", - " * En cas d'absence de réponse, c'est la politique de l'université du groupe de recherche qui permettra ou non d'obtenir l'accès aux données\n", + "* A professor can request the deletion of the inaccessible data\n", + "* To get access to the data, we need the consent of the user\n", + " that has blocked the access (most of the time not on purpose)\n", + " * In case of no response, the research group's institution\n", + " policy can allow or not the access to the data\n", " \n", - "Dans tous les cas, il vaut mieux planifier, et ce,\n", - "dès l'importation de données sur les grappes de calcul." + "In all cases, it is better to plan the data management\n", + "in advance, even when importing data on compute clusters." ] }, { @@ -287,19 +300,18 @@ "metadata": {}, "source": [ "## Key Points\n", - "* Le système de fichiers *Lustre* est optimisé pour des gros fichiers\n", - " (+10 Mo)\n", - " * Ne pas mettre trop de fichiers et dossiers dans un même répertoire\n", - " (maximum 1000 items)\n", - "* Pour le transfert de données et l'utilisation du *Nearline*,\n", - " il vaut mieux regrouper les données dans un fichier archive\n", - " (comme Zip, DAR, etc.)\n", - "* Dans l'espace projet, il faut planifier qui devrait avoir accès à quoi et quand\n", - "* Pour optimiser les tâches, utiliser `$SLURM_TMPDIR`\n", - "* La commande `diskusage_report` pour un aperçu de l'espace utilisé\n", - "* Pour les données et codes critiques :\n", - " * avoir une copie ailleurs et\n", - " * utiliser un gestionnaire de versions." + "* The *Lustre* file system is optimized for large files (+10 MB)\n", + " * Avoid saving too many files and directories in a directory\n", + " (maximum 1000 items)\n", + "* For data transfers and the use of *Nearline*, it is\n", + " better to group data in archive files (like Zip, DAR, etc.)\n", + "* In the project space, the group must\n", + " plan who should access to what and when\n", + "* To optimize jobs, use the `$SLURM_TMPDIR`\n", + "* The `diskusage_report` command returns an overview of used space\n", + "* For critical data and codes:\n", + " * have a copy elsewhere, and\n", + " * use a version control system" ] }, {