|
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
|
|
|
|
```
|
|
|
|
|