Le principe de 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! Regardez par vous même!
Commencer par renseigner les informations suivantes pour recevoir une passkey par mail.
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.
Installer Nvidia Container Toolkit
Il est possible 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
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 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=<your_user> \ -e TEAM=51 \ -e ENABLE_GPU=[true|false] \ -e ENABLE_SMP=true \ -e PASSKEY=<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=<your_user> \ -e TEAM=51 \ -e ENABLE_GPU=false \ -e ENABLE_SMP=true \ -e PASSKEY=<your_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.
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 :
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