Update Roms authored by Bruno da Silva Castilho's avatar Bruno da Silva Castilho
asfasf Essa imagem prove o serviço de processamento de simulações no roms. Nesta documentação, sera apresentado três formas diferentes de execuções de processamentos:
\ No newline at end of file - Processamento Singlethread - Processamento em um único thread do processador.
- Processamento Multithread - Processamento em N threads do processador.
- Processamento Distribuído - Processamento distribuído por N nós de um cluster.
#### Links
- [Repositório](https://codigos.ufsc.br/setic-hpc/roms)
- [Modelos](https://drive.google.com/file/d/1a1_B6WpcAC0TKyvyu265ClB8WfazzQ69/view?usp=sharing)
#### Instalação
- Faça o download da imagem em seu computador:
```
docker pull registry.codigos.ufsc.br/setic-hpc/roms:latest
```
#### Processamento Singlethread
- Para o processamento Singlethread, deve ser iniciado o container, compartilhando o diretório dos modelos com a pasta `/input` do mesmo e executado o comando para inicialização do processamento:
```
docker run -v "/home/modelos:/input" --rm registry.codigos.ufsc.br/setic-hpc/roms:latest bash -c "cd /input/projeto1 && /runs/upwelling/romsM roms_upwelling.in"
```
(Nota: Os modelos estavam no diretório `/home/modelos` do host e foi executado o modelo `projeto1`.)
#### Processamento Multithread
- Para o processamento Multithread, deve ser iniciado o container, compartilhando o diretório dos modelos com a pasta `/input` do mesmo e executado o comando para inicialização do processamento, junto com o `mpirun` para a sua paralelização, definindo o numero de `threads` necessarios para o processamento:
```
docker run -v "/home/modelos:/input" --rm registry.codigos.ufsc.br/setic-hpc/roms:latest bash -c "cd /input/projeto1 && mpirun -np 4 /runs/upwelling/romsM roms_upwelling.in"
```
(Nota: Os modelos estavam no diretório `/home/modelos` do host e foi executado o modelo `projeto1`, utilizando 4 `threads` para processamento.)
#### Processamento Distribuído
##### Configuração Dos Containers
- Para inicializar os container de forma distribuída no cluster, utilizando o docker swarm, pode se utilizar a stack abaixo, onde nos `volumes` deve ser configurado o servidor `nfs` em que os modelos de projeto serão armazenados e deve ser feito o direcionamento dos `serviços` para todos os nós do cluster, definindo um `nome` e `hostname` diferente para cada.
###### Stack
```yaml
version: '3.5'
services:
master: # Nome do serviço
image: registry.codigos.ufsc.br/setic-hpc/roms:latest
hostname: master
volumes: &vol
- roms-volume:/input
deploy:
placement:
constraints:
- "node.hostname==docker-hpc0" # Direcionando serviço para o nó docker-hpc0
node1: # Nome do serviço
image: registry.codigos.ufsc.br/setic-hpc/roms:latest
hostname: node1
volumes: *vol
deploy:
placement:
constraints:
- "node.hostname==docker-hpc1" # Direcionando serviço para o nó docker-hpc1
node2: # Nome do serviço
image: registry.codigos.ufsc.br/setic-hpc/roms:latest
hostname: node2
volumes: *vol
deploy:
placement:
constraints:
- "node.hostname==docker-hpc2" # Direcionando serviço para o nó docker-hpc2
volumes:
# Configuração do servidor NFS
roms-volume:
driver: local
driver_opts:
type: nfs
o: addr=192.168.0.1,rw,async
device: :/hpc/roms
```
##### Teste
- Para a execução de um teste, deve ser iniciada uma sessão bash ou shell com o container master, utilizando o [docker exec](https://docs.docker.com/engine/reference/commandline/exec/) ou de alguma outra forma. Com o acesso ao terminal do container, pode se então acessar os projetos que estão no diretório `/input` e executar os comandos para inicialização do processamento, utilizando o `mpirun` para a paralelização do processamento, definindo o `hosts` em que serão distribuídos os processamentos e o número total de `threads` necessários(soma de threads de todos os nós):
```
mpirun -hosts node1,node2 -np 24 /runs/upwelling/romsM roms_upwelling.in
```