Compare commits

...

22 Commits

Author SHA1 Message Date
Gervasio Daniel Pérez 4397259bf1 Usar Process para correr realization 1 year ago
Gervasio Daniel Pérez 74aae9f91d Actualizar 'README-TUPAC.md' 2 years ago
Gervasio Daniel Pérez cbb0768707 Update README TUPAC 2 years ago
Gervasio Daniel Pérez 7f0f57b58f Actualizar 'README-TUPAC.md' 2 years ago
Gervasio Daniel Pérez 949b7853ab Readme + plantillas SLURM
+ Makefile con posibilidad de correr en slurm
2 years ago
Gervasio Daniel Pérez fc50b6b600 Actualizar 'README.md' 2 years ago
Gervasio Daniel Pérez debbcaca50 README y Makefile actualizados 2 years ago
Gervasio Daniel Pérez f775ea5faf Slurm example 2 years ago
Gervasio Daniel Pérez 0aac969f23 Extras para NIX 2 years ago
Sebastián Santisi f2e15adaba Deleting Conda env 2 years ago
Sebastián Santisi 0dcc4054bb Adding benchmarker as a requirement 2 years ago
Sebastián Santisi bd43d201f9 Adding venv to run_simulation.sh 2 years ago
Sebastián Santisi ca1a550bd3 Prerequisites 2 years ago
Sebastián Santisi e6a68668f5 chmod to script_install.sh 2 years ago
Sebastián Santisi f323721159 Upgrading README 2 years ago
Sebastián Santisi c641704839 Install only via venv 2 years ago
Oli d1af191f70 explain branches 3 years ago
Oli a541475bc0 explain branches 3 years ago
chortas 84c6356613 Fix numpy 3 years ago
chortas 621f1509b9 Change install rule 3 years ago
Cecilia Hortas 96db89d10c
Merge pull request #3 from medios-porosos-fiuba/milestone_4
Milestone 4 - Part 1
3 years ago
chortas fffbb8f24d Delete travis file (it requires card now) 3 years ago

@ -1,7 +0,0 @@
language: python
python:
- "3.8"
install:
- make install
script:
- make test

@ -1,19 +1,23 @@
install:
source ./script_install.sh
bash ./script_install.sh
run:
./run_simulation.sh
bash ./run_simulation.sh
fftma:
cd fftma_module/gen && python3 setup.py install --user
binaries:
./script_fortran.sh
test: binaries
test:
cd tests/integration && python3 -m unittest test.py
perf: binaries
perf:
cd tests/performance && python3 generation.py
cd tests/performance && python3 connectivity.py
run-slurm:
sbatch run-simulation-slurm
test-slurm:
sbatch run-test-slurm
perf-slurm:
sbatch run-perf-slurm

@ -0,0 +1,73 @@
# Paralelización de simulación de permeabilidad
## Clonar este repositorio
```
# Por HTTPS
git clone https://git.csc.gob.ar/ssantisi/simulacion-permeabilidad.git
# Por SSH
git clone git@git.csc.gob.ar:ssantisi/simulacion-permeabilidad.git
```
Entrar a la carpeta del proyecto
```
cd simulacion-permeabilidad
```
## Instalación de las librerías (Python 3)
Como requisitos previos a la instalación hace falta tener:
* `python3`
* `python3-pip`
* `gfortran`
* `gcc`
* `build-essentials`
```
make install
```
El instalador genera un entorno virtual en `venv`.
Para activar el entorno virtual:
```
source venv/bin/activate
```
Para desactivarlo `deactivate`.
## Correr la simulación
```
make run
```
## Correr los casos de prueba
```
make test
```
## Correr las pruebas de performance
```
make perf
```
## Branches de github
Explicacion sobre las branches que quedaron en github para entender cuales usar:
- `main` -> solo la migracion a python3 sin ninguna cambio sobre el modulo de FFTMA (sin mejoras)
- `improvement_NOMBRE` -> branch con el `NOMBRE` de la mejora que esta explicado que hace cada una en el analisis
donde la primera es `remove_generate_array` y la ultima es `multiple_buffers`
- `improvement_NOMBRE-logs` -> misma branch de mejora pero agregando informacion de logs que se utilizo para realizar los analisis y no deberian utilizarse porque degradan la performance considerablemente.
- `migrate_fortran` -> una branch donde se trato de migrar de fortran a C pero quedo inconcluso el trabajo y no se continuo.

@ -0,0 +1,126 @@
# Paralelización de simulación de permeabilidad en Cluster HPC (SLURM)
## ANTES DEL PRIMER USO
Seguir los siguientes pasos del tutorial:
1. Clonar este repositorio
2. Entrar al entorno NIX
3. Generar entorno Python para la simulación
## USO HABITUAL:
Habiendo completado las instrucciones previas al primer uso:
1. Entrar al entorno NIX
2. Activar el entorno python
3. Ejecutar las siimulaciones de interés
## Clonar este repositorio
```
# Por HTTPS
git clone https://git.csc.gob.ar/ssantisi/simulacion-permeabilidad.git
# Por SSH
git clone git@git.csc.gob.ar:ssantisi/simulacion-permeabilidad.git
```
Entrar a la carpeta del proyecto
```
cd simulacion-permeabilidad
```
## Entrar al entorno NIX
```
nix-shell
```
Para más info ver el archivo `shell.nix`.
## Generar entorno Python para la simulación
Los siguentes requisitos ya vienen provistos por `nix-shell`:
* `python3`
* `python3-pip`
* `gfortran`
* `gcc`
* `build-essentials`
```
make install
```
El instalador genera un entorno virtual en `venv`.
## Activar el entorno python
Para activar el entorno virtual (LUEGO DE HABER ACTIVADO EL ENTORNO NIX):
```
source venv/bin/activate
```
Para desactivarlo `deactivate`.
## Correr simulaciones de interés
Los siguientes comandos encolan trabajos en el cluster, que correrán tan pronto como les toque su lugar en la cola de trabajos.
Se puede monitorear el estado de el/los trabajos encolados con `squeue`.
Se puede cancelar un trabajo encolado con `scancel numero_de_trabajo`
### Correr la simulación (en SLURM)
Por defecto: 2 nodos, 32 tasks por nodo.
Para cambiarlo editar archivo `run-simulation-slurm`.
```
make run-slurm
```
Una vez en ejecución, la salida se escribe a los siguientes archivos:
* `simulation-nro-de-trabajo.out` la salida del trabajo.
* `simulation-nro-de-trabajo.err` los errores del proceso
### Correr los casos de prueba (en SLURM)
Por defecto: 1 nodo, 64 cpus por nodo.
Para cambiarlo editar archivo `run-tests-slurm`.
```
make test-slurm
```
Una vez en ejecución, la salida se escribe a los siguientes archivos:
* `test-nro-de-trabajo.out` la salida del trabajo.
* `test-nro-de-trabajo.err` los errores del proceso
### Correr las pruebas de performance (en SLURM)
Por defecto: 1 nodo, 64 cpus por nodo.
Para cambiarlo editar archivo `run-perf-slurm`.
```
make perf-slurm
```
Una vez en ejecución, la salida se escribe a los siguientes archivos:
* `perf-nro-de-trabajo.out` la salida del trabajo.
* `perf-nro-de-trabajo.err` los errores del proceso
## Branches de github
Explicacion sobre las branches que quedaron en github para entender cuales usar:
- `main` -> solo la migracion a python3 sin ninguna cambio sobre el modulo de FFTMA (sin mejoras)
- `improvement_NOMBRE` -> branch con el `NOMBRE` de la mejora que esta explicado que hace cada una en el analisis
donde la primera es `remove_generate_array` y la ultima es `multiple_buffers`
- `improvement_NOMBRE-logs` -> misma branch de mejora pero agregando informacion de logs que se utilizo para realizar los analisis y no deberian utilizarse porque degradan la performance considerablemente.
- `migrate_fortran` -> una branch donde se trato de migrar de fortran a C pero quedo inconcluso el trabajo y no se continuo.

@ -1,47 +1,9 @@
# Paralelización de simulación de permeabilidad
## Instalación de las librerías (Python 3)
## Corrida en PC de escritorio/laptop
```
make install
```
## Generación de los binarios de conectividad
```
make binaries
```
## Correr la simulación
```
make run
```
## Correr los casos de prueba
```
make test
```
## Correr las pruebas de performance
```
make perf
```
## Instalar el binario FFTMA
```
make fftma
```
## Instalación de las librerías (Python 2)
El sistema actualmente se encuentra migrado a Python3 por lo que no se recomienda correr este script.
```
./script_install_py2.sh
```
Ver archivo **README-LOCAL.md**.
## Corrida en cluster TUPAC
Ver archivo **README-TUPAC.md**.

@ -1,5 +0,0 @@
#!/bin/bash
source ~/miniconda3/etc/profile.d/conda.sh
conda activate py2_7
python --version

@ -1,10 +1,7 @@
from distutils.core import setup, Extension
import numpy
module_FFTMA = Extension('FFTMA', include_dirs = ['./include'],sources=["moduleFFTMA.c","./lib_src/Py_getvalues.c","./lib_src/Py_kgeneration.c","./lib_src/genlib.c","./lib_src/random.c","./lib_src/simpio.c","./lib_src/strlib.c","./lib_src/symtab.c","./lib_src/scanadt.c","./lib_src/stack.c","./lib_src/gammf.c","./lib_src/fftma.c","./lib_src/addstat.c","./lib_src/axes.c","./lib_src/cgrid.c","./lib_src/covariance.c","./lib_src/fourt.c","./lib_src/length.c","./lib_src/maxfactor.c","./lib_src/test_fact.c","./lib_src/cov_value.c","./lib_src/generate.c","./lib_src/gasdev.c","./lib_src/ran2.c","./lib_src/stable.c","./lib_src/gaussian.c","./lib_src/power.c","./lib_src/cubic.c","./lib_src/spherical.c","./lib_src/nugget.c","./lib_src/exponential.c","./lib_src/cardsin.c","./lib_src/nor2log.c","./lib_src/kgeneration.c","./lib_src/kgeneration2.c","./lib_src/fftma2.c","./lib_src/prebuild_gwn.c","./lib_src/build_real.c","./lib_src/addstat2.c","./lib_src/clean_real.c","./lib_src/pgeneration.c","./lib_src/pgeneration2.c","./lib_src/FFTPressure.c","./lib_src/FFTtest.c","./lib_src/build_pressure.c","./lib_src/build_velocity.c","./lib_src/total_pressure.c","./lib_src/total_velocity.c","./lib_src/clean_real2.c","./lib_src/waveVectorCompute3D.c","./lib_src/mat_vec.c","./lib_src/derivReal.c","./lib_src/inputdata.c","./lib_src/inputfiledata.c","./lib_src/debuginput.c","./lib_src/readdata.c","./lib_src/readfile_bin.c","./lib_src/writefile.c","./lib_src/writefile_bin.c","./lib_src/testmemory.c","./lib_src/testopenfile.c","./lib_src/readdata3.c"])
module_FFTMA = Extension('FFTMA', include_dirs=["./include", numpy.get_include()], sources=["moduleFFTMA.c","./lib_src/Py_getvalues.c","./lib_src/Py_kgeneration.c","./lib_src/genlib.c","./lib_src/random.c","./lib_src/simpio.c","./lib_src/strlib.c","./lib_src/symtab.c","./lib_src/scanadt.c","./lib_src/stack.c","./lib_src/gammf.c","./lib_src/fftma.c","./lib_src/addstat.c","./lib_src/axes.c","./lib_src/cgrid.c","./lib_src/covariance.c","./lib_src/fourt.c","./lib_src/length.c","./lib_src/maxfactor.c","./lib_src/test_fact.c","./lib_src/cov_value.c","./lib_src/generate.c","./lib_src/gasdev.c","./lib_src/ran2.c","./lib_src/stable.c","./lib_src/gaussian.c","./lib_src/power.c","./lib_src/cubic.c","./lib_src/spherical.c","./lib_src/nugget.c","./lib_src/exponential.c","./lib_src/cardsin.c","./lib_src/nor2log.c","./lib_src/kgeneration.c","./lib_src/kgeneration2.c","./lib_src/fftma2.c","./lib_src/prebuild_gwn.c","./lib_src/build_real.c","./lib_src/addstat2.c","./lib_src/clean_real.c","./lib_src/pgeneration.c","./lib_src/pgeneration2.c","./lib_src/FFTPressure.c","./lib_src/FFTtest.c","./lib_src/build_pressure.c","./lib_src/build_velocity.c","./lib_src/total_pressure.c","./lib_src/total_velocity.c","./lib_src/clean_real2.c","./lib_src/waveVectorCompute3D.c","./lib_src/mat_vec.c","./lib_src/derivReal.c","./lib_src/inputdata.c","./lib_src/inputfiledata.c","./lib_src/debuginput.c","./lib_src/readdata.c","./lib_src/readfile_bin.c","./lib_src/writefile.c","./lib_src/writefile_bin.c","./lib_src/testmemory.c","./lib_src/testopenfile.c","./lib_src/readdata3.c"])
setup(ext_modules=[module_FFTMA])

@ -7,6 +7,7 @@ import sys
from tools.Prealization import realization
from utilities.conditional_decorator import *
from memory_profiler import profile
import multiprocessing as mp
CONFIG_FILE_PATH = 'config.ini' if 'CONFIG_FILE_PATH' not in os.environ else os.environ['CONFIG_FILE_PATH']
IS_TEST = False if 'TEST' not in os.environ else True
@ -33,7 +34,10 @@ def sequential():
njobs = DotheLoop(-1,parser,iterables)
start_job=0
for job in range(start_job,njobs):
realization(job)
p = mp.Process(target=realization, args=(job,))
p.start()
p.join()
#realization(job)
return
def manager():
@ -59,7 +63,10 @@ def worker():
while job!=-1:
comm.send(rank,dest=0)
job = comm.recv(source=0)
realization(job)
p = mp.Process(target=realization, args=(job,))
p.start()
p.join()
#realization(job)
return

@ -1,11 +1,103 @@
numpy
scipy
matplotlib
ipython
jupyter
pandas
sympy
nose
mpi4py
anyio==3.6.2
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
arrow==1.2.3
asttokens==2.2.1
attrs==23.1.0
backcall==0.2.0
beautifulsoup4==4.12.2
Benchmarker==4.0.1
memory_profiler
bleach==6.0.0
cffi==1.15.1
comm==0.1.3
contourpy==1.0.7
cycler==0.11.0
debugpy==1.6.7
decorator==5.1.1
defusedxml==0.7.1
executing==1.2.0
fastjsonschema==2.16.3
fonttools==4.39.3
fqdn==1.5.1
idna==3.4
ipykernel==6.22.0
ipython==8.13.1
ipython-genutils==0.2.0
ipywidgets==8.0.6
isoduration==20.11.0
jedi==0.18.2
Jinja2==3.1.2
jsonpointer==2.3
jsonschema==4.17.3
jupyter==1.0.0
jupyter-console==6.6.3
jupyter-events==0.6.3
jupyter_client==8.2.0
jupyter_core==5.3.0
jupyter_server==2.5.0
jupyter_server_terminals==0.4.4
jupyterlab-pygments==0.2.2
jupyterlab-widgets==3.0.7
kiwisolver==1.4.4
MarkupSafe==2.1.2
matplotlib==3.7.1
matplotlib-inline==0.1.6
memory-profiler==0.61.0
mistune==2.0.5
mpi4py==3.1.4
mpmath==1.3.0
nbclassic==0.5.6
nbclient==0.7.4
nbconvert==7.3.1
nbformat==5.8.0
nest-asyncio==1.5.6
nose==1.3.7
notebook==6.5.4
notebook_shim==0.2.3
numpy==1.24.3
packaging==23.1
pandas==2.0.1
pandocfilters==1.5.0
parso==0.8.3
petsc==3.19.4
petsc4py==3.19.4
pexpect==4.8.0
pickleshare==0.7.5
Pillow==9.5.0
platformdirs==3.5.0
prometheus-client==0.16.0
prompt-toolkit==3.0.38
psutil==5.9.5
ptyprocess==0.7.0
pure-eval==0.2.2
pycparser==2.21
Pygments==2.15.1
pyparsing==3.0.9
pyrsistent==0.19.3
python-dateutil==2.8.2
python-json-logger==2.0.7
pytz==2023.3
PyYAML==6.0
pyzmq==25.0.2
qtconsole==5.4.2
QtPy==2.3.1
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
scipy==1.10.1
Send2Trash==1.8.2
six==1.16.0
sniffio==1.3.0
soupsieve==2.4.1
stack-data==0.6.2
sympy==1.11.1
terminado==0.17.1
tinycss2==1.2.1
tornado==6.3.1
traitlets==5.9.0
tzdata==2023.3
uri-template==1.2.0
wcwidth==0.2.6
webcolors==1.13
webencodings==0.5.1
websocket-client==1.5.1
widgetsnbextension==4.0.7

@ -0,0 +1,22 @@
#!/usr/bin/env bash
#SBATCH -o perf-$j.out
#SBATCH -e perf-%j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node 32
#SBATCH --partition=free-rider
hostname
date
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# vuelca lista de nodos asignados a un archivo "nodefile"
nodelist=$(scontrol show hostname $SLURM_NODELIST)
printf "%s\n" "${nodelist[@]}" > nodefile
source venv/bin/activate
# ejecuta mpirun con el nodefile creado
make perf
rm nodefile

@ -0,0 +1,22 @@
#!/usr/bin/env bash
#SBATCH -o simulation-%j.out
#SBATCH -e simulation-%j.err
#SBATCH -N 2
#SBATCH --ntasks-per-node 32
#SBATCH --partition=free-rider
hostname
date
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# vuelca lista de nodos asignados a un archivo "nodefile"
nodelist=$(scontrol show hostname $SLURM_NODELIST)
printf "%s\n" "${nodelist[@]}" > nodefile
source venv/bin/activate
# ejecuta mpirun con el nodefile creado
mpirun --hostfile nodefile python3 ./mpirunner.py
rm nodefile

@ -0,0 +1,23 @@
#!/usr/bin/env bash
#SBATCH -o test-%j.out
#SBATCH -e test-%j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node 32
#SBATCH --partition=free-rider
hostname
date
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# vuelca lista de nodos asignados a un archivo "nodefile"
nodelist=$(scontrol show hostname $SLURM_NODELIST)
printf "%s\n" "${nodelist[@]}" > nodefile
source venv/bin/activate
# ejecuta mpirun con el nodefile creado
#mpirun --hostfile nodefile python3 ./mpirunner.py
make test
rm nodefile

@ -1,3 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
source venv/bin/activate
mpirun python3 mpirunner.py

@ -1,21 +1,9 @@
#!/bin/bash
python3 -m venv venv
source venv/bin/activate
export WORKSPACE=$(pwd)
rm -r ~/.cache/pip
# gfortran
sudo apt install build-essential
sudo apt install gfortran
gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view'
pip3 install --user numpy scipy matplotlib ipython jupyter pandas sympy nose mpi4py
# install open mpi latest version
sudo apt install openmpi-bin
export PETSC_CONFIGURE_OPTIONS="--download-fblaslapack --download-chaco --download-hdf5"
pip3 install -r requirements.txt
# setup petsc4py
./script_fortran.sh
export PETSC_CONFIGURE_OPTIONS="--download-fblaslapack --download-chaco --download-hdf5"
pip3 install petsc petsc4py
cd fftma_module/gen && python3 setup.py install

@ -1,71 +0,0 @@
#!/bin/bash
export WORKSPACE=$(pwd)
# gfortran
sudo apt install build-essential
sudo apt install gfortran
gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view'
# install open mpi 2.1.1
curl https://download.open-mpi.org/release/open-mpi/v2.1/openmpi-2.1.1.tar.bz2 --output openmpi-2.1.1.tar.bz2
tar -jxf openmpi-2.1.1.tar.bz2
cd openmpi-2.1.1
./configure --prefix=$HOME/opt/openmpi
make all
make install
echo "export PATH=\$PATH:\$HOME/opt/openmpi/bin" >> $HOME/.bashrc
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HOME/opt/openmpi/lib" >> $HOME/.bashrc
source ~/.$1rc
cd ..
# install miniconda
curl https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh --output Miniconda3-py39_4.10.3-Linux-x86_64.sh
bash Miniconda3-py39_4.10.3-Linux-x86_64.sh -b
source ~/.$1rc
# create python 2.7 environment
conda init $1
source ~/.$1rc
conda create -n py2_7 python=2.7
conda activate py2_7
pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose
# setup petsc
git clone https://gitlab.com/petsc/petsc
cd petsc
git checkout maint-3.8
./configure --with-cc=mpicc --with-cxx=mpicxx --with-fc=mpif90 --download-fblaslapack --with-debugging=0 COPTFLAGS='-O3 -march=native -mtune=native' CXXOPTFLAGS='-O3 -march=native -mtune=native' FOPTFLAGS='-O3 -march=native -mtune=native'
make PETSC_DIR=$WORKSPACE/petsc PETSC_ARCH=arch-linux2-c-opt all
make PETSC_DIR=$WORKSPACE/petsc PETSC_ARCH=arch-linux-c-opt check
cd ..
# setup petsc4py
git clone https://Icolecchio@bitbucket.org/petsc/petsc4py.git
cd petsc4py
git checkout maint-3.8
export PETSC_DIR=$WORKSPACE/petsc
python setup.py build
python setup.py install --user
python setup.py test

@ -0,0 +1,17 @@
# nix-shell -p [ (python3Full.withPackages(ps: with ps; [ pip ])) gfortran zlib]
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "python-env-petsc";
nativeBuildInputs = [ m4 removeReferencesTo ];
buildInputs = [ (python3Full.withPackages(ps: with ps; [ pip ]))
gfortran
zlib
gcc
];
dontAddPrefix=true;
env.LD_LIBRARY_PATH = zlib + "/lib:" + stdenv.cc.cc.lib + "/lib";
}

@ -0,0 +1,20 @@
#!/usr/bin/env bash
#SBATCH -o slurm.out
#SBATCH -e slurm.err
#SBATCH -N 2
#SBATCH --ntasks-per-node 32
#SBATCH --partition=free-rider
hostname
date
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# vuelca lista de nodos asignados a un archivo "nodefile"
nodelist=$(scontrol show hostname $SLURM_NODELIST)
printf "%s\n" "${nodelist[@]}" > nodefile
source venv/bin/activate
# ejecuta mpirun con el nodefile creado
mpirun --hostfile nodefile python3 ./mpirunner.py
Loading…
Cancel
Save