WOLFRAM

Como usar o Mathematica em um cluster gerenciado de alta performance?

Informações de Fundamentação

Clusters de computação maiores consistem em vários nós, e cada nó é composto por muitos núcleos de CPU. Além disso, softwares especiais, como o Mathematica, frequentemente estão disponíveis no cluster. Os usuários solicitam esses recursos fazendo login em um nó principal e enviando tarefas para o gerenciador de clusters. A tarefa é executada quando os recursos ficam disponíveis. Dois gerenciadores de cluster comuns são o TORQUE e o Slurm.

A paralelização no Mathematica usa o modelo hub-and-spoke, no qual um kernel controlador gerencia vários kernels subordinados (subkernels). Em um ambiente de cluster, o cliente executa o kernel controlador e os hosts fornecem os subkernels. O gerenciador de cluster determina qual nó será o cliente e quais nós serão os hosts.

Os benefícios de rodar o Mathematica em um cluster são duplos: o número de núcleos de CPU disponíveis — mesmo em um único nó — é geralmente maior do que em um desktop, e a velocidade de cada núcleo de CPU é individualmente mais rápida do que a de um desktop.

Executando um Frontend Remoto do Mathematica

Um frontend remoto exige que o usuário mantenha o controle dos recursos da tarefa. Isso é conhecido como uma sessão interativa.

Embora geralmente haja um benefício na velocidade da CPU ao usar o cluster em comparação com um desktop, o frontend via uma sessão interativa é mais lento do que executar uma versão local do frontend. Isso ocorre porque o frontend é executado no cluster, enquanto a interface é enviada para o computador remoto do usuário.

Uma sessão interativa não é concebida a executar cálculos que exigem muita CPU, mas sim para testar e diagnosticar códigos. Normalmente, solicita-se apenas os recursos de um único nó.

  1. Faça login no nó principal via SSH com encaminhamento X Windows ativado.
  2. Inicie uma sessão interativa, solicitando todos os recursos de um único nó.
  3. Inicie uma sessão no Mathematica.

A partir de um notebook do Mathematica, ao usar o comando LaunchKernels[] ou qualquer outra funcionalidade paralela, subkernels serão incluídos executando a partir do cluster.

Executando um Script Remoto no Mathematica

Assume-se que

  • Você está familiarizado com o lançamento de subkernels remotos
  • O cluster é um ambiente Linux
  • O cluster utiliza um sistema de arquivos clonado, de modo que o Mathematica seja executado pelo mesmo executável em todos os nós

Se alguma dessas suposições não for verdadeira, será necessário modificar o procedimento a seguir, mas a diretriz geral permanece:

  1. Consultar o sistema para encontrar os nomes dos nós atribuídos à tarefa
  2. Consultar o sistema para saber quantos núcleos por nó estão disponíveis
  3. Lançar manualmente os kernels remotos

Slurm

Para Slurm, em um script do Mathematica ou da Wolfram Language, temos:

(* get host names *)
hosts = ReadList["!scontrol show hostname $SLURM_JOB_NODELIST", String]
masternode = Environment["SLURM_NODENAME"]
njobs = ToExpression[Environment["SLURM_CPUS_ON_NODE"]]
hosts = DeleteCases[hosts, masternode]; Length[hosts]

(* launch kernels on each host *)
kernels =
 KernelConfiguration[#, "KernelCount" -> njobs] & /@ hosts;
LaunchKernels[kernels]

Ao obter os nomes dos nós, você também pode usar SLURM_NODELIST em vez de SLURM_JOB_NODELIST para compatibilidade retroativa.

O formato retornado do número de tarefas por nó não é adequado para a interpretação em Wolfram Language. Portanto, a expressão é analisada manualmente para uma expressão de lista.

TORQUE

Para TORQUE, em um script do Mathematica ou da Wolfram Language, temos:

(* get association of resources *)
hosts = Counts[ReadList[Environment["PBS_NODEFILE"], "String"]];

(* launch subkernels and connect them to the controlling Wolfram Kernel *)
kernels=
Map[KernelConfiguration[#,"KernelCount" -> hosts[#]] &, Keys[hosts]]
LaunchKernels[kernels]

PBS_NODEFILE é uma variável de sistema que lista o nome de cada nó uma vez por núcleo de CPU disponível. Counts converte essa lista em uma instância de Association, com o nome do nó como chave e o número de núcleos de CPU como valor. Para simplificar, todos os subkernels são tratados como kernels remotos, embora alguns estejam executando no mesmo nó da instância local do Mathematica.

Limpeza após a Computação

Quando o código paralelo for concluído, é uma boa prática fechar os Wolfram kernels:

CloseKernels[];

[English]

Este artigo foi útil?
Sim
Não

Algum comentário?

Obrigado pelo seu feedback.

Enviar

Entre em contato com o Suporte

Caso tenha alguma dúvida sobre cobrança, ativação ou suporte técnico, estamos a sua total disposição.

1-800-WOLFRAM (+1-217-398-0700 para chamadas internacionais)

Suporte ao consumidor

Segunda–Sexta
8:00–17:00 Horário Central dos EUA

  • Registro ou ativação do produto
  • Informações de pré-venda e pedidos
  • Ajuda com instalação e início

Suporte técnico avançado (para clientes habilitados)

Segunda–Quinta
8:00–19:00 Horário Central dos EUA

FSexta
8:30–10:00 & 11:00–17:00 Horário Central dos EUA

  • Suporte técnico prioritário
  • Assistência com especialistas da Wolfram
  • Ajuda com a programação da Wolfram Language
  • Suporte avançado de instalação