C. Hourdin - Juillet 2022
C. Hourdin - Juillet 2022
Test of compilation and good parallel reproductibility (OpenMP and MPI) of code (test_repro)
Il y a aussi test_perfrst (perfect Restart) et test_real
CVTK tourne d'abord en mode SERIAL (monoproc)
Il écrit des tableaux (RVTK_DEBUG_WRITE) sélectionnés par des clés RVTK :
RVTK_DEBUG
RVTK_DEBUG_PERFRST (perfect restart)
RVTK_DEBUG_ADVANCED
Les tableaux sont écrit dans un fichier check_file qui peut vite devenir énorme.
Il tourne ensuite en mode MPI et/ou OPENMP
Remarque: le mode OPENMP est peu ou pas utilisé dans croco. Pas complètement ou mal codé.
Poour chaque tableau choisi par les clés RVTK_DEBUG, CVTK va lire le tableau correspondant écrit dans le fichier check_file en mode SERIAL.
Cette lecture se fait avec la routine debug.F (subroutine check_tab2d, check_tab3d).
Si le tableau est différent, il stoppe avec un message d'erreur spécifié pour identifier le tableau incriminé:
# if defined RVTK_DEBUG || defined RVTK_DEBUG_ADVANCED
C$OMP MASTER
call check_tab2d(ust2d(:,:),'ust2d in prestep ','u')
call check_tab2d(vst2d(:,:),'vst2d in prestep ','v')
C$OMP END MASTER
# endifREMARQUE: CVTK garanti le bon fonctionnement du parallèlisme et de la restartabilité après modification du code, mais ne garanti pas que le commit testé conserve les resultats de nos configurations. Il faut donc envisager des tests complémentaires de conservation de nos resultats de simu avant / après modification du code pour chacune de nos configs.
C. Hourdin - Juillet 2022
module load gitlab-runner/13.3.0
On personnalise l'environnement dans:
croco/.gitlab-ci.yml
comme :
CI_FC: "ifort"
CI_MPIF90: "mpif90"TOUJOURS COMMITER SINON gitlab-runner NE PREND PAS EN COMPTE LES MODIFS !!!!!!!
CVTK test_repro contient 3 types de tests:
ANA
the various analytical test cases, the ANA tests family.
VORT (AGRIF)
the vortex test case that tests AGRIF nesting: NoAGRIF, AGRIF 1 way, AGRIF 2 way. This is the VORT tests family
REG (BENGUELAVHR)
Various regional test cases on the BenguelaVHR grid with different sets of keys. This is the REG tests family
Tout est dans :
CVTK/common
CVTK/test_repro
CVTK/test_repro/Scripts_ana
CVTK/test_repro/Scripts_reg
CVTK/test_repro/Scripts_vortles configs sont définies dans :
CVTK/test_repro/Scripts_ana/Configure_Test_ana_ALL
BASIN DUNE GRAV_ADJ INNERSHELF ISOLITON KH_INST RIP SANDBAR SHELFRONT SWASH THACKER TS_HADV_TEST
CANYON EQUATOR IGW INTERNAL JET OVERFLOW RIVER SEAMOUNT SHOREFACE TANK TIDAL_FLAT UPWELLINGOn fait la liste des configs par copie des configs voulue dans :
CVTK/test_repro/Scripts_ana/Configure_Test_ana
si on veut juste tester BASIN RIVER et JET:
BASIN RIVER JET#!/bin/bash
LIST_KEY0='REGIONAL MPI OPENMP'
# => Keys that will put to undef at the begining of the rvtk scripts
TEST_NAME='BASIN'
CONFIG_NAME='BASIN'
LIST_KEY_PHYS='BASIN'
FLAG_OPENMP=1 ; FLAG_MPI=1
NBPROCS_X=2
NBPROCS_Y=2
NBPROCS=$(( $NBPROCS_X * $NBPROCS_Y ))
LIST_KEY_NEST=''
KEY_DEBUG='RVTK_DEBUG'
CROCOIN=''Pour activer ou désactiver le test en OPENMP ou en MPI:
FLAG à 0 ou 1
le jobcomp executé est :
CVTK/common/jobcomp_rvtk.bash
OCEAN/cppdefs.h
OCEAN/param.hLes fichiers param.h et cppdefs.h sont construits par des sed sur les 2 fichiers sources dans croco/OCEAN.
on lance CVTK en interractif avec :
gitlab-runner exec shell ana_run --timeout 7200
exec Execute a build locally
ana_run défini dans .gitlab-ci.yml
(ou vort_run, ou reg_run)
timeout Set maximum job timeout for a runnerIl commence par lire et executer le fichier croco/.gitlab-ci.yml
Puis va aller réaliser tous les tests dont les fichiers de configs sont dans
CVTK/test_repro/Scripts_ana/
Il lance :
create_link_master_ana.sh
(CVTK/test_repro/Scripts_ana/create_link_master_ana.sh)puis
./mk_TESTALL.bash CONFIGURE_ANA ana
(CVTK/test_repro/mk_TESTALL.bash)des sed pour aller remplacer les options dans cppdefs.h et param.h du source croco.
Exemple execution de BASIN :
dans /ccc/scratch/cont005/gen1140/hourdinc/croco_dev_2022_PISCES/builds/0/project-0/.datawork/KTEST/BASIN
sorties de la compilation dans :
jobcomp_MPI_BASIN.log
jobcomp_OPENMP_BASIN.log
jobcomp_SERIAL_BASIN.log
sorties de l'execution dans :
mpi_4_BASIN.log
openmp_4_RIVER.log
serial_BASIN.log> gitlab-runner --help
gitlab-runner [global options] command [command options] [arguments...]
ex commande exec :
gitlab-runner --debug --log-format json exec
> gitlab-runner exec --help
gitlab-runner exec command [command options] [arguments...]
ex command shell :
gitlab-runner --debug --log-format json exec shell
> gitlab-runner exec shell --help
gitlab-runner exec shell [command options] [arguments...]
gitlab-runner exec shell --timeout 7200mpirun.openmpi not found
- CROCO_CI_MPIRUN: "mpirun.openmpi"
---
+ CROCO_CI_MPIRUN: "ccc_mprun -p rome -m work,scratch,store -A gen1140 -T 3600"
- CI_FC: "gfortran"
---
+ CI_FC: "ifort"
ifort: command line error: option '-openmp' is not supported. Please use the replacement option '-qopenmp'
CVTK/common/jobcomp_rvtk.bash
- FFLAGS1="$FFLAGS1 -openmp"
---
+ FFLAGS1="$FFLAGS1 -qopenmp"pour ifort, les options de compilations du jobcomp_rvtk.bash sont positionnés sur l'optimisation.
Dans un premier temps je remets nos options sépcifiques (S. Pous) sur IRENE
- FFLAGS1="-O3 -fno-alias -i4 -r8 -fp-model precise"
---
+ FFLAGS1="-check bounds -fpe0 -traceback -g -O0 -ftrapuv -72 -fno-alias -i4 -r8 -fp-model precise -mcmodel=medium"CVTK/test_repro/comp_run_mpi.bash
30c30,31
- $MPIRUN -np $NBPROCS ./croco_${par1}.exe $CROCOIN > mpi_${NBPROCS}_${TEST_NAME}.log 2>&1 || { echo -e " $msg2" | tee -a mylog.txt ; echo -e $msg1 ; exit 2 ; }
---
+ $MPIRUN -n $NBPROCS ./croco_${par1}.exe $CROCOIN > mpi_${NBPROCS}_${TEST_NAME}.log 2>&1 || { echo -e " $msg2" | tee -a mylog.txt ; echo -e $msg1 ; exit 2 ; }L'ensemble des tests est très lent.
La compilation elle même est très lente. Pas de raison à priori Problème d'IRENE en Juillet ou y a t il une raison?
En tous les cas, la solution est de lancer en batch:
ccc_mprun -p skylake -n 4 -T 14400 -Kmodule load gitlab-runner/13.3.0
{ time gitlab-runner exec shell ana_run --timeout 14400 2>&1 |tee listing_IRENE_ALL_ANA_TESTS_DEBUG.txt; } 2>> listing_IRENE_ALL_ANA_TESTS_DEBUG.txt
C. Hourdin - ?? 2022
Installer gitlab-runner (pas de module à disposition!)
C. Hourdin - 16 Juillet 2022
Echange téléphonique avec la hotline (Rémi Lacroix) - Mail
Pour des questions de sécurité, pas recommandé car pas de traçabilité des utilisateurs qui commitent s'ils n'ont pas un compte sur Jean-Zay.
Donc pas de module mis à disposition.
En pratique l'IDRIS ne va pas policer mais n'encourage pas non plus.
L'IPSL fait du trusting depuis des années, ce qui est une forme d'intégration continue.
A nous d'installer un gitlab-runner et de se limiter à des utilisateurs qui ont un compte sur Jean-Zay.
De toutes façons l'idée n'est pas de lancer des tests en config réalistes à chaque commit, mais bien de faire une vérification épisodique.
Une vérifiaction avec CVTK pour la reproductibilité du parallèlisme et de la restartabilité, et une vérification pour s'assurer que les résultats sont préservés entre les 2 versions de code pour chacune de nos configurations (sans doute avec pulsation + ATLAS sur une période suffisament longue (1 mois?) si on constate une dérive sur plusieurs pas de temps).
Faut il demander à l'IFREMER pour DATARMOR ou installer nous même un gitlab-runner?