wiki:Modipsl_titane

Version 2 (modified by acosce, 13 years ago) (diff)

--

Utiliser Modipsl sur titane

Environnement minimum

Vous devez charger explicitement la bonne bibliothèque NetCDF. Pour cela il faut faire la commande :

module load netcdf/3.6.3

Vous pouvez également la rajouter dans votre environnement.

Compiler le modèle IPSLCM5A

  • il faut supprimer les 2 clés : "key_vectopt_loop key_vectopt_memory" dans config/IPSLCM5A/AA_make
  • il faut explicitement demander l'utilisation de 5 processeurs pour NEMO. Sinon le message est :
    xmlf90 ../../../lib/libioipsl.a -L/applications/netcdf-3.6.3/lib -lnetcdff -lnetcdf
    /applications/intel/cprof/11.1.056/lib/intel64/libimf.so: warning: warning: feupdateenv is not implemented and will always fail
    ../../../lib/libopa.a(opa.o): In function `opa_mp_opa_model_':
    opa.F90:(.text+0x2a5): relocation truncated to fit: R_X86_64_PC32 against symbol `dom_oce_mp_narea_' defined in COMMON section in ../../../lib/libopa.a(dom_oce.o)
    opa.F90:(.text+0x8bb): relocation truncated to fit: R_X86_64_PC32 against symbol `in_out_manager_mp_nprint_' defined in COMMON section in ../../../lib/libopa.a(in_out_manager.o)
    ...
    opa.F90:(.text+0xa4d): additional relocation overflows omitted from the output
    gmake[2]: *** [../../../bin/opa] Error 1
    

La correction à faire est la suivante :

dans modipsl/modeles/NEMO/WORK/par_oce.F90 (lignes 29-31)
      jpni   = 1,                   &  !: number of processors following i
      jpnj   = 5,                   &  !: number of processors following j
      jpnij  = 5                       !: nb of local domain = nb of
processors

Lancer IPSLCM5A sur la machine Titane (machine Xeon du CCRT)

  • Etape préalable : assurez-vous que votre login est autorisé à tourner sur la machine titane à l'aide de la commande groups :
    mercure - /home/cont003/p86caub : groups
    

Si ce n'est pas le cas, demandez l'autorisation au CCRT en passant par votre responsable de projet.

Les étapes à faire sont les mêmes que pour tourner le modèle IPSLCM5A sur mercure, a ceci près :

  • Avant la compilation ET l'exécution, il faut charger les modules nécessaires :
    module load netcdf/3.6.3
    
  • N'oubliez pas de verifier que votre PATH contient bien le path pour l'outil FCM. Plus d'infos .
  • Avant la génération du Job de soumission via la commande ./ins_job, il faut préciser le nombre de CPUs demandés dans le config.card en mettant la variable JobNumProcTot à 32. Par défaut, cela signifie que la composante atmosphérique tournera sur 30 CPUs alors que la composante océanique et le coupleur utiliseront chacun 1 CPU.
JobNumProcTot=32
  • La soumission du job se fait à l'aide de la commande ccc_msub
ccc_msub Job
  • A noter, que les post-traitements s'effectueront sur la machine cesium.

Rappel : Pour que cela marche il faut avoir créé des clés avec une passphrase vide pour ssh et s'être connecté sur cesium au moins une fois. (Attention, si vous vous servez pour vos connexions de clés ssh déjà générées avec des passphrases non vides de ne pas les écraser.)
Mémo :

mercure : cd ~/.ssh
mercure : ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cont003/xxxxxx/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): (RETURN)
Enter same passphrase again: (RETURN)
Your identification has been saved in ...../.ssh/id_rsa.
Your public key has been saved in ...../.ssh/id_rsa.pub.
The key fingerprint is:
af:....
mercure : cat id_rsa.pub >>authorized_keys
mercure : ssh cesium
  • Pour améliorer légerement les performances :

La configuration par défaut du modèle couplé à la résolution 96x95x39 est quasiment équilibrée, cad que le modèle d'atmosphère sur 30 CPUs est très légerement plus rapide que le modèle d'ocean sur 1 CPU.
1 jour simulé par LMDZ sur 30 CPUs : 25s
1 jour simulé par NEMO sur 1 CPU : 27s
ce qui donne 1 mois simulé en 900s (par comparaison on a 1 mois simulé en 600s sur 4 CPUs SX9).

On voit donc que c'est le modèle d'océan qui va "guider" le temps de restitution du modèle couplé complet. En utilisant 2 process MPI pour l'océan on obtient :
1 jour simulé par LMDZ sur 29 CPUs : 25s
1 jour simulé par NEMO sur 2 CPU : 15s
ce qui va donner 1 mois simulé en 840s.

On voit donc que désormais, c'est le modèle d'atmosphère qui va "guider" le temps de restitution du modèle couplé complet. Mais à cette résolution là, il n'est pas possible d'utiliser plus de process pour LMDZ en parallélisation MPI seule (limite à 3 bandes de latitudes par process MPI).

La configuration idéale est donc : 29 CPUs ATM, 2 CPUs OCE et 1 CPU pour Oasis (lorsque PISCES n'est pas activé). Si PISCES est activé (c'est le cas avec IPSLCM5A CMIP5) la configuration ideale est : 26 CPUs ATM, 5 CPUs OCE et 1 CPU pour Oasis Pour activer cette configuration-là, deux étapes sont nécessaires :

  • Compilation :
    • Pour des raison de qualité (restartabilité NEMO), enlever les cles cpp suivantes pour la compilation : key_vectopt_loop key_vectopt_memory. Pour faire cela :
      vi modipsl/config/IPSLCM5A/AA_make 
      supprimer les cles cpp "key_vectopt_loop key_vectopt_memory" de la varibale P_P à la ligne :
      
      orca2: ../../modeles/NEMO/WORK
             (cd ../../modeles/NEMO/WORK; P_P='key_trabbl_dif key_vectopt_loop key_vectopt_memory ...
      
      cd modipsl/util ; ./ins_make
      
    • Compiler NEMO pour qu'il tourne sur 5 process MPI en modifiant directement le code :
      vi modipsl/modeles/NEMO/WORK/par_oce.F90 (lignes 29-31)
            jpni   = 1,                   &  !: number of processors following i
            jpnj   = 5,                   &  !: number of processors following j
            jpnij  = 5                       !: nb of local domain = nb of processors
      
      cd modipsl/config/IPSLCM5A ; gmake
      
  • Execution
    • Cas particulier : si vous souhaitez faire utiliser à votre NEMO parallèle un restart généré par un NEMO mono-processeur, alors il faut forcer une resoumission (ccc_msub) apres le 1er run de la simulation. Pour cela :
      • mettre PeriodNb=1 dans votre Job ; ccc_msub Job
      • une fois le 1er run en machine, remettre PeriodNb=48