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


Marcelo Veiga Neves < marcelo.veiga at gmail.com >

Ferramentas pessoais