ISI Systèmes Distribués et Cloud avancé

De Ensiwiki
Aller à : navigation, rechercher


"Systèmes Distribués", ISI (ex 1ère partie de "Systèmes Distribués et Cloud Avancé", ISI)

Contenu des séances pour ceux étant à distance (Covid et al.)

Les vidéos du cours sur les communications dans les systèmes distribuées sont sur une page gitlab avec les liens vers les vidéos

Séance 1: Introduction, Projet, TP de prise en main de Grid5000, TP de prise en main de MPI

  • Introduction (Slides PDF présentés en introduction); Projet: Teide, Gitlab, Grid5000, choix de votre plateforme; Introduction à MPI sous forme de TP: lancé de rayon distribué (MPI) Archive Raytracing incluant le sujet
  • A faire Absolument pour ceux étant à distance:
    • s'enregistrer dans une équipe (Teide) et choisir le sujet du projet
    • ouvrir son compte grid5000. Il faut demander le renvoi du mail d'inscription si vous ne l'avez pas reçu (Bug de la nouvelle procédure G5K)
    • faire le TP de prise en main de grid5000.fr
    • faire le TP de prise en main de MPI

MPI, Cours, Projet)

Vieilles notes de cours

TP MPI "prise en main"

MPI sur les machines Ensimag, ssh avec kerberos

  • Pour compiler sur CentOS 7 (Ensimag), vous aurez besoin de rajouter le chemin des exécutables et le chemin des bibliothèques avec les lignes suivantes pour votre .bashrc
   export PATH=$PATH:/usr/lib64/openmpi/bin
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib
   export MANPATH=$MANPATH:/usr/share/man/openmpi-x86_64
  • Pour contourner le bug de montage du home, il suffit de se connecter une fois par jour avec ssh en utilisant le mot de passe.
    ssh -o PreferredAuthentications=password ensipcXYZ
  • Pour contourner un bug lié à CentOs 7.3 dans la détection des réseaux rapides (ensipc18.15913hfi_wait_for_device: The /dev/hfi1_0 device failed to appear after 15.0 seconds: Connection timed out)
   mpirun --mca pml ob1 ...


  • Pour que les message circulent entre les machines de l'Ensimag vous aurez besoin de positionner aussi l'interface réseau à utiliser

Pour trouver l'interface réseau par défaut (celle avec 129.88..., enp4s0 ou em1 par exemple)

   /sbin/ifconfig

Puis

   export OMPI_MCA_btl_tcp_if_include=enp4s0

ou bien vous devrez positionner l'option suivante de mpirun à chaque lancement

   mpirun --mca btl_tcp_if_include enp4s0 ...

ou bien si c'est em1 et pas enp4s0

   mpirun --mca btl_tcp_if_include em1 ...


MPI sur des machines utilisant ssh avec des clefs publiques/privés

  • Si vous avez mis une passphrase à votre clef, vous pouvez propager votre agent
   mpirun --mca pls_rsh_agent "ssh -A" ...

ou bien dans votre bashrc

   export OMPI_MCA_pls_rsh_agent="ssh -A" ...
  • Pour ne pas demander de confirmation à la première connexion à une machine
   mpirun --mca pls_rsh_agent "ssh -o StrictHostKeyChecking=no"


Les variables changées dans le bashrc fonctionneront pour tout nouveau shell. Pour un shell déjà lancé, penser à faire source ~/.bashrc

TP MPI "correction simpliste"


TP Simgrid

Projet

Attendus

  • Il comporte trois volets:
  1. faire fonctionner l'application en distribuée (pour début décembre)
  2. être capable de faire des expérience automatiques dans grid5000 et avoir planifier les expériences à faire (pour début janvier)
  3. avoir fait les expériences et présenter une analyse des résultats
  • Une présentation (slides, PDF), orateur tiré au hasard dans l'équipe.
  • Le code de votre application (gitlab de l'ensimag)
  • les codes annexes (script de déploiement, lancement des mesures de performances)
  • La présentation incluera des mesures de performances réalisées sur Grid5000. La qualité du message scientifique sera prépondérante dans la notation de cette partie. Cela implique d'avoir des mesures pertinentes. Mesurer des performances avec des instances inadaptés à la machine ou la plate-forme, n'a que peu d'intérêt (exemple: instances trop petite). Pour avoir des mesures pertinentes, il faudra donc adapter vos instances de tests.

Algorithme distribué au choix

Un article sur un algorithme distribué, dans les conférences suivantes:

  • PODC:ACM Symposium on Principles of Distributed Computing
  • PPoPP: Principles and Practice of Parallel Programming
  • IPDPS: IEEE International Parallel and Distributed Processing Symposium (was IPPS and SPDP)
  • ICDCS: International Conference on Distributed Computing Systems
  • DISC: International Symposium on Distributed Computing (was WDAG)

Make Distribué

Le sujet et les makefile d'exemples sont dans l'entrepôt suivant:

 https://gitlab.ensimag.fr/5MMSYSD/2020-2021/ensimag-parmake


Quelques idées de plateformes possibles

  • Variantes autour de MPI + threads géré par un langage (support multi-threads obligatoire)
    • MPI + OpenMP
    • MPI + TBB
  • Bibliothèques de haut-niveaux
    • Charm++ (Bibliothèque C++)
    • Python celery, IPythonParallel
    • DRb Ruby
    • async_parallel ou distributed OCaml;
    • Hadoop, le Map-Reduce de Apache (installation difficile)
    • Apache Spark, Beam, Fink, etc. (Analyse de données, Scala/Java/Python/R)
  • Les languages dédiés
  • Les objets distribués
    • RMI avec java ou Clojure;
    • DO de Objective-C (gnustep);
    • Distributed ADA (polyorb);
    • Python + Pyro;
    • RPC Go (de la bib. standard, http://golang.org);
    • Apache Thrift (facebook) + Perl, Go, D ou Haskell;
    • Rust + Tonic (gRPC)
  • Autres
    • Zero-MQ (bibliothèque de socket de haut niveaux (ex: diffusion, bus, ...))
    • nanomsg (fille de zero-mq, plus simple, pour C)
    • Simgrid (simulation) (il faudra mesurer et simuler les clusters de g5k)
    • Un autre framework que vous rêvez d'utiliser peut se négocier

Enseignants