Anselmo, Evandro M. 1
Devido a necessidade de alguns integrantes que compõem o Laboratório de Ciências Atmosféricas (LCA) do Departamento de Física (DFI) da Universidade Federal de Mato Grosso do Sul (UFMS) trabalharem com Modelagem Atmosférica em pesquisas, foi realizado a montagem de um cluster composto inicialmente por duas máquinas para processamento em paralelo utilizando Message Passing Interface (MPI).
Este artigo é uma síntese de documentações lidas relacionadas a montagem de um Cluster Beowulf com adaptações feitas para o funcionamento de tudo em um sistema Debian GNU/Linux versão 5.0 codinome Lenny. Trata-se de uma abordagem técnica, em que usuários possam aproveitar uma rede de computadores para processamento de programas que utilizam MPI, por exemplo o BRAMS (Brazilian Regional Atmospheric Modeling System). O objetivo deste artigo não é descrever como fazer programas para processamento em paralelo, estruturar cabeamento de rede ideal para clusters ou entrar em questões mais teóricas a respeito do assunto e sim algo bem técnico relacionado a configuração das máquinas para a funcionamento da ferramenta de trabalho que é o Cluster.
Será realizada a configuração de duas máquinas para processamento em paralelo, portanto no final da leitura deste artigo o usuário será capaz de inserir quantas máquinas quiser em seu Cluster Beowulf Debian Lenny.
Se o usuário não tem familiaridade com sistemas operacionais Linux, primeiramente, este deve conhecer de maneira geral como é a estrutura desses sistemas, comandos básicos, edição de texto via terminal, hierarquia de usuários, configuração de rede, comunicação SSH (Secure Shell) e RSH (Remote Shell). Se necessário, aconselho a leitura do Guia Foca Linux [3], que sempre me auxiliou bastante.
Também não será feita uma abordagem a respeito da instalação da distribuição Debian GNU/Linux Lenny. Para iniciar a execução dos procedimentos deste artigo o usuário deverá ter instalado o Debian Lenny nas duas máquinas que irão compor o cluster.
O Debian versão 5.0 codinome Lenny pode ser adquirido através do site da distribuição www.debian.org assim como diversos manuais.
Iremos realizar a instalação do LAM/MPI que irá proporcionar o processamento em paralelo de programas em uma rede de computadores com sistema Debian, semelhante ao descrito em [2]. Para saber mais a respeito da implementação LAM/MPI em um sistema acesse www.lam-mpi.org.
Escolha qual será a máquina principal do cluster (node0) e a máquina escrava (node1). A máquina principal será onde iremos instalar os programas que irão utilizar MPI. Neste caso foi configurado o hostname da máquina principal como master e o hostname da máquina escrava como brams1.
Na máquina master, estando seu sistema sincronizado com um repositório oficial Debian Lenny, teremos que instalar os seguintes pacotes:
Então execute:
master:~# apt-get install lam-mpidoc lam-runtime lam4-dev mpich-bin libmpich1.0-dev libmpich1.0-dev libmpich1.0gf rsh-client rsh-server nfs-kernel-server
Os procedimentos seguintes devem ser realizados em todos os computadores que compõem o cluster.
Com o usuário root, edite o arquivo /etc/securetty acrescentando as linhas:
rlogin rsh
Editar o arquivo /etc/hosts.equiv acrescentanto os "hostnames" do cluster:
master brams1
Para evitar problemas com permissões, adicione um usuário e grupo, neste caso o usuário lca e o grupo paralelo:
master:~# adduser lca master:~# groupadd paralelo brams1:~# adduser lca brams1:~# groupadd paralelo
Adicione o usuário lca ao grupo paralelo configurando o arquivo /etc/group de maneira que o usuário lca e o grupo paralelo possuam o mesmo UID 3 e GID 4 em cada "node". Por exempo:
master:~# cat /etc/group ... lca:x:1800:paralelo parall:x:1101: ...
e
brams1:~# cat /etc/group ... lca:x:1800:paralelo parall:x:1101: ...
Apenas no master edite o arquivo /etc/exports, compartilhando os diretórios /home/lca e /usr via NFS (Network File System) conforme exempo:
/home/lca/ *(rw,no_root_squash) /usr/ *(rw,no_root_squash)
Edite o arquivo /etc/mpich/machines.LINUX, adicionando os "hostnames" do cluster. Se alguma máquina possuir n processadores adicione, hostname:n. Por exemplo para máquinas com dois processadores:
master:2 brams:2
Com o usuário lca "logado" crie o arquivo /home/lca/.rhosts contendo os "hostnames" dos computadores do cluster:
master brams1
Crie também um arquivo com mesmo conteúdo presente no .rhosts (contendo os "hostnames"), por exempo /home/lca/lamhosts, para uso do pacote lam-runtime.
Ao executar programas MPI no cluster, as máquinas devem possuir as informação contidas no HD da máquina master. Portanto devemos montar os diretórios compartilhados via NFS em cada computador escravo editando o arquivo /etc/fstab conforme o exemplo abaixo:
brams1:~# cat /etc/fstab # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / reiserfs notail 0 1 /dev/sda6 /home reiserfs defaults 0 2 /dev/sda5 none swap sw 0 0 /dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0 192.168.1.2:/home/lca /home/lca nfs exec,dev,suid,rw 1 1 192.168.1.2:/usr/ /usr/ nfs exec,dev,suid,rw 1 1
Execute em brams1:
brams1:~# mount -a
Tente executar algum comando via rsh entre as máquinas. A comunicação rsh deve acontecer sem pedir senha. Por exemplo, execute:
lca@master:~$ rsh brams1 w 17:42:30 up 1:23, 1 user, load average: 0,00, 0,00, 0,00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.7.9 17:32 2:42m 0.00s 0.00s -bash lca@master:~$
Note que o comando w foi executado na máquina master remotamente em brams1 sem erros e sem pedir senha. O comando w mostra os usuários logados no sistema.
No caso de erros "[...] existe ainda um teste para saber se o Debian realmente está utilizando o programa rsh ou o ssh no seu lugar [...] Para sabermos se estamos utilizando o programa correto, execute como root[:][2]
master:~# update-alternatives --display rsh rsh - estado é auto ligação atualmente aponta para /usr/bin/netkit-rsh /usr/bin/ssh - prioridade 20 escravo rsh.1.gz: /usr/share/man/man1/ssh.1.gz /usr/bin/netkit-rsh - prioridade 100 escravo rsh.1.gz: /usr/share/man/man1/netkit-rsh.1.gz 'Melhor' versão atual é /usr/bin/netkit-rsh. master:~#
Se a 'Melhor' versão atual for o netkit-rsh estamos utilizando o programa correto. Caso contrário execute o comando:
master:~# update-alternatives --config rsh
Existem 2 alternativas que fornecem 'rsh'.
Seleção Alternativa
-----------------------------------------------
1 /usr/bin/ssh
*+ 2 /usr/bin/netkit-rsh
Pressione enter para manter o padrão[*] ou digite o número da seleção:
Escolha o número que indica o executável /usr/bin/netkit-rsh e aperte enter.
Estando as máquinas comunicando-se via RSH sem senha vamos testar o sistema LAM/MPI. Execute na máquina master, com o usuário lca:
lca@master:~$ lamboot -v lamhosts LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University n-1<4905> ssi:boot:base:linear: booting n0 (master) n-1<4905> ssi:boot:base:linear: booting n1 (brams1) n-1<4905> ssi:boot:base:linear: finished lca@master:~$Note que o comando lamboot deve reconhecer os "nodes" (n0 e n1 ) do cluster.
Quando instalamos o pacote libmpich1.0-dev, este grava em seu hd, alguns programas MPI como exemplo para verificação do processamento em paralelo das máquinas do cluster. Iremos utilizar o programa cpi.c que calcula o valor de
.
Copie o programa cpi.c para o diretório do usuário cluster:
lca@master:~$ cp /usr/share/doc/libmpich1.0-dev/examples/pi/cpi.c ~/ lca@master:~$
Vamos compilar o programa cpi.c:
lca@master:~$ mpicc cpi.c -o cpi lca@master:~$
Para calcularmos o valor de
utilizando os dois computadores em paralelo devemos executar:
lca@master:~$ mpirun -np 4 cpi Process 2 on master Process 0 on master Process 1 on brams1 Process 3 on brams1 pi is approximately 3.1416009869231245, Error is 0.0000083333333314 wall clock time = 0.000278 lca@master:~$
A saída do comando deve ser conforme descrita acima, o que indica o funcionamento do cluster. O comando -np 4 representa o número de processos enviados para os nodes. É possível também especificar quais nodes serão utilizados no processamento através do comando mpirun. Para mais informações consulte o manual do comando.
lca@master:~$ man mpirun
MPIRUN(1) LAM COMMANDS MPIRUN(1)
NAME
mpirun - Run MPI programs on LAM nodes.
...
lca@master:~$
Em alguns artigos lidos disponíveis na web, recomenda-se que a comunicação entre as máquinas do cluster seja através de SSH, porém conforme [1] a comunicação entre os nodes deste artigo foram feitas via RSH devido a problemas com permissões entre os arquivos que contém as chaves de criptografia (authorized_ keys) de cada usuário nos nodes. A única vantagem de utilizar comunicação SSH é que as informações trafegadas na rede são criptografadas e como se trata de redes locais, neste caso não há necessidade de tal procedimento de segurança.
Em caso de um cluster com grande número de máquinas o cabeamento da rede não deve ser convencional e sim estruturado de maneira que a comunicação entre cada node com o computador principal (node0) seja rápida e demorar praticamente o mesmo intervalo de tempo, por exemplo, redes GigE, Mirynet, Infiniband, Quadrics, etc.
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -address ' ' arquivo.tex
The translation was initiated by Evandro Moimaz Anselmo on 2008-12-03