Utilização de LAM/MPI com Suporte a Checkpoint/Restart
De Wiki do Veiga
Tabela de conteúdo |
Introdução
LAM/MPI é uma implementação do padrão MPI, inicialmente desenvolvida pelo Ohio Supercomputing Center, mantida pela Universidade de Notre Dame. LAM/MPI disponibiliza, em sua implementação, um módulo para Checkpoint/Restart de aplicações MPI.
Este texto contém informações de como compilar e utilizar o suporte a Checkpoint/Restart da LAM/MPI. Os procedimentos aqui apresentados foram realizados nos laboratórios do GPPD/UFRGS durante a elaboração da minha dissertação de mestrado.
Como Funciona
LAM/MPI possui uma arquitetura de duas camadas: a camada LAM e camada MPI. A camada LAM provê um ambiente de execução (Run Time Environment - RTE), sobre o qual a camada MPI executa. LAM utiliza um pequeno daemon (lamd) de nível de usuário para o controle de processos, comunicação e redirecionamento de mensagens entre processos. Esse daemon é carregado em cada nó do agregado, no início de uma seção, formando um agregado lógico. Já a camada MPI fornece uma infraestrutura e interface para troca de mensagens entre os processos do agregado lógico. Também existe um framework (System Services Interface - SSI) que possibilita a criação de módulos de funcionalidades que podem atuar em ambas as camadas e serem selecionados em tempo de execução.
O suporte a C/R de LAM/MPI é implementado através de um módulo SSI chamado CR. O mecanismo de salvamento de contexto utilizado é BLCR. Uma vez solicitado um checkpoint, um protocolo coordenado é iniciado a fim de esvaziar os canais de comunicação, produzir um estado global consistente e salvar o contexto dos processos MPI. Após o salvamento do contexto, é possível interromper a aplicação e transferi-la inteiramente para outro conjunto de nós.
Instalação e Configuração
Primeiramente é necessário instalar a BLCR. Para isso, siga os procedimentos do texto Checkpoint/Restart de Processos no Linux com BLCR.
A última versão de LAM/MPI pode ser obtida em http://www.lam-mpi.org/download (neste exemplo, utilizou-se a versão 7.1.2). Após a instalação de BLCR, a instalação básica de LAM/MPI pode ser feita do seguinte modo:
% tar xjf lam-7.1.2.tar.bz2
% cd lam-7.1.2
% ./configure --without-fc --with-threads=posix --with-rpi=crtcp \
--with-cr-blcr=/usr/local/
% make all
% make install
Para utilizar LAM/MPI é necessário configurar o SSH para utilizar chaves e, desta forma, não perguntar a senha (neste exemplo, utilizou-se OpenSSH versão 3.9). Primeiramente, deve-se gerar as chaves:
$ ssh-keygen -t rsa1 -N "" $ ssh-keygen -t rsa -N "" $ ssh-keygen -t dsa -N ""
Em cada um dos comandos acima, será solicitada a confirmação da localização do arquivo a ser salvo com sua chave gerada. Basta confirmar a criação dos mesmos. Depois, deve-se executar o seguinte comando:
$ cd ~/.ssh $ cat identity.pub id_rsa.pub id_dsa.pub > authorized_keys
Isso fará com que as suas chaves particulares sejam autenticadas automaticamente quando for feita uma conexão SSH entre as máquinas.
Exemplo de Utilização de LAM/MPI com Checkpoint/Restart
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[])
{
int rank, size, i;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("%d: pid = %d\n", rank, getpid());
for(i = 0; ; i++) {
printf("%d: step %d\n", rank, i);
sleep(1);
}
MPI_Finalize();
return 0;
}
Compilar normalmente:
$ mpicc -o mpi-test mpi-test.c
Iniciar uma LAM:
$ lamboot nodes.txt
Executar o programa MPI com os módulos
$ mpirun -np 2 \
-ssi rpi crtcp \
-ssi cr blcr \
mpi-test
Realizar o checkpoint a partir do PID do mpirun:
$ ps -A | grep mpirun 9513 pts/0 00:00:00 mpirun 9515 pts/0 00:00:00 mpirun 9517 pts/0 00:00:00 mpirun $ lamcheckpoint -ssi cr blcr -ssi cr_blcr_base_dir ./ -pid 9513
São criados três arquivos de contexto: um para o mpirun e um para cada processo da aplicação MPI.
$ ls -1 ./context.* context.9513-n0-9514 context.9513-n1-13157 context.mpirun.9513
Após fazer o checkpoint a aplicação pode ser encerrada. Para reiniciar a aplicação inteira, utiliza-se o arquivo de contexto do mpirun:
$ lamrestart -ssi cr blcr -ssi cr_blcr_context_file context.mpirun.9513
Também é possível reinicar os processos separadamente. Por exemplo, para reiniciar somente o processo de rank 0 da aplicação MPI, pode-se fazer:
$ lamrestart -ssi cr blcr -ssi cr_blcr_context_file context.9513-n0-9514
Referências
- LAM/MPI Installation Guide: http://www.lam-mpi.org/download/files/7.1.2-install.pdf
- Checkpoint/Restart System Services Interface (SSI) Modules for LAM/MPI: http://www.lam-mpi.org/papers/ssi/1.0-ssi-cr.pdf
Marcelo Veiga Neves < marcelo.veiga at gmail.com >
