====== 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