Paralelização em VASP

Aug 19 2020

Eu tenho um sistema que tem 1 k-ponto, 54 átomos NBANDS=152, e NGZ=80. Estou executando uma simulação AIMD no VASP versão 5.4.4

O supercomputador possui 32 núcleos / nó. É um cluster LINUX conectado por Infiniband, uma máquina multicore moderna. Gostaria de saber qual seria a melhor forma de selecionar parâmetros e solicitar recursos para obter um cálculo rápido e eficiente. Aqui estão alguns cenários que considerei. Estou curioso para saber qual seria o "melhor" método (em termos de eficiência e velocidade).

  1. Com base no que li aqui
  • Devo solicitar algo como 19 bandas (152/8). Talvez defina NBANDS = 160 para solicitar até 20 núcleos.
  • Eu então definiria NCORE = 20 em meu arquivo INCAR e solicitaria 20 núcleos em 1 nó?
  • Ou seria melhor definir NCORE = 10. E então solicitar algo como 2 nós e 10 núcleos por nó? ou isso criaria muito overhead de comunicação e tornaria a simulação mais lenta?
  1. Se eu decidir usar # de núcleos = # de átomos = 54
  • Eu definiria NCORE = 32 e, em seguida, solicitaria 54 núcleos em 2 nós (32 em 1 nó + 22 no segundo)? Ou 9 núcleos / nó e 6 nós?
  1. Não posso simplesmente solicitar o nó inteiro? 1 nó, 32 núcleos
  • então defina NCORE = 32 e eu apenas solicito o nó inteiro. No entanto, o manual do VASP sugere contra isso porque isso faria NPAR = 1
  • isso me confunde um pouco porque eu presumiria que 32 núcleos em um nó seriam mais eficientes do que ter núcleos em vários nós que se comunicam entre si

Respostas

11 TristanMaxson Aug 20 2020 at 04:04

Como alguém que fez muitos benchmarking para VASP, sugiro que você tente a abordagem experimental. Eu acredito que o VASP irá adicionar bandas adicionais para você se necessário para paralelização, então eu não me preocuparia com isso pessoalmente. O layout do nó fisicamente (32 núcleos em 1 processador vs 16 núcleos em 2 processadores vs layouts de processador AMD especiais em uma única CPU) pode diferir significativamente de cluster para cluster, você não pode saber o que é ideal sem tentar.

Já que você está executando simulações de MD, acho que vale a pena avaliar cada sistema antes de executar uma longa simulação. Pequenas mudanças não exigem que você faça um novo benchmark, mas se você passar de 50 a 150 a 300 átomos, o ideal pode mudar. Execute uma série de cálculos rápidos com toda a gama de NCORE que pareça razoável. Use o melhor resultado. Costumo verificar todos os fatores do maior nó.

Para 32 núcleos, eu verificaria NCORE = (1, 2, 4, 8, 16, 32). Eu compararia isso com 10 ou mais passos geométricos. Isso pode parecer uma perda de tempo, mas pode acabar economizando muito tempo no futuro.

Quase sempre, eu sugeriria solicitar nós inteiros, a menos que você tenha um bom motivo para não fazê-lo. Você pode eventualmente ver uma opção KPAR também enquanto olha ao redor, eu ouvi opiniões mistas. Pessoalmente, nunca obtive um resultado melhor com a paralelização do kpoint do que sem ela. No entanto, pode fazer uma diferença na memória.

7 DoubleKx Aug 21 2020 at 03:50

Pensei em postar os resultados do benchmarking de acordo com a sugestão de Tristan. Talvez seja útil para alguém no futuro. Eu fiz apenas 10 passos no MD (tamanho do passo de 1 fs, total de 10 fs).

As diferenças percentuais são todas relativas ao NCORE = 1 execução com 32 núcleos e 1 nó. Há um aumento de 33% ao ir para os 2 nós com 64 núcleos (NCORE = 32).

Obviamente, isso pode ser diferente dependendo do seu cluster. A propósito, este é o cluster Graham em Sharcnet, no Canadá - então, espero que seja útil para outros canadenses por aí :)