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:
- 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
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 ompirun
para a sua paralelização, definindo o numero dethreads
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 servidornfs
em que os modelos de projeto serão armazenados e deve ser feito o direcionamento dosserviços
para todos os nós do cluster, definindo umnome
ehostname
diferente para cada.
Stack
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 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 ompirun
para a paralelização do processamento, definindo ohosts
em que serão distribuídos os processamentos e o número total dethreads
necessários(soma de threads de todos os nós):
mpirun -hosts node1,node2 -np 24 /runs/upwelling/romsM roms_upwelling.in