R/fr: Difference between revisions

Jump to navigation Jump to search
520 bytes added ,  6 months ago
Updating to match new version of source page
(Updating to match new version of source page)
Tags: Mobile edit Mobile web edit
(Updating to match new version of source page)
Line 4: Line 4:
R est un outil de calcul statistique et de graphiques. Il s'agit d'un langage de programmation additionné d'un environnement graphique, d'un débogueur, de l'accès à certaines fonctions de système et de la possibilité d'exécuter des scripts.
R est un outil de calcul statistique et de graphiques. Il s'agit d'un langage de programmation additionné d'un environnement graphique, d'un débogueur, de l'accès à certaines fonctions de système et de la possibilité d'exécuter des scripts.


<div class="mw-translate-fuzzy">
Même si R n'a pas été développé pour le calcul de haute performance, sa popularité au sein de plusieurs disciplines scientifiques incluant le génie, les mathématiques, la statistique et la bio-informatique, en fait un outil essentiel sur les supercalculateurs dédiés à la recherche universitaire. Certaines fonctionnalités étant écrites en C, compilées et parallélisées par fils d'exécution, permettent d'atteindre des performances raisonnables sur un seul nœud de calcul. Grâce à la nature modulaire de R, les utilisateurs peuvent personnaliser leur configuration en installant des paquets dans leur répertoire personnel à partir du ''Comprehensive R Archive Network'' ([https://cran.r-project.org/ CRAN]).
Même si R n'a pas été développé pour le calcul de haute performance, sa popularité au sein de plusieurs disciplines scientifiques incluant le génie, les mathématiques, la statistique et la bio-informatique, en fait un outil essentiel sur les supercalculateurs dédiés à la recherche universitaire. Certaines fonctionnalités étant écrites en C, compilées et parallélisées par fils d'exécution, permettent d'atteindre des performances raisonnables sur un seul nœud de calcul. Grâce à la nature modulaire de R, les utilisateurs peuvent personnaliser leur configuration en installant des paquets dans leur répertoire personnel à partir du ''Comprehensive R Archive Network'' ([https://cran.r-project.org/ CRAN]).
</div>


Vous trouverez peut-être des informations utiles dans le billet de blogue de l'utilisatrice Julie Fortin intitulé [https://medium.com/the-nature-of-food/how-to-run-your-r-script-with-compute-canada-c325c0ab2973 ''How to run your R script with Compute Canada''].
Vous trouverez peut-être des informations utiles dans le billet de blogue de l'utilisatrice Julie Fortin intitulé [https://medium.com/the-nature-of-food/how-to-run-your-r-script-with-compute-canada-c325c0ab2973 ''How to run your R script with Compute Canada''].
Line 52: Line 54:
{{Command|Rscript computation.R}}
{{Command|Rscript computation.R}}


Cette commande passera automatiquement les options appropriées pour un traitement en lot, soit <tt>--slave</tt> et <tt>--no-restore</tt> à l'interpréteur R. Ces options empêcheront la création de fichiers d'espace de travail inutiles avec <tt>--no-save</tt> lors d'un traitement en lot.  
<div class="mw-translate-fuzzy">
Cette commande passera automatiquement les options appropriées pour un traitement en lot, soit <tt>--slave</tt> et <tt>--no-restore</tt> à l'interpréteur R. Ces options empêcheront la création de fichiers d'espace de travail inutiles avec <tt>--no-save</tt> lors d'un traitement en lot.
</div>


'''Les calculs d'une durée de plus de deux ou trois minutes ne devraient pas être exécutés par un nœud de calcul, mais être soumis à l'ordonnanceur.'''   
'''Les calculs d'une durée de plus de deux ou trois minutes ne devraient pas être exécutés par un nœud de calcul, mais être soumis à l'ordonnanceur.'''   
Line 75: Line 79:
=== install.packages() ===
=== install.packages() ===


<div class="mw-translate-fuzzy">
Pour installer des paquets de [https://cran.r-project.org/ CRAN], vous pouvez utiliser la commande <tt>install.packages</tt> dans une session R interactive opérant sur le nœud de connexion. Comme plusieurs paquets R sont développés avec la famille de compilateurs [[GNU Parallel/fr|GNU]] nous recommandons de charger un [[Utiliser des modules|module]] <tt>gcc</tt> avant d'installer un paquet R. Utilisez la même version de <tt>gcc</tt> pour tous les paquets que vous installez.
Pour installer des paquets de [https://cran.r-project.org/ CRAN], vous pouvez utiliser la commande <tt>install.packages</tt> dans une session R interactive opérant sur le nœud de connexion. Comme plusieurs paquets R sont développés avec la famille de compilateurs [[GNU Parallel/fr|GNU]] nous recommandons de charger un [[Utiliser des modules|module]] <tt>gcc</tt> avant d'installer un paquet R. Utilisez la même version de <tt>gcc</tt> pour tous les paquets que vous installez.


Line 82: Line 87:
==== Installation pour une version particulière de R ====
==== Installation pour une version particulière de R ====
Par exemple, pour installer le paquet <tt>sp</tt> qui offre des classes et des méthodes pour les données spatiales, utilisez cette commande sur un nœud de connexion.
Par exemple, pour installer le paquet <tt>sp</tt> qui offre des classes et des méthodes pour les données spatiales, utilisez cette commande sur un nœud de connexion.
</div>


{{Command
{{Command
Line 90: Line 96:
}}
}}


<div class="mw-translate-fuzzy">
Si l'argument <tt>repos</tt> n'est pas spécifié, on vous demandera de sélectionnez un miroir pour le téléchargement. Idéalement, ce miroir sera géographiquement proche de la grappe que vous utilisez.
Si l'argument <tt>repos</tt> n'est pas spécifié, on vous demandera de sélectionnez un miroir pour le téléchargement. Idéalement, ce miroir sera géographiquement proche de la grappe que vous utilisez.
</div>


<div class="mw-translate-fuzzy">
Avant l'installation, certains paquets requièrent la définition de la variable d'environnement <tt>TMPDIR</tt>.
Avant l'installation, certains paquets requièrent la définition de la variable d'environnement <tt>TMPDIR</tt>.
</div>


==== Installation pour une ou plusieurs versions de R ====
==== Installation pour une ou plusieurs versions de R ====
Line 103: Line 113:
{{Command|R -e 'install.packages("sp", repos{{=}}"https://cloud.r-project.org/")'}}
{{Command|R -e 'install.packages("sp", repos{{=}}"https://cloud.r-project.org/")'}}


<div class="mw-translate-fuzzy">
Dans le script de soumission, vous devez ensuite charger le module R que vous voulez et configurer le répertoire local pour la bibliothèque avec  <tt>export R_LIBS=~/.local/R/$EBVERSIONR/</tt>.
Dans le script de soumission, vous devez ensuite charger le module R que vous voulez et configurer le répertoire local pour la bibliothèque avec  <tt>export R_LIBS=~/.local/R/$EBVERSIONR/</tt>.
</div>


=== Dépendances ===
=== Dépendances ===
Line 116: Line 128:
Si l'installation d'un paquet échoue, portez attention au message d'erreur qui pourrait indiquer d'autres modules qui seraient requis. Pour plus d'information sur les commandes de <code>module</code>, consultez [[Utiliser des modules]].
Si l'installation d'un paquet échoue, portez attention au message d'erreur qui pourrait indiquer d'autres modules qui seraient requis. Pour plus d'information sur les commandes de <code>module</code>, consultez [[Utiliser des modules]].


<div class="mw-translate-fuzzy">
===Téléchargement de paquets===
===Téléchargement de paquets===
Si vous cherchez à installer un paquet que vous avez téléchargé, c'est-à-dire que vous n'avez pas utilisé <code>install.packages()</code>, vous pouvez l'installer comme suit. Par exemple, avec le paquet <tt>archive_package.tgz</tt>, vous exécuteriez la commande suivante dans l'interpréteur (''shell'') :  
Si vous cherchez à installer un paquet que vous avez téléchargé, c'est-à-dire que vous n'avez pas utilisé <code>install.packages()</code>, vous pouvez l'installer comme suit. Par exemple, avec le paquet <tt>archive_package.tgz</tt>, vous exécuteriez la commande suivante dans l'interpréteur (''shell'') :  
Line 122: Line 135:
|R CMD INSTALL -l 'path for your local (home) R library' archive_package.tgz
|R CMD INSTALL -l 'path for your local (home) R library' archive_package.tgz
}}
}}
</div>


==Appels système==
==Appels système==


<div class="mw-translate-fuzzy">
La commande R <tt>system()</tt> permet d'exécuter des commandes dans l'environnement actif, à l'intérieur de R; ceci risque de causer des problèmes sur nos grappes parce que R donne une valeur incorrecte à la variable d'environnement <tt>LD_LIBRARY_PATH</tt>. Utilisez plutôt la syntaxe <tt>system("LD_LIBRARY_PATH=$RSNT_LD_LIBRARY_PATH <my system call>")</tt> dans vos appels système.
La commande R <tt>system()</tt> permet d'exécuter des commandes dans l'environnement actif, à l'intérieur de R; ceci risque de causer des problèmes sur nos grappes parce que R donne une valeur incorrecte à la variable d'environnement <tt>LD_LIBRARY_PATH</tt>. Utilisez plutôt la syntaxe <tt>system("LD_LIBRARY_PATH=$RSNT_LD_LIBRARY_PATH <my system call>")</tt> dans vos appels système.
</div>




Line 174: Line 190:
==Parallélisation==
==Parallélisation==


Si les processeurs de nos grappes sont on ne peut plus ordinaires, ce qui rend ces ''supercalculateurs'' intéressants, c'est qu'ils offrent des milliers de CPU sur un réseau très performant. Pour profiter de cet avantage, vous devez utiliser la programmation parallèle. Cependant, avant d'allouer beaucoup de temps et d'effort à paralléliser votre code R, assurez-vous que votre implémentation série est aussi efficiente que possible. Comme dans tout langage interprété, d'importants goulots d'étranglement (''bottlenecks'') sont causés par les boucles et particulièrement les boucles imbriquées, ce qui a un impact sur la performance. Lorsque possible, essayez d'utiliser les fonctions vectorielles et les autres éléments plus fonctionnels comme la famille des fonctions <tt>apply</tt> et la fonction <tt>ifelse</tt>. Vous obtiendrez souvent un gain de performance en éliminant une boucle plutôt que de paralléliser son exécution avec plusieurs cœurs CPU.  
<div class="mw-translate-fuzzy">
Si les processeurs de nos grappes sont on ne peut plus ordinaires, ce qui rend ces ''supercalculateurs'' intéressants, c'est qu'ils offrent des milliers de CPU sur un réseau très performant. Pour profiter de cet avantage, vous devez utiliser la programmation parallèle. Cependant, avant d'allouer beaucoup de temps et d'effort à paralléliser votre code R, assurez-vous que votre implémentation série est aussi efficiente que possible. Comme dans tout langage interprété, d'importants goulots d'étranglement (''bottlenecks'') sont causés par les boucles et particulièrement les boucles imbriquées, ce qui a un impact sur la performance. Lorsque possible, essayez d'utiliser les fonctions vectorielles et les autres éléments plus fonctionnels comme la famille des fonctions <tt>apply</tt> et la fonction <tt>ifelse</tt>. Vous obtiendrez souvent un gain de performance en éliminant une boucle plutôt que de paralléliser son exécution avec plusieurs cœurs CPU.
</div>


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 183: Line 201:
The following subsections contain some further notes and examples.
The following subsections contain some further notes and examples.


<div class="mw-translate-fuzzy">
'''Terminologie''' : Dans notre documentation, les termes ''nœud'' et ''hôte'' sont quelquefois employés pour désigner un ordinateur distinct; un regroupement de ''nœuds'' ou d'''hôtes'' constitue une ''grappe''.  
'''Terminologie''' : Dans notre documentation, les termes ''nœud'' et ''hôte'' sont quelquefois employés pour désigner un ordinateur distinct; un regroupement de ''nœuds'' ou d'''hôtes'' constitue une ''grappe''.  
Par contre, dans la documentation pour R, le terme ''nœud'' désigne souvent un ''processus de travail'' (worker process); un regroupement de ces processus constitue une ''grappe''. Prenons comme exemple la citation suivante : «&nbsp;Following '''snow''', a pool of worker processes listening ''via'' sockets for commands from the master is called a 'cluster' of nodes.&nbsp;»<ref>https://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel.pdf</ref><br/>.
Par contre, dans la documentation pour R, le terme ''nœud'' désigne souvent un ''processus de travail'' (worker process); un regroupement de ces processus constitue une ''grappe''. Prenons comme exemple la citation suivante : «&nbsp;Following '''snow''', a pool of worker processes listening ''via'' sockets for commands from the master is called a 'cluster' of nodes.&nbsp;»<ref>https://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel.pdf</ref><br/>.
</div>


=== doParallel et foreach ===
=== doParallel et foreach ===
Line 263: Line 283:
Pour plus d'information sur comment soumettre des tâches, consultez [[Running jobs/fr|Exécuter des tâches]].
Pour plus d'information sur comment soumettre des tâches, consultez [[Running jobs/fr|Exécuter des tâches]].


<div class="mw-translate-fuzzy">
=== doParallel et makeCluster ===
=== doParallel et makeCluster ===
====Utilisation====
====Utilisation====
Il faut enregistrer le système dorsal (''backend'') en lui donnant le nom des nœuds, multiplié par le nombre voulu de processus. Par exemple, nous créerions une grappe composée des hôtes <tt>node1 node1 node2 node2</tt>. Le type de grappe ''PSOCK'' exécute des commandes par des connexions SSH vers les nœuds.
Il faut enregistrer le système dorsal (''backend'') en lui donnant le nom des nœuds, multiplié par le nombre voulu de processus. Par exemple, nous créerions une grappe composée des hôtes <tt>node1 node1 node2 node2</tt>. Le type de grappe ''PSOCK'' exécute des commandes par des connexions SSH vers les nœuds.
</div>


<div class="mw-translate-fuzzy">
====Exécution====
====Exécution====
1. Placer le code R dans un fichier script, ici <tt>test_makecluster.R</tt>.
1. Placer le code R dans un fichier script, ici <tt>test_makecluster.R</tt>.
Line 274: Line 297:
   |contents=
   |contents=
library(doParallel)
library(doParallel)
</div>


# Create an array from the NODESLIST environnement variable
# Create an array from the NODESLIST environnement variable
Line 298: Line 322:
}}
}}


<div class="mw-translate-fuzzy">
2. Copiez les lignes suivantes dans un script pour soumettre la tâche, ici <tt>job_makecluster.sh</tt>.
2. Copiez les lignes suivantes dans un script pour soumettre la tâche, ici <tt>job_makecluster.sh</tt>.
{{File
{{File
Line 309: Line 334:
#SBATCH --mem-per-cpu=512M      # mémoire par coeur CPU; valeur en Mo par défaut
#SBATCH --mem-per-cpu=512M      # mémoire par coeur CPU; valeur en Mo par défaut
#SBATCH --time=00:05:00        # temps (HH:MM:SS)
#SBATCH --time=00:05:00        # temps (HH:MM:SS)
</div>


module load gcc/9.3.0 r/4.0.2
module load gcc/9.3.0 r/4.0.2
35,877

edits

Navigation menu