Skip to content

Commit c98b39f

Browse files
Chdb documentation
1 parent 1e80cd8 commit c98b39f

File tree

1 file changed

+114
-0
lines changed
  • docs/arch_exp/turpan/logiciels

1 file changed

+114
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
---
2+
title: Chdb
3+
sidebar_position: 1
4+
---
5+
6+
Chdb est conçu pour exécuter en parallèle le même programme sur un grand nombre d’entrées indépendantes. Il s’adresse aux calculs dits « embarrassingly parallel », qui ne nécessitent aucune communication entre processus et ne font donc pas appel à MPI.
7+
## Les prérequis
8+
Il s’applique aux calculs ayant les caractéristiques suivantes :
9+
- Un exécutable séquentiel ou multithreadé est appliqué de manière répétitive sur un ensemble de fichiers d’entrée
10+
- Les noms des fichiers d’entrée se terminent tous par la même extension
11+
- Il n’y a pas de dépendance entre les différents traitements
12+
- Il n’y a donc pas de communication entre eux
13+
- Il est possible de lancer plusieurs instances de l’exécutable simultanément.
14+
15+
## Les précautions à pendre
16+
17+
:::danger Important
18+
chdb est un outil très puissant : s’il y a une erreur dans votre exécutable produisant des effets néfastes pour le système, en particulier des entrées-sorties intensives, ceux-ci seront démultipliés. La règle d’or est donc la suivante :
19+
20+
AVANT DE LANCER UN EXÉCUTABLE AVEC chdb, VÉRIFIEZ QUE CELUI-CI FONCTIONNE CORRECTEMENT EN LE LANÇANT en "STANDALONE". Si le comportement de votre exécutable est correct, alors seulement vous pouvez envisager de l’utiliser avec chdb.
21+
:::
22+
23+
## Initialiser l’environnement
24+
L’environnement doit être initialisé :
25+
>```shell
26+
> module load chdb/1.1
27+
>```
28+
29+
## La commande chdb
30+
31+
chdb permet d’exécuter un programme présentant les caractéristiques ci-dessus sur un nombre arbitraire de processeurs et de nœuds.
32+
33+
Lire la documentation `chdb --help`
34+
35+
#### On **doit passer** les paramètres suivants :
36+
37+
- `--in-dir` Le nom du répertoire dans lequel se trouvent les fichiers d’entrée. Ce répertoire doit exister
38+
- `--in-type` L’extension des fichiers que l’on considère comme fichiers d’entrée. Par exemple txt, pdb, etc.
39+
- `--out-files` Le nom du ou des fichiers créés par la commande, pour chaque exécution de la commande le nom est bien sûr différent, on utilise des "templates" qui seront remplacés avec le nom du fichier d’entrée. S’il y a plusieurs fichiers créés, leurs noms doivent être séparés par des virgules (,)
40+
- `--command-line` La ligne de commande utilisée. Il est possible de mettre un morceau de shell complet (une série de commandes séparée par des | par exemple). La seule restriction est que cette commande doit lire un fichier en entrée, écrire un ou plusieurs fichiers en sortie. La commande doit être mise entre guillemets, sinon elle sera interprétée par le shell
41+
- `--out-dir` Le nom du répertoire contenant les fichiers de sortie. Ce répertoire ne doit pas exister au démarrage de chdb
42+
43+
#### On peut passer en outre les paramètres suivants :
44+
45+
- `--work-dir` Avant d’exécuter la commande, chdb fera un chdir dans ce répertoire. Ce répertoire est souvent le même que --outdir, et les mêmes "templates" peuvent être utilisés.
46+
- `--create-environment` Vous pouvez entrer ici un "petit morceau" de code shell, qui sera exécuté après le chdir précédent et avant l’appel de la commande : cela vous permet par exemple de copier des fichiers d’entrée qui seraient obligatoirement présents dans le répertoire courant.
47+
- `--sort-by-size` Les fichiers présentés en entrée sont triés du plus gros au plus petit, si l’on fait l’hypothèse que le temps de traitement est proportionnel à la charge cela devrait permettre un meilleur équilibrage de la charge
48+
- `--block-size=10` Si on met 10 par exemple, cela signifie que les process mpi traitent les fichiers par blocs de 10. Cela permet de minimiser les communications lorsque le nombre de fichiers est important. S’il y a peu de fichiers, cette option risque par contre de générer un déséquilibrage de la charge.
49+
- `--in-files` Permet de ne traiter qu’une partie des fichiers du répertoire d’entrée
50+
51+
#### En cas d’erreur dans la commande exécutée :
52+
53+
Si la commande exécutée renvoie un code d’erreur (c’est-à -dire un statut différent de zéro), le comportement par défaut de chdb est d’arrêter tout traitement.
54+
55+
On peut toutefois modifier ce comportement en spécifiant le paramètre `--on-error` : le nom des fichiers ayant provoqué une erreur est conservé, cela permet de relancer chdb (avec des paramètres différents).
56+
57+
Pour cela, le paramètre `--in-files` sera utile car il permettra de ne relancer le programme que sur les fichiers d’entrée qui ont provoqué l’erreur.
58+
59+
### Chdb dans un script slurm
60+
Dans cet exemple simple, un script Bash génère les fichiers d’entrée et le programme qui exécute le traitement correspondant à chaque entrée.
61+
62+
>```shell
63+
> #create directories
64+
> mkdir -p ./chdb_test/input
65+
> mkdir -p ./chdb_test/dev_output
66+
> cd ./chdb_test
67+
> #create 20 small input files
68+
>for i in $(seq -f "%02g" 1 20); do
69+
> printf "This is file %s\n" "$i" > input/file_${i}.txt
70+
>done
71+
> # create a simple processing program (mon_programme)
72+
> # This program reads stdin (or a filename arg) and writes an output file.
73+
> cat > mon_programme.sh <<'EOF'
74+
> #!/bin/bash
75+
> # mon_programme.sh infile > outfile
76+
> infile="$1"
77+
> # simulate some work: sleep 0-2 seconds, print file contents with header
78+
> sleep $((RANDOM % 3))
79+
> echo "=== processed: $(basename "$infile") ==="
80+
> cat "$infile"
81+
> EOF
82+
> chmod +x mon_programme.sh
83+
> #test one run "standalone" (MANDATORY before using chdb)
84+
> ./mon_programme.sh input/file_01.txt > dev_output/file_01.out
85+
> cat dev_output/file_01.out
86+
>```
87+
88+
Ce script Slurm permet de lancer le code sur tous les fichiers d’entrée.
89+
```
90+
#!/bin/bash
91+
#SBATCH -J chdb_example
92+
#SBATCH -N 1
93+
#SBATCH -n 3
94+
#SBATCH --ntasks-per-node=3
95+
#SBATCH --ntasks-per-core=1
96+
#SBATCH --time=00:30:00
97+
#SBATCH --output=chdb.out
98+
99+
module purge
100+
module load chdb/1.1
101+
102+
103+
# IMPORTANT: ensure out directory does NOT exist
104+
rm -rf out_slurm
105+
mpirun chdb \
106+
--in-dir ./chdb_test/input \
107+
--in-type txt \
108+
--out-dir ./chdb_test/out_slurm \
109+
--out-files %out-dir%/%path% \
110+
--sort-by-size \
111+
--command "./mon_program.sh %in-dir%/%path% > %out-dir%/%path%"
112+
```
113+
114+
Les variables `%in-dir%/%path%` et `%out-dir%/%path%` correspondent aux chemins d’entrée et de sortie définis précédemment dans la commande par (`--out-dir`, `--in-dir`) ; elles seront détectées automatiquement.

0 commit comments

Comments
 (0)