Submissão de Jobs

Sobre

O Condor (oficialmente conhecido como HTCondor) é o agendador de tarefas, ou escalonador de processos, utilizado no ambiente computacional do CAPDA e possui atualmente uma única fila padrão de processos. Novas filas serão disponibilizadas em breve.

Universos

O Condor possui diferentes universos cada qual para execução de aplicações específicas, no ambiente computacional do CAPDA temos disponíveis os universos vanilla, docker, parallel e DAGMan. Para a maioria dos casos de uso o universo vanilla é o recomendado.

Como utilizar o Condor?

Acesse o nó de submissão

O acesso ao nó de submissão é feito por ssh e é necessário que você possua uma conta cadastrada no ambiente do CAPDA. Mais informações podem ser encontradas aqui. Caso não possua uma conta leia a nossa política de acesso e preencha o formulário de registro em http://www.linea.gov.br > Serviços > Registro de Participantes.

Dependências

Caso sua aplicação possua dependências você pode configurá-las em seu ambiente/seção através do gerenciador de pacotes eups.

Para isso carregue o eups e faça o setup da aplicação ou biblioteca que deseja utilizar.

source /mnt/eups/linea_eups_setup.sh 
setup pyfits 3.4+0                   

Mais instruções sobre o eups neste link

Exemplo de email solicitando a instalação de dependências:

Assunto: Instalação pyfits v3.4
Corpo:
    Prezados,

    Solicito a instalação da biblioteca pyfits-v3.4 juntamente com a versão 3.8 do python.
    A biblioteca pode ser encontrada em https://github.com/spacetelescope/PyFITS

Crie o arquivo de submissão

O arquivo de submissão é apenas um arquivo texto simples com as instruções para o condor. O formato das instruções, ou diretivas, segue o padrão chave = valor, uma por linha. Para um melhor entendimento veja os exemplos abaixo.

Tip

Os nomes das chaves(diretivas) e dos valores NÃO são case-sensitive, ou seja, tanto faz você informar getenv = trueou Getenv = TRUE, o Condor entenderá ambas da mesma forma. No entanto, caminhos para arquivos e nomes de arquivos SÃO case-sensitive então Executable = /mydir/app é diferente de Executable = /MYDIR/App.

Submeta à fila de execução

Para submeter à fila de execução basta executar o comando abaixo:

condor_submit myapp.sub

Onde myapp.sub é o arquivo de submissão que você criou e que contém todas as intruções para o condor executar sua aplicação.

Monitore a execução

A execução da sua aplicação pelo condor pode ser monitorada com o comando condor_q.

Exemplos

Abaixo tem três exemplos de como você pode utilizar o Condor para executar suas aplicações no ambiente computacional do CAPDA.

Baixe o faça o clone do repositório htcondor-examples.

Com o terminal aberto:

git clone https://github.com/linea-it/htcondor-examples

Acesse o diretório recém criado htcondor-examples.

cd htcondor-examples/

O diretório htcondor-examples possui três subdiretórios, cada um corresponde a um exemplo de como você pode utilizar o Condor e, além das aplicações, inclui os arquivos de submissão do Condor e os inputs quando necessários.

Lista de sub-diretórios e arquivos.

$ ls
Example1  Example2  Example3  LICENSE  README.md
1 - conta linhas em python

No primeiro exemplo vamos executar um script python que efetua a contagem de objetos em arquivos .fits e que possui como dependência a biblioteca pyfits 3.4+0.

Tip

  • No eups o número após a versão identifica a revisão do pacote, por exemplo: numpy 2.3.1+1, significa que é a versão 2.3.1 na revisão 1.
  • Se você omitir o nome do pacote na hora de listar então o eups listará todos os disponíveis.
  • Se você omitir a versão na hora do 'setup' então o eups irá carregar a que estiver marcada como current.

Abra um terminal e acesse o diretório Example1.

cd Example1

Dentro do diretório Example1 você encontrará os seguintes conteúdo:

$ ls
count_objects_into_fits.py  data  example1.sub  setup.sh

count_objects_into_fits.py -> script python que efetua a contagem de linhas(objetos) em arquivos .fits

example1.sub -> arquivo de submissão de trabalhos para o Condor.

setup.sh -> arquivo com os comandos utilizados para carregar o eups e configurar a dependência pyfits 3.4+0.

data -> contém 2 arquivos .fits de exemplo.

O primeiro passo é carregar o eups no ambiente e as dependências do script count_objects_into_fits.py já contidas no arquivo setup.sh, para isso faça:

source setup.sh

Agora que as dependências estão carregadas vamos dar uma olhada no arquivo de submissão example1.sub.

Agora vamos criar o arquivo de submissão, segue abaixo o arquivo de exemplo exemplo1.sub para executar o script python no Condor.

####################################
# Exemplo de arquivo de submissão  #
# para execução do script contador #
# de objetos em arquivos fits      #
####################################
getenv          = true
universe        = vanilla
executable      = $ENV(HOME)/htcondor-examples/Example1/count_objects_into_fits.py
notification    = Complete
notify_user     = carlosadean@linea.gov.br
error           = example1-$(Process).err
output          = example1-$(Process).out
log             = example1-$(Process).log

queue

Explicando as linhas do arquivo acima exemplo1.sub.

getenv = true instrui o Condor a copiar o atual ambiente shell do usuário para o nó remoto onde o script será executado. Útil para quando você carregar as dependências configuradas com o eups ou variáves definidas manualmente.

universe = vanilla indica o universo em que a aplicação será executada. No ambiente do CAPDA os universos podem ser vanilla, docker, parallel(mpi) e DAGMan.

executable = $ENV(HOME)/htcondor-examples/Example1/count_objects_into_fits.py indica o caminho para o script.

notification = Complete habilita notificação quando a execução terminar. Deve ser completada com a próxima diretiva.

notify_user = user@domain.com e-mail para onde o Condor enviará as notificações de término de execução. OBS: Se você submeter 1000 execuções receberá 1000 emails diferentes.

error = example1-$(Process).err arquivo onde o condor irá armazenar a saída de erro padrão da sua aplicação. Útil para debugar problemas na execução.

output = example1-$(Process).out arquivo onde será armazenada a saída padrão. Tudo o que a aplicação exibir na tela será enviado para o 'output'.

log = example1-$(Process).log registro de log da execução da aplicação. Por exemplo, é neste arquivo que fica o endereço da máquina remota onde a aplicação foi executada.

queue instrução para adicionar na fila de execução.

A 'variável' $(Process) é uma macro interna que recebe automaticamente um número inteiro sequencial.

Para executar a aplicação no cluster basta utilizar o comando condor_submit seguido do arquivo de submissão.

condor_submit exemplo1.sub

Uma vez submetido o trabalho (job) para acompanhar sua execução utilize o comando condor_q.

$ condor_q

-- Schedd: loginicx.ib0.cm.linea.gov.br : <10.148.0.7:9618?... @ 04/09/19 20:26:15
OWNER       BATCH_NAME    SUBMITTED   DONE   RUN    IDLE  TOTAL JOB_IDS
carlosadean ID: 6339     4/9  20:26      _      1      _      1 6339.0

Total for query: 1 jobs; 0 completed, 0 removed, 0 idle, 1 running, 0 held, 0 suspended 
Total for carlosadean: 1 jobs; 0 completed, 0 removed, 0 idle, 1 running, 0 held, 0 suspended 
Total for all users: 1 jobs; 0 completed, 0 removed, 0 idle, 1 running, 0 held, 0 suspended

Ao final da execução você verá os três arquivos definidos no arquivo de submissão estarão.

$ ls -lths

4.0K -rw-r--r-- 1 carlosadean production 1.1K Apr  9 20:28 example1-0.log
4.0K -rw-r--r-- 1 carlosadean production   49 Apr  9 20:28 example1-0.out
   0 -rw-r--r-- 1 carlosadean production    0 Apr  9 20:28 example1-0.err
   0 drwxr-xr-x 2 carlosadean production   46 Apr  9 18:50 data
4.0K -rw-r--r-- 1 carlosadean production  440 Apr  9 17:04 example1.sub
4.0K -rwxr-xr-x 1 carlosadean production  848 Apr  9 17:03 count_objects_into_fits.py
4.0K -rw-r--r-- 1 carlosadean production   56 Apr  9 16:55 setup.sh

A saída do script python está no arquivo example1-0.out.

$ cat example1-0.out 
# files: 2
# objects: 3060
2 - calculapi em C

Este segundo exemplo trata-se de uma aplicação compilada com gcc e que também recebe argumentos.

###################################
# Exemplo de arquivo de submissão #
# para executar um binário que    #
# recebe argumentos               #
###################################
universe    = vanilla
executable  = /home/user/bin/calculapi
arguments = 1000000
notification = Complete
notify_user = user@domain.com
error = calculapi-$(Process).err
output = calculapi-$(Process).out
log = calculapi-$(Process).log
queue

Explicando as linhas do arquivo acima calculapi.sub.

universe = vanilla indica o universo em que a aplicação será executada. No ambiente do CAPDA os universos podem ser vanilla, docker, parallel(mpi) e DAGMan.

executable = /home/user/bin/calculapi indica o caminho para a aplicação.

arguments = 1000000 essa diretiva do Condor recebe os argumentos que serão passados para a aplicação. NÃO passe os argumentos através da diretiva executable, fazendo assim sua aplicação será executada incorretamente.

notification = Complete informa ao Condor que você quer ser notificado quando a execução terminar. Deve ser completada com a próxima diretiva

notify_user = user@domain.com e-mail para onde o condor enviará as notificações de término de execução. OBS: Se você submeter 1000 execuções receberá 1000 emails diferentes.

error = calculapi-$(Process).err arquivo onde o condor irá armazenar a saída de erro padrão da sua aplicação. Útil para debugar problemas na execução.

output = calculapi-$(Process).out arquivo onde será armazenada a saída padrão. Tudo o que a aplicação exibir na tela será enviado para o 'output'.

log = calculapi-$(Process).log registro de log da execução da aplicação. Por exemplo, é neste arquivo que fica o endereço da máquina remota onde a aplicação foi executada.

queue instrução para o condor adicionar na fila de execução.

A 'variável' $(Process) é uma macro interna do condor e recebe automaticamente um número inteiro sequencial.

Para executar a aplicação no cluster basta utilizar o comando condor_submit seguido do arquivo de submissão.

condor_submit calculapi.sub
3 - hello world mpi

Este terceiro exemplo é um código que utiliza paralelismo para imprimir a mensagem hello world utilizando a biblioteca OpenMPI.

######################################
## Exemple de arquivo de submissão
## para aplicações que utilizam 
## a biblioteca OpenMPI
######################################
universe = parallel
getenv = true
executable = openmpiscript
arguments = hello_world_with_mpi
machine_count = 128
should_transfer_files = yes
when_to_transfer_output = on_exit
log                     = logs.log
output                  = logs.out.$(NODE)
error                   = logs.err.$(NODE)
queue

Explicando as linhas do arquivo acima hello_world_mpi.sub.

universe = parallel indica o universo em que a aplicação será executada. No ambiente do CAPDA os universos podem ser vanilla, docker, parallel(mpi) e DAGMan.

executable = openmpiscript o universo paralelo é mandatório que o executável seja o script openmpiscript. O HTCondor utiliza esse script para executar a aplicação.

arguments = hello_world_with_mpi diferentemente do universo vanilla, no universo parallel a diretiva arguments recebe o path para o executável principal. Aqui você também pode fornecer os argumentos necessários a sua aplicação.

notification = Complete informa ao Condor que você quer ser notificado quando a execução terminar. Deve ser completada com a próxima diretiva

notify_user = user@domain.com e-mail para onde o condor enviará as notificações de término de execução. OBS: Se você submeter 1000 execuções receberá 1000 emails diferentes.

error = calculapi-$(Process).err arquivo onde o condor irá armazenar a saída de erro padrão da sua aplicação. Útil para debugar problemas na execução.

output = calculapi-$(Process).out arquivo onde será armazenada a saída padrão. Tudo o que a aplicação exibir na tela será enviado para o 'output'.

log = calculapi-$(Process).log registro de log da execução da aplicação. Por exemplo, é neste arquivo que fica o endereço da máquina remota onde a aplicação foi executada.

queue instrução para o condor adicionar na fila de execução.

A 'variável' $(Process) é uma macro interna do condor e recebe automaticamente um número inteiro sequencial.

Para executar a aplicação no cluster basta utilizar o comando condor_submit seguido do arquivo de submissão.

Troubleshooting

Em desenvolvimento

última edição: @carlosadean em 09/04/2019 às 22:51hs