Mudanças entre as edições de "Minicluster:Mpich"
m (→Iniciar um Daemon) |
m (→Rodar em uma máquina) |
||
Linha 94: | Linha 94: | ||
0: one.matrix | 0: one.matrix | ||
3: one.matrix | 3: one.matrix | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Testar o mpdcheck em um anel com dois nós == | == Testar o mpdcheck em um anel com dois nós == |
Edição das 14h58min de 6 de julho de 2010
Índice
- 1 MPICH sem funcionalidade Torque
- 2 Configurações
- 3 Testes
MPICH sem funcionalidade Torque
Parece que na distribuição padrão não está presente. Para instalação veja Minicluster:Linux#Update
Neste paradigma, usuários (e sysadmins) são responsáveis por mais overhead e mais possibilidade de erros de configuração. É recomendado usar um scheduler and queue com Torque.
Configurações
Mpd significa "multi-purpose daemon." MPICH2 separa comunicação de processos de gerenciamento de processo usando o programa mpd para gerenciar qualquer processo usando MPI. Mpd necessita uma pequena configuração que não era necessário com MPICH1.
Para o usuário comum
Cada usuário deve ter um arquivo .mpd.conf
no seu diretório /home/usuario/
e deve permitir acesso e leitura somente a este usuário.
[usuario@one]$ cd [usuario@one]$ vi .mpd.conf MPD_SECRET_WORD=yours3cr3tw0rd MPD_USE_ROOT_MPD=yes
onde
MPD_SECRET_WORD
pode ser única para cada usuário.MPD_USE_ROOT_MPD
especifica que usuários não irão iniciar se próprio mpd daemons, mas irão usar um já rodando iniciado pelo root.
Para o usuário root
Similar aos usuários, o root precisa ter um arquivo mpd.conf
em todos os nós localizado em
[root@one]$ cd /etc [root@one]$ vi /etc/mpd.conf MPD_SECRET_WORD=yours3cr3tw0rd
e permitir acesso leitura e escrita somente ao root
[root@one]$ chmod 600 /etc/mpd.conf
Para criar um script para todos os usuários
- Crie o arquivo acima em
[root]$ cd [root]$ vi .mpd.conf [root]$ chmod 600 /root/.mpd.conf
- Faça uma cópia para cada usuário:
for x in `ls /shared/home/`; do rsync -plarv /root/.mpd.conf /shared/home/$x/; chown $x:users /shared/home/$x/.mpd.conf; done
Troque /shared/home/
com o diretório home dos usuários e troque users
com o grupo que os usuários estão.
Usuários futuros
Para usuários futuros terem automaticamente o arquivo criado, crie .mpd.conf
em /etc/skel/
na máquina que os usuários são criados. Tenha certeza que as flags estejam setadas corretamente. Então rode
chmod 600 /etc/skel/.mpd.conf
para ter certeze que o arquivo tenha permissão de escrita e leitura para o usuário somente.
Testes
Iniciar um Daemon
(Testar tanto nas máquinas one, cell100,...)
- Conecte-se a máquina one ou a uma cell1XX (como root) e inicie mpd (multi-purpose daemon) para rodar em background
[ hunter ]$ ssh usuario@one [usuario@one]$ mpd --daemon
- Verifique se o mpd foi iniciado nesta máquina [deveria aparecer algo como o Nome.da.maquina_PID (endereco.ip)]:
[usuario@one]$ mpdtrace -l one.matrix_54419 (192.168.0.99)
- Teste também em cell100
[usuario@one ]$ ssh usuario@cell100 [usuario@cell100]$ mpd --daemon [usuario@cell100]$ mpdtrace -l cell100.matrix_12345 (192.168.0.100)
Testar o mpdcheck em um nó
Seguindo o manual do [mpich2] e os testes do apêndice A.
- Testar em um nó (duas janelas diferentes então)
[dago@one ~] $ mpdcheck -s server listening at INADDR_ANY on: one.matrix 60582
Em outra janela, no mesmo nó
[dago@one ~] $ mpdcheck -c one 60582 client successfully recvd ack from server: ack_from_server_to_client
Que dará resposta na primeira janela
server has conn on <socket._socketobject object at 0x7fa130646980> from ('192.168.0.99', 54005) server successfully recvd msg from client: hello_from_client_to_server
- Testar em cell100 a mesma coisa
[dago@cell100 ~]$ mpdcheck -s server listening at INADDR_ANY on: cell100.matrix 36013 server has conn on <socket._socketobject object at 0x7f493dd20a60> from ('192.168.0.100', 60409) server successfully recvd msg from client: hello_from_client_to_server
[dago@cell100 ~]$ mpdcheck -c cell100 36013 client successfully recvd ack from server: ack_from_server_to_client
Rodar em uma máquina
É possível rodar um programa que não use MPICH com o mpd. Testar tanto na máquina one quanto cell100:
[dago@one ~]$ mpd --daemon [dago@one ~]$ mpiexec -n 1 /bin/hostname one.matrix [dago@one ~]$ mpiexec -l -n 4 /bin/hostname 1: one.matrix 2: one.matrix 0: one.matrix 3: one.matrix
Testar o mpdcheck em um anel com dois nós
- Testar um anel com dois nós (ver [1]):
[dago@um ~] $ mpdcheck -s server listening at INADDR_ANY on: um.phantom 60582
No outro nó
[dago@cell100 ~] $ mpdcheck -c um 60582 client successfully recvd ack from server: ack_from_server_to_client
Que dará resposta na primeira janela
server has conn on <socket._socketobject object at 0x7fa130646980> from ('192.168.0.99', 54005) server successfully recvd msg from client: hello_from_client_to_server
Rodar em uma máquina
É possível rodar um programa que não use MPICH com o mpd. Testar tanto na máquina one quanto cell100:
[dago@one ~]$ mpd --daemon [dago@one ~]$ mpiexec -n 1 /bin/hostname one.matrix [dago@one ~]$ mpiexec -l -n 4 /bin/hostname 1: one.matrix 2: one.matrix 0: one.matrix 3: one.matrix
Rodar um programa MPI
Abra o editor de texto e digite o programa "hello world" Creating and Compiling an MPI Program.
[usuario@one]$ vi hellompi.f90
Para rodar um programa MPI em uma máquina. Conecte-se a uma máquina escravo usando ssh
[usuario@one]$ ssh usuario@cell100
[dago@cell100 ~]$ mpiexec -l -n 4 ./hellompi
Rode o programa com um processo
[usuario@one]$ mpiexec ./hellompi
Rode novamente usando mais processos (e um processador - talvez 2 se for dual-core ?)
[usuario@one]$ mpiexec -np 5 ./hellompi
Deveria aparecer
[usuario@cell100]$ mpiexec -np 4 ./hellompi Sou o processo 0 de um total de 4 rodando em cell100.matrix Sou o processo 2 de um total de 4 rodando em cell100.matrix Sou o processo 1 de um total de 4 rodando em cell100.matrix Sou o processo 3 de um total de 4 rodando em cell100.matrix
onde cell100.matrix
é o nome da máquina (todas no mesmo nó ainda). Para rodar em mais máquinas, primeiro desligue o mpd
[usuario@one]$ mpdallexit
Configuring Worker Nodes to use Root's MPD Daemon
Starting up an mpd daemon for each user each time they log in is doable, but that requires an extra step of complexity for your users to understand. Plus, they'll need to remember to start up daemons on multiple machines when they run programs that require multiple processors (not just multiple processes).
An easier paradigm to follow is to start a single mpd daemon on each of the worker nodes and have users' programs attach to that daemon. Continue on to MPICH: Starting a Global MPD Ring to implement this.
Testes para o mpdcheck
Seguindo o manual do [mpich2] e os testes do apêndice A.
- Testar em um nó (duas janelas diferentes então)
[dago@um ~] $ mpdcheck -s server listening at INADDR_ANY on: um.phantom 60582
Em outra janela
[dago@um ~] $ mpdcheck -c um 60582 client successfully recvd ack from server: ack_from_server_to_client
Que dará resposta na primeira janela
server has conn on <socket._socketobject object at 0x7fa130646980> from ('192.168.0.99', 54005) server successfully recvd msg from client: hello_from_client_to_server
- Testa no outro nó a mesma coisa
[dago@cell100 ~]$ mpdcheck -s server listening at INADDR_ANY on: cell100.matrix 36013 server has conn on <socket._socketobject object at 0x7f493dd20a60> from ('192.168.0.100', 60409) server successfully recvd msg from client: hello_from_client_to_server
[dago@cell100 ~]$ mpdcheck -c cell100 36013 client successfully recvd ack from server: ack_from_server_to_client
- Rodar nos dois nós a sequência
[dago@cell100 ~]$ mpd & [dago@cell100 ~]$ mpiexec -n 1 /bin/hostname [dago@cell100 ~]$ mpiexec -l -n 4 /bin/hostname [dago@cell100 ~]$ mpiexec -l -n 4 ./hellompi
- Testar um anel com dois nós (ver [2]):
[dago@um ~] $ mpdcheck -s server listening at INADDR_ANY on: um.phantom 60582
No outro nó
[dago@cell100 ~] $ mpdcheck -c um 60582 client successfully recvd ack from server: ack_from_server_to_client
Que dará resposta na primeira janela
server has conn on <socket._socketobject object at 0x7fa130646980> from ('192.168.0.99', 54005) server successfully recvd msg from client: hello_from_client_to_server
Testando o anel de máquinas
- ALELUIA. Funcionou!
No nó mestre
dago@um ~ $ mpd --daemon dago@um ~ $ mpdtrace -l um.phantom_44333 (192.168.0.99)
No nó escravo
[dago@cell100 ~]$ mpd -h um -p 44333 --daemon [dago@cell100 ~]$ mpdtrace -l cell100.matrix_58296 (192.168.0.100) um.phantom_44333 (192.168.0.99) [dago@cell100 ~]$
No nó mestre
dago@um ~ $ mpdtrace -l um.phantom_44333 (192.168.0.99) cell100.matrix_58296 (192.168.0.100) dago@um ~ $ mpiexec -n 2 /bin/hostname um.phantom cell100.matrix dago@um ~ $ mpiexec -n 4 /bin/hostname cell100.matrix um.phantom cell100.matrix um.phantom dago@um ~ $ mpiexec -l -n 4 /bin/hostname 1: cell100.matrix 2: um.phantom 0: um.phantom 3: cell100.matrix dago@um ~ $
Um programa hellompi em paralelo
dago@um fortran $ mpiexec -l -n 4 ./hellompi 0: Sou o processo 0 de um total de 4 rodando em um.phantom 1: Sou o processo 1 de um total de 4 rodando em cell100.matrix 2: Sou o processo 2 de um total de 4 rodando em um.phantom 3: Sou o processo 3 de um total de 4 rodando em cell100.matrix
Teste final
No mestre
dago@um ~ $ mpdboot -n 2 dago@um ~ $ mpdtrace -l um.phantom_40584 (192.168.0.99) cell100.matrix_59410 (192.168.0.100) dago@um ~ $ cd fortran/ dago@um fortran $ mpiexec -l -n 2 ./hellompi 1: Sou o processo 1 de um total de 2 rodando em cell100.matrix 0: Sou o processo 0 de um total de 2 rodando em um.phantom
Em cell100
[dago@cell100 fortran]$ mpdtrace -l cell100.matrix_59410 (192.168.0.100) um.phantom_40584 (192.168.0.99)