Mudanças entre as edições de "Minicluster:Mpich"
m (→Testes para o mpdcheck) |
m (→Para o usuário comum) |
||
(66 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | Parece que na distribuição padrão não está presente. | + | == MPICH sem funcionalidade Torque == |
+ | Parece que na distribuição padrão não está presente. Para instalação veja [http://www3.mat.ufrgs.br/mediawiki/index.php/Minicluster:Linux#Update 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. | 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. | 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 | + | Cada usuário deve ter um arquivo <code>.mpd.conf</code> no seu diretório <code>/home/usuario/</code> e deve permitir acesso e leitura somente a este usuário. |
− | [usuario]$ cd | + | [usuario@one]$ cd |
− | [usuario]$ vi .mpd.conf | + | [usuario@one]$ vi .mpd.conf |
MPD_SECRET_WORD=yours3cr3tw0rd | MPD_SECRET_WORD=yours3cr3tw0rd | ||
MPD_USE_ROOT_MPD=yes | MPD_USE_ROOT_MPD=yes | ||
+ | [usuario@one]$ chmod 600 .mpd.conf | ||
+ | |||
onde | onde | ||
*<code>MPD_SECRET_WORD</code> pode ser única para cada usuário. | *<code>MPD_SECRET_WORD</code> pode ser única para cada usuário. | ||
*<code>MPD_USE_ROOT_MPD</code> especifica que usuários não irão iniciar se próprio mpd daemons, mas irão usar um já rodando iniciado pelo root. | *<code>MPD_USE_ROOT_MPD</code> 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 criar um script para todos os usuários | + | == Para o usuário root == |
+ | Similar aos usuários, o root precisa ter um arquivo <code>mpd.conf</code> 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 | * Crie o arquivo acima em | ||
[root]$ cd | [root]$ cd | ||
Linha 67: | Linha 45: | ||
para ter certeze que o arquivo tenha permissão de escrita e leitura para o usuário somente. | para ter certeze que o arquivo tenha permissão de escrita e leitura para o usuário somente. | ||
− | === Root's | + | = Testes = |
− | + | ==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. | |
− | + | IMPORTANTE: A maioria dos testes deve ser feito tanto na máquina '''one''' quanto na máquina '''cell100''' | |
− | + | == Iniciar um Daemon == | |
+ | * Conecte-se a máquina (como root) e inicie mpd (multi-purpose daemon) para rodar em background | ||
+ | [hunter]$ ssh usuario@one | ||
+ | [one]$ mpd --daemon | ||
− | + | * Verifique se o mpd foi iniciado nesta máquina [deveria aparecer algo como o Nome.da.maquina_PID (endereco.ip)]: | |
+ | [one]$ mpdtrace -l | ||
+ | one.matrix_54419 (192.168.0.99) | ||
− | + | * Teste também em '''cell100''' | |
− | |||
− | == | + | == Testar o mpdcheck em um nó == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Seguindo o manual do [mpich2] e os testes do apêndice A. | Seguindo o manual do [mpich2] e os testes do apêndice A. | ||
* Testar em um nó (duas janelas diferentes então) | * Testar em um nó (duas janelas diferentes então) | ||
− | [ | + | [one] $ mpdcheck -s |
− | server listening at INADDR_ANY on: | + | server listening at INADDR_ANY on: one.matrix 60582 |
− | Em outra janela | + | Em outra janela, no mesmo nó |
− | [ | + | [one] $ mpdcheck -c one 60582 |
client successfully recvd ack from server: ack_from_server_to_client | client successfully recvd ack from server: ack_from_server_to_client | ||
Que dará resposta na primeira janela | Que dará resposta na primeira janela | ||
Linha 128: | Linha 77: | ||
server successfully recvd msg from client: hello_from_client_to_server | server successfully recvd msg from client: hello_from_client_to_server | ||
− | * | + | * Testar também em '''cell100''' |
− | |||
− | |||
− | |||
− | |||
− | [ | + | == Rodar em uma máquina == |
− | + | É possível rodar um programa que não use MPICH com o mpd: | |
+ | [one]$ mpd --daemon | ||
+ | |||
+ | [one]$ mpiexec -n 1 /bin/hostname | ||
+ | one.matrix | ||
+ | |||
+ | [one]$ mpiexec -l -n 4 /bin/hostname | ||
+ | 1: one.matrix | ||
+ | 2: one.matrix | ||
+ | 0: one.matrix | ||
+ | 3: one.matrix | ||
− | * | + | * Testar em '''cell100''' |
− | |||
− | |||
− | |||
− | |||
+ | == Testar o mpdcheck em um anel com dois nós == | ||
+ | * Iniciar em '''one''' o processo mpdcheck (ver [http://lists.mcs.anl.gov/pipermail/mpich-discuss/2006-August/001521.html]): | ||
+ | [one]$ mpdcheck -s | ||
+ | server listening at INADDR_ANY on: one.matrix 60582 | ||
− | + | No outro nó, cell100 | |
− | + | [cell100]$ mpdcheck -c one 60582 | |
− | |||
− | No outro nó | ||
− | [ | ||
client successfully recvd ack from server: ack_from_server_to_client | client successfully recvd ack from server: ack_from_server_to_client | ||
+ | |||
Que dará resposta na primeira janela | Que dará resposta na primeira janela | ||
server has conn on <socket._socketobject object at 0x7fa130646980> from ('192.168.0.99', 54005) | 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 | server successfully recvd msg from client: hello_from_client_to_server | ||
+ | * Fazer o teste ao contrário também, iniciando de cell100. | ||
− | + | == Rodar no anel de máquinas == | |
No nó mestre | No nó mestre | ||
− | + | [one]$ mpd --daemon | |
− | + | [one]$ mpdtrace -l | |
− | + | one.matrix_44333 (192.168.0.99) | |
+ | |||
No nó escravo | No nó escravo | ||
− | [ | + | [cell100]$ mpd -h one -p 44333 --daemon |
− | [ | + | [cell100]$ mpdtrace -l |
cell100.matrix_58296 (192.168.0.100) | cell100.matrix_58296 (192.168.0.100) | ||
− | + | one.matrix_44333 (192.168.0.99) | |
− | [ | + | [cell100]$ |
+ | |||
No nó mestre | No nó mestre | ||
− | + | [one]$ mpdtrace -l | |
− | + | one.matrix_44333 (192.168.0.99) | |
cell100.matrix_58296 (192.168.0.100) | cell100.matrix_58296 (192.168.0.100) | ||
− | + | [one]$ mpiexec -n 2 /bin/hostname | |
− | + | one.matrix | |
cell100.matrix | cell100.matrix | ||
− | + | [one]$ mpiexec -l -n 4 /bin/hostname | |
− | |||
− | |||
− | |||
− | |||
− | |||
1: cell100.matrix | 1: cell100.matrix | ||
− | 2: | + | 2: one.matrix |
− | 0: | + | 0: one.matrix |
3: cell100.matrix | 3: cell100.matrix | ||
− | dago@ | + | [one]$ |
+ | |||
+ | == Teste final == | ||
+ | No mestre | ||
+ | [one]$ mpdboot -n 2 | ||
+ | [one]$ mpdtrace -l | ||
+ | one.matrix_40584 (192.168.0.99) | ||
+ | cell100.matrix_59410 (192.168.0.100) | ||
+ | [one]$ 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 one.matrix | ||
+ | Em cell100 (não necessário) | ||
+ | [cell100]$ mpdtrace -l | ||
+ | cell100.matrix_59410 (192.168.0.100) | ||
+ | one.matrix_40584 (192.168.0.99) | ||
+ | |||
+ | |||
+ | == Teste == | ||
+ | dago@cell112 ~/Testes $ mpdboot -n 2 --chkup -v -d -f mpd.hosts.on | ||
+ | debug: starting | ||
+ | checking cell113 | ||
+ | there are 2 hosts up (counting local) | ||
+ | running mpdallexit on cell112 | ||
+ | LAUNCHED mpd on cell112 via | ||
+ | debug: launch cmd= /usr/lib64/mpich2/bin/mpd.py --ncpus=1 -e -d | ||
+ | debug: mpd on cell112 on port 49581 | ||
+ | RUNNING: mpd on cell112 | ||
+ | debug: info for running mpd: {'ncpus': 1, 'list_port': 49581, 'entry_port': '', 'host': 'cell112', 'entry_host': '', 'ifhn': ''} | ||
+ | LAUNCHED mpd on cell113 via cell112 | ||
+ | debug: launch cmd= ssh -x -n -q cell113 '/usr/lib64/mpich2/bin/mpd.py -h cell112 -p 49581 --ncpus=1 -e -d' | ||
+ | debug: mpd on cell113 on port 44388 | ||
+ | RUNNING: mpd on cell113 | ||
+ | debug: info for running mpd: {'entry_port': 49581, 'ncpus': 1, 'list_port': 44388, 'pid': 3077, 'host': 'cell113', 'entry_host': 'cell112', 'ifhn': ''} | ||
+ | |||
+ | dago@cell112 ~/Testes $ mpdtrace -l | ||
+ | cell112_49581 (192.168.0.112) | ||
+ | cell113_44388 (192.168.0.113) | ||
+ | |||
+ | = Erros = | ||
+ | |||
+ | Não era possível formar o anel. Foi necessário eliminar no arquivo /etc/hosts a linha | ||
+ | ::1 one.matrix one localhost6.localdomain6 localhost6 | ||
+ | pois o cliente se confundica achando que se chamava one.matrix. |
Edição atual tal como às 15h19min de 11 de abril de 2012
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 [usuario@one]$ chmod 600 .mpd.conf
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
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.
IMPORTANTE: A maioria dos testes deve ser feito tanto na máquina one quanto na máquina cell100
Iniciar um Daemon
- Conecte-se a máquina (como root) e inicie mpd (multi-purpose daemon) para rodar em background
[hunter]$ ssh usuario@one [one]$ mpd --daemon
- Verifique se o mpd foi iniciado nesta máquina [deveria aparecer algo como o Nome.da.maquina_PID (endereco.ip)]:
[one]$ mpdtrace -l one.matrix_54419 (192.168.0.99)
- Teste também em cell100
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)
[one] $ mpdcheck -s server listening at INADDR_ANY on: one.matrix 60582
Em outra janela, no mesmo nó
[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 também em cell100
Rodar em uma máquina
É possível rodar um programa que não use MPICH com o mpd:
[one]$ mpd --daemon [one]$ mpiexec -n 1 /bin/hostname one.matrix [one]$ mpiexec -l -n 4 /bin/hostname 1: one.matrix 2: one.matrix 0: one.matrix 3: one.matrix
- Testar em cell100
Testar o mpdcheck em um anel com dois nós
- Iniciar em one o processo mpdcheck (ver [1]):
[one]$ mpdcheck -s server listening at INADDR_ANY on: one.matrix 60582
No outro nó, cell100
[cell100]$ 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
- Fazer o teste ao contrário também, iniciando de cell100.
Rodar no anel de máquinas
No nó mestre
[one]$ mpd --daemon [one]$ mpdtrace -l one.matrix_44333 (192.168.0.99)
No nó escravo
[cell100]$ mpd -h one -p 44333 --daemon [cell100]$ mpdtrace -l cell100.matrix_58296 (192.168.0.100) one.matrix_44333 (192.168.0.99) [cell100]$
No nó mestre
[one]$ mpdtrace -l one.matrix_44333 (192.168.0.99) cell100.matrix_58296 (192.168.0.100) [one]$ mpiexec -n 2 /bin/hostname one.matrix cell100.matrix [one]$ mpiexec -l -n 4 /bin/hostname 1: cell100.matrix 2: one.matrix 0: one.matrix 3: cell100.matrix [one]$
Teste final
No mestre
[one]$ mpdboot -n 2 [one]$ mpdtrace -l one.matrix_40584 (192.168.0.99) cell100.matrix_59410 (192.168.0.100) [one]$ 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 one.matrix
Em cell100 (não necessário)
[cell100]$ mpdtrace -l cell100.matrix_59410 (192.168.0.100) one.matrix_40584 (192.168.0.99)
Teste
dago@cell112 ~/Testes $ mpdboot -n 2 --chkup -v -d -f mpd.hosts.on debug: starting checking cell113 there are 2 hosts up (counting local) running mpdallexit on cell112 LAUNCHED mpd on cell112 via debug: launch cmd= /usr/lib64/mpich2/bin/mpd.py --ncpus=1 -e -d debug: mpd on cell112 on port 49581 RUNNING: mpd on cell112 debug: info for running mpd: {'ncpus': 1, 'list_port': 49581, 'entry_port': , 'host': 'cell112', 'entry_host': , 'ifhn': } LAUNCHED mpd on cell113 via cell112 debug: launch cmd= ssh -x -n -q cell113 '/usr/lib64/mpich2/bin/mpd.py -h cell112 -p 49581 --ncpus=1 -e -d' debug: mpd on cell113 on port 44388 RUNNING: mpd on cell113 debug: info for running mpd: {'entry_port': 49581, 'ncpus': 1, 'list_port': 44388, 'pid': 3077, 'host': 'cell113', 'entry_host': 'cell112', 'ifhn': }
dago@cell112 ~/Testes $ mpdtrace -l cell112_49581 (192.168.0.112) cell113_44388 (192.168.0.113)
Erros
Não era possível formar o anel. Foi necessário eliminar no arquivo /etc/hosts a linha
::1 one.matrix one localhost6.localdomain6 localhost6
pois o cliente se confundica achando que se chamava one.matrix.