====== Folding@Home sur CentOS/RHEL 8.x ======
===== Le projet =====
Le principe de [[https://foldingathome.org|Folding@Home]] est de distribuer des calculs scientifiques sur plusieurs milliers de machines personnelles ou professionnelles dans le monde, de manière décentralisée, afin de fournir une capacité de calculs peu cher et surtout très importante.
Les calculs servent à traiter des modélisations de protéines, de génomes en vue de comprendre, développer des traitements ou vaccins de maladies comme les cancers, les maladies neurologiques, les virus... Ces traitements demandent des capacités démentielles et cette capacité décentralisée est très recherchée.
En ce moment, la capacité de calcul a considérablement augmentée pour faciliter la recherche sur le SARS-Cov-v2, le coronavirus chinois qui provoque le COVID-19.
Les gamers ont des ordinateurs très puissants et la capacité GPU obtenue à partir des cartes graphiques est particulièrement recherchée. Participer au projet uniquement avec du calcul CPU ou les deux est possible également.
La puissance cumulée de ces PC reliés entre eux correspond à la somme des premiers plus gros ordinateurs au monde! [[https://stats.foldingathome.org/os|Regardez par vous même!]]
* [[https://foldingathome.org/covid19|L'actualité sur le COVID-19]]
===== Statistiques =====
* https://stats.foldingathome.org/os
* https://stats.foldingathome.org/teams-monthly
===== Pré-requis =====
==== passkey ====
Commencer par renseigner les informations suivantes pour recevoir une passkey par mail.
* [[https://apps.foldingathome.org/getpasskey|Obtenir une passkey]]
Cette passkey sert à s'assurer que votre nom d'utilisateur ne soit pas usurpé pour que vos statistiques de contributions soient bien les vôtres.
==== Nvidia GPU ====
Pour le moment nvidia n'affiche pas le support de RHEL 8 (uniquement RHEL 7). Ce qui suit fonctionne pour l'installation du driver nvidia mais pas du support complet du GPU pour le folding
* Pour utiliser le GPU d'une carte nvidia : https://github.com/yurinnick/folding-at-home-docker/blob/master/docs/gpu_support.md
* Installer le driver graphique nvidia pour utiliser le GPU : https://access.redhat.com/solutions/4134401
* Idem pour Centos 8 : https://linuxconfig.org/redhat-8-nvidia-driver-install-guide
Installer Nvidia Container Toolkit
* Methode d'installation : https://github.com/NVIDIA/nvidia-docker
* Repo docker nvidia officiel : https://nvidia.github.io/nvidia-docker/
===== podman/systemd/rootless =====
==== Installation ====
Il est possible [[https://foldingathome.org/start-folding|d'installer les outils directement]] dans votre OS en rpm.
Le concept distribué de folding at home est de déclencher depuis Internet des exécutions sur votre poste. D'un point de vue sécurité c'est un énorme problème si jamais des attaques malicieuses sont exécutées.
Pour s'assurer d'exécuter les chantiers sur votre PC en sécurité, c'est à dire le plus isolé possible de votre système, voici quelques bonnes pratiques que nous allons suivre
* limiter au maximum le périmètre d'exécution dans l'OS par l'usage de l'application folding-at-home en container
* le container permet aussi de ne pas installer des vieilles dépendances python2 qui ne sont plus supportées sur toutes les distributions récentes Ubuntu 20.04 ou CentOS/RHEL 8.x
* usage d'un utilisateur simple non-root pour exécuter le container avec podman et dédié à cet usage (pas le même que votre utilisateur usuel). La portée des données accessible de cet utilisateur en cas de compromission sera uniquement son dossier personnel, pas le votre
* Installation compatible d'un usage SELinux en enforced (activé pleinement)
==== Créer le container ====
Cette documentation se concentre sur la mise en oeuvre du container mais pas à la base de l'image officielle qui est très basique et pas simple à configurer.
La communauté utilise massivement [[https://hub.docker.com/r/yurinnick/folding-at-home|les images de containers de ce contributeur]] beaucoup plus simple à utiliser et mieux documentées.
Commande simple (à ne pas exécuter telle quelle) avec la liste des options possibles.
podman run \
--name folding-at-home \
-p 7396:7396 \
-p 36330:36330 \
-e USER= \
-e TEAM=51 \
-e ENABLE_GPU=[true|false] \
-e ENABLE_SMP=true \
-e PASSKEY= \
-e POWER=[full|medium|light] \
--detach=true \
--restart=on-failure \
yurinnick/folding-at-home:[latest|latest-nvidia]
Création du container initial. Options concrètes pour mon usage.
podman run \
--name folding-at-home \
-p 7396:7396 \
-p 36330:36330 \
-e USER= \
-e TEAM=51 \
-e ENABLE_GPU=false \
-e ENABLE_SMP=true \
-e PASSKEY= \
-e POWER=medium \
--detach=true \
--restart=on-failure \
yurinnick/folding-at-home:latest-nvidia
Par défaut podman est en rootless ce qui signifie exécution en environnement utilisateur. En conséquence, même root ne voit pas les containers exécutés depuis un simple user.
==== Exécution automatique systemd ====
La bonne approche est de créer une unit systemd utilisateur (pas root) générée par podman qui va permettre de lancer automatiquement le container au démarrage du système et l'arrêter à l'arrêt de l'OS.
La doc officielle :
* https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/using-systemd-with-containers_building-running-and-managing-containers
* https://www.redhat.com/sysadmin/podman-shareable-systemd-services
Toutes les commandes suivantes sont à exécuter en utilisateur simple, pas root
Création du dossier initial de l'unit systemd
mkdir -p ~/.config/systemd/user
Vérifier que le container est démarré.
podman ps
Générer le fichier unit systemd avec la commande podman prévue à cet effet
podman generate systemd --name folding-at-home > ~/.config/systemd/user/folding-at-home.service
cat ~/.config/systemd/user/folding-at-home.service
# container-folding-at-home.service
# autogenerated by Podman 1.6.4
# Sun Apr 26 17:30:07 CEST 2020
[Unit]
Description=Podman container-folding-at-home.service
Documentation=man:podman-generate-systemd(1)
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start folding-at-home
ExecStop=/usr/bin/podman stop -t 10 folding-at-home
KillMode=none
Type=forking
PIDFile=/run/user/1000/overlay-containers/b4e479b9ecc9bca287e6e42e9ab5cdf2441e9958eea530cc8aefa110628097fb/userdata/conmon.pid
[Install]
WantedBy=default.target
Attention, il faut modifier ''WantedBy=multi-user.target'' généré par défaut par ''WantedBy=default.target''. Sinon, le container ne sera pas démarré parce qu'un utilisateur simple ne peut pas accéder à la target multi-user par defaut (root uniquement).
Stopper le container
podman stop folding-at-home
Recharger la configuration systemd utilisateur pour prise en compte du nouveau fichier d'unit
systemctl --user daemon-reload
systemctl --user status folding-at-home.service
Démarrer le container par systemd
systemctl --user start folding-at-home.service
systemctl --user status folding-at-home.service
Arrêter le container par systemd
systemctl --user stop folding-at-home.service
systemctl --user status folding-at-home.service
Vérifier que le container est bien stoppé
podman ps
Activer l'exécution de la unit systemd au démarrage
systemctl --user enable folding-at-home.service
systemctl --user status folding-at-home.service
Pour voir le traitement en cours
podman logs -f folding-at-home