This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
calcul:cluster:exemples_batchs [2015/10/15 11:36] claude mercier |
calcul:cluster:exemples_batchs [2015/10/21 16:34] (current) claude mercier |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Un script à envoyer sur le cluster va contenir les instructions sous la forme | + | **Un script à envoyer sur le cluster va contenir les instructions sous la forme \\ |
- | #SBATCH | + | #SBATCH intructions\\ |
- | en debut de ligne du script (fichier.sh) | + | en debut de ligne du script (fichier.sh)** |
- | Ensuite on envoie le batch pour execution | + | **Ensuite on envoie le batch pour execution** |
- | cluster-head> sbatch fichier.sh | + | **cluster-head> sbatch fichier.sh** |
- | **exemple 1:** je veux 50 taches independantes, peu m'importe où elles vont s'exécuter | + | Quand le job est fini, ou s'execute, on peut voir la sortie dans le repertoire où on a lancé le job. |
+ | Un fichier slurm-NNN.out contient la sortie (NNN numéro du job) | ||
- | ''#!/bin/bash | + | **exemple 1:** je veux 50 taches indépendantes, peu m'importe où elles vont s'exécuter |
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
#SBATCH -n 50 | #SBATCH -n 50 | ||
Line 15: | Line 19: | ||
cd repertoire_ou_se_trouve_mes_affaires | cd repertoire_ou_se_trouve_mes_affaires | ||
- | srun mon_executable'' | + | srun mon_executable |
+ | </code> | ||
(recuperation du numéro de tache avec la variable d'environnement SLURM_PROCID) | (recuperation du numéro de tache avec la variable d'environnement SLURM_PROCID) | ||
Line 21: | Line 26: | ||
**exemple 2:** j'ai un code qui demarre plusieurs taches MPI, chaque tache se divisant en 8 avec openMP | **exemple 2:** j'ai un code qui demarre plusieurs taches MPI, chaque tache se divisant en 8 avec openMP | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | |||
+ | #SBATCH --job-name=cosmocmc | ||
+ | |||
+ | # nombre de noeuds (machine) | ||
+ | #SBATCH -N 4 | ||
+ | |||
+ | # je veux les noeuds pour moi toute seule, je blinde les machines | ||
+ | #SBATCH --exclusive | ||
+ | |||
+ | # pour chaque tache mpi, elle spawne 8 threads (OpenMP), cosmomc attention num_thread dans .ini | ||
+ | #SBATCH -c 8 | ||
+ | |||
+ | #liste des noeuds alloues pour le job | ||
+ | echo "On tourne sur: $SLURM_NODELIST" | ||
+ | # nombre total de noeuds | ||
+ | echo "Soit $SLURM_NNODES nodes." | ||
+ | # liste du nombre de CPU pour chaque noeuds | ||
+ | echo "job cpu per node = $SLURM_JOB_CPUS_PER_NODE" | ||
+ | |||
+ | # je ne sais pas combien j en veux, depends du nombre de CPUs sur les noeuds | ||
+ | temp=`echo $SLURM_JOB_CPUS_PER_NODE | sed s/\(//g | sed s/\)//g | sed s/\,/\+/g | sed s/x/*/g` | ||
+ | n=$(($temp)) | ||
+ | n=$(($n/8)) | ||
+ | |||
+ | cd slurm_test/cosmomc_ias_dev/ | ||
+ | source environnement | ||
+ | cd cosmomc | ||
+ | |||
+ | # la je dis que je veux $n taches MPI, il sait avec -c 8 plus haut, qu'il doit dispatcher | ||
+ | # une tache pour 8 processeurs. | ||
+ | mpirun -n $n ./cosmomc test_SZs.ini | ||
+ | </code> | ||
+ | |||
+ | **Exemple 3 :** D'habitude je lance mes calculs en direct dans idl. | ||
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # je demande 1 noeud | ||
+ | #SBATCH -N1 | ||
+ | |||
+ | #informatif | ||
+ | echo "On tourne sur: $SLURM_NODELIST" | ||
+ | |||
+ | # idl va prendre autant de CPUs que disponibles | ||
+ | # il lui faut un fichier de commandes à executer | ||
+ | # (tout ce que vous taperiez si vous etiez devant) | ||
+ | # soit le creer avant, soit le creer a la volée | ||
+ | # dans ce job | ||
+ | |||
+ | |||
+ | cat > fichier_commande_idl.bat <<EOF | ||
+ | mk_an2star | ||
+ | EOF | ||
+ | |||
+ | |||
+ | idl fichier_commande_idl.bat | ||
+ | |||
+ | # j'ai fini plus besoin du fichier.bat | ||
+ | rm fichier_commande_idl.bat | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | **Exemple 4:** mes calculs doivent s'exécuter sur une machine avec coprocesseurs (K20 ou PHI) | ||
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | |||
+ | ####### je voudrais phi ou gpu indifferemment | ||
+ | #SBATCH -p copro | ||
+ | |||
+ | ####### si on veut seulement gpu mettre -p K20 | ||
+ | ####### si on veut seulement xeon phi, mettre -p PHI | ||
+ | |||
+ | ####### mon code utilise une fois lancé 8 processeurs (multithreadé) | ||
+ | #SBATCH -n 8 | ||
+ | |||
+ | #SBATCH --job-name "test_copro" | ||
+ | |||
+ | echo "On tourne sur: $SLURM_NODELIST" | ||
+ | echo "nb procs: $SLURM_JOB_CPUS_PER_NODE" | ||
+ | |||
+ | ############slurm ajoute des variables qui cachent les coprocesseurs #####CUDA_VISIBLE_DEVICES=NoDevFiles | ||
+ | unset CUDA_VISIBLE_DEVICES | ||
+ | unset GPU_DEVICE_ORDINAL | ||
+ | |||
+ | cd ICL/CapsBasic | ||
+ | make clean | ||
+ | make | ||
+ | ./capsbasic | ||
+ | ./intelcaps | ||
+ | ./capsbasic NVIDIA | ||
+ | ./intelcaps NVIDIA | ||
+ | </code> | ||