Les ordinateurs, que ce soit les stations de travail ou les serveurs, sont habituellement peu sollicités. Et si vous dédiiez une partie de vos ressources inutilisées à des projets scientifiques communautaires grâce au projet BOINC ?
Introduction
BOINC (Berkeley Open Infrastructure for Network Computing) est une plateforme qui permet à des chercheurs d’utiliser des ressources de calculs distantes et hétérogènes, mises à disposition par des volontaires, pour réaliser leurs calculs. La plateforme affiche au 12 janvier 2018, une puissance moyenne de 21.506 Pétaflops fournie par 179 331 volontaires et leurs 857 635 ordinateurs.
Les projets cherchant à utiliser les ressources de la plateforme BOINC sont nombreux et de domaines qui vont de la recherche acoustique théorique, à des études de prédictions de climat. Les plus importants sont SETI@Home (astrophysique, https://setiathome.berkeley.edu/), Einstein@Home (astrophysique, https://einsteinathome.org/), LHC@Home (physique, https://lhcathome.cern.ch) et WorldCommunityGrid (médical, environnemental, recherche humanitaire, https://www.worldcommunitygrid.org/).
Ce tutoriel va vous montrer comment mettre votre ordinateur à disposition du projet World Community Grid (WCG par la suite) qui réalise des recherches sur les traitements de maladies comme Ebola, le virus du SIDA ou encore Zika. Le projet a été lancé par IBM en collaboration avec d’autres organismes en 2004. Il utilisait alors un outil propriétaire (GridMP) uniquement disponible sur Windows. En 2005, BOINC a commencé à être supporté et en 2008 il est devenu le seul outil pour participer au projet, ce qui permet désormais aux ordinateurs sous Linux, MacOS, FreeBSD et même Android de faire partie de la grille de calcul.
Figure 1
Pour contribuer à ce projet, il sera d’abord nécessaire de se créer un compte, d’installer le logiciel BOINC et ensuite de le configurer pour récupérer les fichiers qui serviront à réaliser les calculs sur votre ordinateur et à renvoyer les résultats au projet.
1. Prérequis
Ce tutoriel utilisera une distribution Fedora 27 installée sur une machine 64 bits. Boinc est disponible dans les gestionnaires de paquets de Fedora, Debian, Ubuntu, Gentoo et ArchLinux. Selon la distribution utilisée, certains chemins seront peut-être à adapter. Il est aussi possible de compiler BOINC. Le code source est écrit en C++, disponible sur https://github.com/BOINC/boinc et sous licence GNU LGPL.
Avant de commencer, il est néanmoins nécessaire de vérifier que l’ordinateur respecte les prérequis matériels nécessaires pour les différents projets du WCG [1]. Au niveau du matériel, aucune application fournie par WCG n’exploite encore les GPU, ce qui n’est pas le cas d’autres projets [2], si vous avez un GPU vous pourrez le mettre à contribution. Il est aussi parfois nécessaire d’installer des librairies additionnelles pour certaines applications, c’est également un point à vérifier sur le site du projet concerné.
BOINC est constitué d’un client, qui s’exécute en tâche de fond. Ce client exécute des applications issues de différents projets. On peut interagir avec le client via l’outil en ligne de commandes boinccmd. C’est ce que va couvrir ce tutoriel. Nous n’allons pas couvrir un outil graphique alternatif qui permet également de contrôler le client, « boinc-manager ». Ce dernier permet aussi de visualiser des représentations dans certaines applications.
Le gestionnaire graphique boinc-manager
Figure 2
Le gestionnaire graphique est disponible dans les dépôts Fedora, pour l’installer il suffit de taper la ligne suivante :
$ sudo dnf install boinc-manager
On peut ensuite le lancer par la commande du même nom :
$ boinc-manager &
Pour la suite, il faut explorer un peu les menus, mais comme c’est un outil graphique c’est assez intuitif.
2. Installer BOINC
Comme expliqué dans le paragraphe précédent, j’ai décidé d’utiliser la distribution Fedora, celle-ci fournit un paquet précompilé pour BOINC qui s’installe de la façon suivante :
$ sudo dnf install boinc-client
Une fois installé, il est nécessaire de le lancer, et de le paramétrer pour avoir à éviter de le faire manuellement à chaque démarrage de la machine. Ceci se fait de la façon suivante grâce à systemd.
$ sudo systemctl start boinc-client
$ sudo systemctl enable boinc-client
On va ensuite vérifier que l’on peut interagir correctement avec le client.
Pour cela, nous allons utiliser l’outil en ligne de commande boinccmd. Pour l’invoquer, il faut préciser l’hôte sur lequel s’exécute le client, et une chaîne qui se trouve dans le fichier /var/lib/BOINC/gui_rpc_auth.cfg et qui permet de s’authentifier auprès de l’instance en cours d’exécution. Cette chaîne pourra également permettre de s’authentifier à distance pour piloter un ordinateur distant.
$ boinccmd
usage: boinccmd [--host hostname] [--passwd passwd] [--unix_domain] command
default hostname: localhost
default password: contents of gui_rpc_auth.cfg
[...]
Par défaut, la commande boinccmd essaie de communiquer sur localhost et utilise le fichier gui_rpc_auth.cfg qui se trouve dans le répertoire dans lequel l’utilisateur lance la commande.
Pour pouvoir lancer boinc, il faut d’abord ajouter notre utilisateur au groupe boinc, et ensuite copier le fichier /var/lib/boinc/gui_rpc_auth.cfg dans le répertoire home de notre utilisateur.
Cela se fait en 3 étapes :
$ sudo usermod -a -G boinc user
$ sudo cp /var/lib/boinc/gui_rpc_auth.cfg /home/user
$ sudo chown user: /home/user/gui_rpc_auth.cfg
À partir de là ,il est possible de lancer les commandes boinccmd à partir de la home de notre utilisateur, sans utiliser sudo.
Nous allons donc lancer une première commande pour avoir un peu plus d’informations sur le client BOINC que l’on vient d’installer.
$ boinccmd –client_version
Très bien, boinccmd arrive à communiquer avec le client . Il est temps de passer à la suite.
On peut lancer un benchmark pour avoir un peu plus d’informations sur les performances de notre machine.
$ boinccmd –run_benchmarks
Le résultat est à lire dans le fichier /var/lib/boinc/stdoutdae.txt :
02-Jan-2018 22:38:16 [---] Running CPU benchmarks
02-Jan-2018 22:38:16 [---] Suspending computation - CPU benchmarks in progress
02-Jan-2018 22:38:16 [---] Running CPU benchmarks
02-Jan-2018 22:38:48 [---] Benchmark results:
02-Jan-2018 22:38:48 [---] Number of CPUs: 1
02-Jan-2018 22:38:48 [---] 3867 floating point MIPS (Whetstone) per CPU
02-Jan-2018 22:38:48 [---] 21451 integer MIPS (Dhrystone) per CPU
02-Jan-2018 22:38:49 [---] Resuming computation
Comme on peut le voir, la machine virtuelle utilisée pour la rédaction de ce tutoriel n’est pas une foudre de guerre.
3. Rejoindre un projet
S’enregistrer auprès d’un projet peut se faire de deux façons.
Soit en passant par le site web dudit projet. Auquel cas, il faut créer un compte manuellement via un formulaire, comme sur n’importe quel site web en somme. C’est ce qu’il faut faire pour WCG.
Mais il est également possible de faire la même chose en utilisant le client boinccmd directement. La commande s’utilise de la façon suivante :
$ boinccmd –create_account URL email password compte
Il faut donc trouver l’adresse du projet (URL) et passer en argument l’e-mail que l’on veut voir utiliser ainsi qu’un mot de passe et un nom d’utilisateur.
4. Attacher le client BOINC au projet
Une fois le compte créé, il faut que le client soit connecté au projet pour recevoir les données à traiter. Pour cela, il est nécessaire d’avoir la clef du compte, qui est une chaîne hexadécimale de 32 caractères et que l’on utilise en lieu et place du mot de passe.
Cette clef peut s’obtenir soit en se connectant sur le site internet du projet et en allant dans la section relative aux informations du compte, soit en passant par la ligne de commandes de la façon suivante :
$ boinccmd --lookup_account www.worldcommunitygrid.org email compte motdepasse
poll status: operation in progress
poll status: operation in progress
account key: abcdef1234567890abcdef1234567890
La clef correspondante s’affiche alors sur la sortie du terminal.
Attention !
Attention à ne pas confondre les deux clefs évoquées jusqu’ici, celle du compte obtenue via --lookup_account qui permet de s’identifier auprès du projet et celle figurant dans le fichier /var/lib/boinc/gui_rpc_auth.cfg qui permet de s’identifier à l’instance BOINC en exécution sur la machine.
On peut donc utiliser la commande suivante pour lier la machine au projet (par exemple pour WCG).
$ boinccmd --project_attach http://www.worldcommunitygrid.org/ abcdef1234567890abcdef1234567890
Une fois ceci fait, il faut désormais attendre que le client reçoive les premiers lots à traiter.
5. Vérifier la bonne exécution des calculs
Le plus simple est de vérifier la présence de processus liés au processus boinc_client.
$ ps auxf | grep boinc
boinc 887 0.0 0.8 324684 16440 ? SNsl 19:49 0:00 /usr/bin/boinc_client --daemon --start_delay 1
boinc 1005 60.8 2.3 121912 47412 ? SNl 19:49 3:00 \_ ../../projects/www.worldcommunitygrid.org/wcgrid_oet1_vina_7.19_x86_64-pc-linux-gnu -jobfile OET1_0005277_x4GV9_rig_60184.job -inputfile OET1_0005277_x4GV9_rig_60184.zip -seed 1727908956
Ces processus correspondent aux applications des différents projets.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1005 boinc 39 19 121912 47412 2300 S 66,4 2,3 4:59.34 wcgrid_oet1_vin
On peut voir plus de détails en utilisant la commande suivante, on notera l’état EXECUTING de la tâche et le nom que l’on retrouve dans la sortie de ps un peu plus haut.
$ boinccmd –get_tasks
1) -----------
name: OET1_0005277_x4GV9_rig_60184_0
WU name: OET1_0005277_x4GV9_rig_60184
project URL: http://www.worldcommunitygrid.org/
received: Wed Jan 3 19:38:18 2018
report deadline: Sat Jan 13 18:47:49 2018
ready to report: no
got server ack: no
final CPU time: 0.000000
state: downloaded
scheduler state: scheduled
exit_status: 0
signal: 0
suspended via GUI: no
active_task_state: EXECUTING
app version num: 719
checkpoint CPU time: 414.801300
current CPU time: 636.128300
fraction done: 0.100000
swap size: 119 MB
working set size: 46 MB
estimated CPU time remaining: 3412.972112
Il peut également être utile de regarder les logs de boinc pour obtenir des informations.
$ tail -f /var/lib/boinc/std*.txt
Il y a aussi certaines informations présentes sur le site du projet, dans la rubrique du compte client.
À partir de là, il reste à attendre que l’ordinateur finisse les calculs, envoie les résultats au serveur et que ceux-ci soient validés par le projet. On pourra voir dans les logs quelque chose de similaire à la ligne suivante.
04-Jan-2018 08:43:45 [World Community Grid] Sending scheduler request: To report completed tasks.
04-Jan-2018 08:43:45 [World Community Grid] Reporting 1 completed tasks
Les réglages
Les réglages peuvent se faire sur trois niveaux différents selon ce qui doit être modifié :
- au niveau du client via le fichier /var/lib/boinc/cc_config.xml [3] ;
- au niveau du projet (à gérer depuis le site internet) ;
- au niveau de l’exécution des calculs (valable pour tous les projets) dans le fichier /var/lib/boinc/global_prefs_override.xml [4] ;
Il existe un wiki qui récapitule tous les réglages possibles et leur utilité [5].
6. Participer à plusieurs projets
Attention !
Il est utile d’utiliser le même e-mail, le même nom d’utilisateur et le même mot de passe pour les comptes de tous les projets sous peine de voir les gestionnaires de compte ne pas fonctionner.
Pour faire participer une machine à plusieurs projets, il suffit de répéter les étapes 3 à 5 pour chacun d’entre eux. Par défaut, BOINC va passer un temps égal entre les applications des différents projets. On peut voir les applications des différents projets être exécutées en même temps :
$ ps auxf | grep boinc
boinc 5760 0.2 0.3 501344 30768 ? SNsl 2017 74:50 /usr/bin/boinc_client --daemon --start_delay 1
boinc 14795 0.0 0.4 141968 33932 ? SN 2017 1:35 \_ ../../projects/www.worldcommunitygrid.org/wcgrid_mcm1_7.36_x86_64-pc-linux-gnu -SettingsFile MCM1_0138544_5847.txt -DatabaseFile dataset-curatedOvarian_EarlyLate_v1.0.txt
boinc 28172 2.2 3.6 360132 299736 ? SNl 2017 392:14 \_ ../../projects/boinc.bakerlab.org_rosetta/minirosetta_3.78_x86_64-pc-linux-gnu -run:protocol jd2_scripting @flags_rb_12_23_80243_122334__t000__0_C1_robetta -silent_gz -mute all -out:file:silent default.out -in:file:boinc_wu_zip input_rb_12_23_80243_122334__t000__0_C1_robetta.zip -nstruct 10000 -cpu_run_time 28800 -boinc:max_nstruct 600 -checkpoint_interval 120 -database minirosetta_database -in::file::zip minirosetta_database.zip -boinc::watchdog -run::rng mt19937 -constant_seed -jran 2528564
boinc 14063 2.1 3.7 368744 307068 ? SNl 2017 221:44 \_ ../../projects/boinc.bakerlab.org_rosetta/minirosetta_3.78_x86_64-pc-linux-gnu @flags_rb_12_04_78552_121949__t000__ab_robetta -in:file:boinc_wu_zip input_rb_12_04_78552_121949__t000__ab_robetta.zip -in:file:fasta t000_.fasta -frag3 t000_.200.3mers.gz -fragB t000_.200.3mers.gz -fragA t000_.200.9mers.gz -constraints::cst_file t000_.fasta.CB.cst -constraints:cst_weight 3.0 -constraints::cst_fa_file t000_.fasta.MIN.cst -constraints:cst_fa_weight 3.0 -nstruct 10000 -cpu_run_time 28800 -boinc:max_nstruct 600 -checkpoint_interval 120 -mute all -database minirosetta_database -in::file::zip minirosetta_database.zip -boinc::watchdog -run::rng mt19937 -constant_seed -jran 2178824
boinc 17696 72.8 3.7 365472 305884 ? RNl 11:04 213:43 \_ ../../projects/boinc.bakerlab.org_rosetta/minirosetta_3.78_x86_64-pc-linux-gnu @flags_rb_01_03_79387_122591__t000__ab_robetta -in:file:boinc_wu_zip input_rb_01_03_79387_122591__t000__ab_robetta.zip -in:file:fasta t000_.fasta -frag3 t000_.200.3mers.gz -fragB t000_.200.3mers.gz -fragA t000_.200.9mers.gz -nstruct 10000 -cpu_run_time 28800 -boinc:max_nstruct 600 -checkpoint_interval 120 -mute all -database minirosetta_database -in::file::zip minirosetta_database.zip -boinc::watchdog -run::rng mt19937 -constant_seed -jran 1237571
boinc 17697 72.8 0.4 77056 37136 ? RNl 11:04 213:36 \_ ../../projects/www.worldcommunitygrid.org/wcgrid_mcm1_7.36_x86_64-pc-linux-gnu -SettingsFile MCM1_0139278_1147.txt -DatabaseFile dataset-curatedOvarian_EarlyLate_v1.0.txt
boinc 17698 72.7 0.0 21048 7052 ? RNl 11:04 213:25 \_ ../../projects/milkyway.cs.rpi.edu_milkyway/milkyway_1.46_x86_64-pc-linux-gnu -f -np 100 -p 0.997857 0.575056 -1.73541 135.004 17.1087 2.70363 2.96724 3.38158 -1.11074 200.335 23.1015 1.30217 3.62886 24.9922 -2.70496 190.096 15.2806 1.68324 2.84962 2.4966 0.997858 0.575134 -1.72616 135.003 17.1081 2.70313 2.9575 3.43264 -1.11314 203.382 23.0303 1.31195 3.62861 24.9902 -2.69513 190.08 15.2886 1.68029 2.85337 2.48972 0.997859 0.574904 -1.72831 135 17.0895 2.70247 2.95783 3.44438 -1.111 204.041 23.0969 1.30927 3.62709 24.9915 -2.69429 190.151 15.2641 1.67632 2.853 2.51053 0.997848 0.575484 -1.72519 135.004 17.1296 2.70159 2.97029 3.38433 -1.11123 200.764 23.2487 1.31509 3.62883 24.9871 -2.69415 190.083 15.2374 1.67412 2.85495 2.49068 0.997835 0.575433 -1.72934 135.018 17.1178 2.70236 2.96335 3.41267 -1.11279 203.621 23.0206 1.31721 3.62981 24.9965 -2.6961 190.081 15.2869 1.67578 2.87068 2.45829
boinc 2446 72.5 0.4 76856 36944 ? RNl 13:40 99:39 \_ ../../projects/www.worldcommunitygrid.org/wcgrid_mcm1_7.36_x86_64-pc-linux-gnu -SettingsFile MCM1_0139281_5721.txt -DatabaseFile dataset-curatedOvarian_EarlyLate_v1.0.txt
Utiliser deux comptes reste raisonnable, mais passé ce nombre cela commence à se complexifier, il faut passer sur le site de chaque projet pour paramétrer et associer les machines. Dans le cas où l’on a fait une erreur, il est également difficile de s’y retrouver. La section suivante présente un outil qui permet de s’y retrouver un peu mieux.
Aller plus loin : faire participer plusieurs ordinateurs
Lorsqu’on dispose de plusieurs ordinateurs, il est nécessaire de rattacher chacun d’eux au projet comme le décrit l’étape 4.
On peut les piloter chacun localement grâce au client boinccmd qui sera installé sur chaque machine, mais il est également possible de le faire de façon centralisée depuis un poste linux. Pour cela, il est nécessaire d’avoir un accès SSH à la machine et d’avoir récupéré le contenu du fichier /var/lib/boinc/gui_rpc_auth.cfg :
$ ssh root@serveur cat /var/lib/boinc/gui_rpc_auth.cfg
$ ssh -L 31416:localhost:31416 root@serveur
Cette commande redirige le port 31416 du serveur où tourne BOINC sur notre ordinateur, nous permettant d’y accéder sans avoir à ouvrir le port distant. On pilote ou récupère des informations de l’instance distante de BOINC comme dans l’exemple suivant :
$ boinccmd –host localhost –passwd a1b2c3d4e5f8a1b2c3d4e5f8a1b2c3d4 --get_state
Il est également possible de faire la même chose avec boinc-manager, le client graphique.
Pour cela, il faudra le lancer une première fois, passer l’affichage dans le mode avancé, ensuite aller décocher Lancer le démon dans Options > Autres options pour éviter d’avoir l’instance BOINC qui se lance sur notre ordinateur et s’approprie le port 31416. Ensuite, on choisira Fichier > Quitter boinc manager, et on le relancera après avoir lancé la redirection de port via SSH. Cela nous permettra de nous connecter en choisissant Fichier > Sélectionner un ordinateur et en spécifiant comme hôte localhost et comme mot de passe a1b2c3d4e5f8a1b2c3d4e5f8a1b2c3d4.
7. Utiliser un gestionnaire de comptes
La difficulté liée à la gestion de plusieurs projets peut être réduite en utilisant un gestionnaire de compte tel que BAM! (BOINC Account Manager : https://boincstats.com) ou Grid Republic (https://gridrepublic.org).
Ils permettent de regrouper la gestion des comptes des différents projets et d’avoir une politique de préférences commune, ce qui peut être difficile avec de nombreux projets gérés un à un. Ils permettent également d’avoir des statistiques globales sur la participation au projet BOINC.
Une fois tous les comptes regroupés au sein d’un des gestionnaires (sur le site), on peut faire en sorte qu’une machine se lie au gestionnaire de comptes au lieu de chaque projet individuellement. Il ne reste plus qu’à exécuter la commande suivante sur chaque machine que l’on souhaite voir participer au projet :
$ boinccmd –join_acct_mgr URL name password
Cela permet aussi de gérer plus facilement quels projets associer à quelle machine dans le cas où l’on a plusieurs ordinateurs dédiés à BOINC.
BOINC et la recherche scientifique
Pour ceux qui aimeraient voir ce qu’il advient des calculs qu’ils exécutent, il est enfin intéressant de voir que les contributions aux projets utilisant BOINC ont permis la publication de nombreux articles scientifiques [6]. Avec le projet SETI@Home qui existe depuis 1999, on peut avoir l’impression qu’ils n’aboutissent jamais, mais certains sont bel et bien arrivés à leur terme, comme ABC@Home ou Sudoku@vtaiwan.
Conclusion
Boinc est un logiciel complexe, ses réglages peuvent paraître difficiles à appréhender au premier abord. C’est en partie vrai, mais ne vous en faites pas, les réglages par défaut devraient suffire pour commencer. Lorsque vous aurez rejoint plusieurs projets, vous pourrez utiliser un gestionnaire d’identité pour centraliser les configurations et vous plonger dans les réglages possibles si nécessaire. Ensuite, vous pourrez mettre plusieurs de vos ordinateurs à contribution si vous le désirez. Tout ceci devrait vous permettre de contribuer de façon volontaire à la recherche scientifique depuis chez vous.
Références
[1] https://www.worldcommunitygrid.org/help/viewTopic.do?shortName=minimumreq
[2] https://boinc.berkeley.edu/projects.php
[3] https://boinc.berkeley.edu/wiki/Client_configuration
[4] https://boinc.berkeley.edu/wiki/PreferencesXml
[5] https://boinc.berkeley.edu/w/?title=Preferences&oldid=6284
[6] https://boinc.berkeley.edu/wiki/Publications_by_boinc_projects