Vou começar com a observação de que não sou mais um administrador de sistemas - sou um cientista, mas estou tentando ajudar nossos sysadmins aqui. Por isso, não posso tentar imediatamente coisas que exijam alterações de hardware ou que exijam sudo, mas que forneçam o máximo possível de informações.
Estou tentando executar o programa foo, escrito em Fortran e compilado com PGI e MPICH, em 8 nós usando MPI (os nós são nomeados node01, node02 etc.). Cada nó tem 8 núcleos e estou tentando usar todos eles. O problema é que o node08 não está jogando bem com o resto e não sei bem por quê. Para obter as coisas simples do way-ssh, a transferência de arquivos, etc. funciona bem entre o node08 e todos os outros nós, eu configurei o ssh sem senha entre todos os nós (e ele funciona no node08), o executável mpi é o mesmo e tudo funciona ao usar todos os outros nós (também não é um número de núcleos - você executa 16 núcleos entre o nó06 e o nó07 e funciona bem, você executa o mesmo número de núcleos entre o nó07 e o nó08 e falha).
Abaixo está como eu executo meus trabalhos (eu tentei a mesma coisa com o mpiexec), e mostrarei um exemplo de saída MPI em cada um deles. A versão mpich é 1.4.1 e é consistente entre as máquinas. Além disso, ambos foram executados a partir do nó07, com apenas o arquivo machs alterado para incluir o nó06 ou o nó08.
mpiexec.hydra -iface eth1 -verbose -machinefile machs -np 16 ./executable
Quando eu executo este comando através do node07 e node08, recebo a seguinte saída MPI imediatamente antes de ser interrompida (para ficar claro, ela fica 100% da CPU em todos os núcleos nos dois nós; também bloqueei os endereços IP e o kvsname):
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xx14_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 7 pid 5: cmd=get_result rc=0 msg=success value=description#""$port#38204$ifname#xx.xx.xx.7$
[proxy:0:1@node08] got pmi command (from 5): get
kvsname=kvs_xx14_0 key=P0-businesscard
[proxy:0:1@node08] forwarding command (cmd=get kvsname=kvs_xx14_0 key=P0-businesscard) upstream
[proxy:0:1@node08] got pmi command (from 7): get
kvsname=kvs_xx14_0 key=P0-businesscard
[proxy:0:1@node08] forwarding command (cmd=get kvsname=kvs_xx14_0 key=P0-businesscard) upstream
[proxy:0:1@node08] got pmi command (from 10): get
kvsname=kvs_xx14_0 key=P0-businesscard
[proxy:0:1@node08] forwarding command (cmd=get kvsname=kvs_xx14_0 key=P0-businesscard) upstream
[proxy:0:1@node08] got pmi command (from 16): get
kvsname=kvs_xx14_0 key=P0-businesscard
[proxy:0:1@node08] forwarding command (cmd=get kvsname=kvs_xx14_0 key=P0-businesscard) upstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xx14_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 7 pid 7: cmd=get_result rc=0 msg=success value=description#""$port#38204$ifname#xx.xx.xx.7$
[proxy:0:1@node08] we don't understand the response get_result; forwarding downstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xx14_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 7 pid 10: cmd=get_result rc=0 msg=success value=description#""$port#38204$ifname#xx.xx.xx.7$
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xx14_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 7 pid 16: cmd=get_result rc=0 msg=success value=description#""$port#38204$ifname#xx.xx.xx.7$
[proxy:0:1@node08] we don't understand the response get_result; forwarding downstream
[proxy:0:1@node08] we don't understand the response get_result; forwarding downstream
[proxy:0:1@node08] we don't understand the response get_result; forwarding downstream
Quando eu executo o mesmo comando através do node06 e node07, eu obtenho isso onde o anterior trava.
[proxy:0:1@node07] got pmi command (from 22): get
kvsname=kvs_xxx00_0 key=P0-businesscard
[proxy:0:1@node07] forwarding command (cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard) upstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 6 pid 22: cmd=get_result rc=0 msg=success value=description#""$port#48883$ifname#xxx.xx.xx.6$
[proxy:0:1@node07] got pmi command (from 6): get
kvsname=kvs_xxx00_0 key=P0-businesscard
[proxy:0:1@node07] forwarding command (cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard) upstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 6 pid 6: cmd=get_result rc=0 msg=success value=description#""$port#48883$ifname#xxx.xx.xx.6$
[proxy:0:1@node07] we don't understand the response get_result; forwarding downstream
[proxy:0:1@node07] got pmi command (from 11): get
kvsname=kvs_xxx00_0 key=P0-businesscard
[proxy:0:1@node07] forwarding command (cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard) upstream
[proxy:0:1@node07] got pmi command (from 16): get
kvsname=kvs_xxx00_0 key=P0-businesscard
[proxy:0:1@node07] forwarding command (cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard) upstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 6 pid 11: cmd=get_result rc=0 msg=success value=description#""$port#48883$ifname#xxx.xx.xx.6$
[proxy:0:1@node07] we don't understand the response get_result; forwarding downstream
[mpiexec@node07] [pgid: 0] got PMI command: cmd=get kvsname=kvs_xxx00_0 key=P0-businesscard
[mpiexec@node07] PMI response to fd 6 pid 16: cmd=get_result rc=0 msg=success value=description#""$port#48883$ifname#xxx.xx.xx.6$
[proxy:0:1@node07] we don't understand the response get_result; forwarding downstream
[proxy:0:1@node07] we don't understand the response get_result; forwarding downstream
Para ficar claro, esse código funciona bem em todas as outras máquinas que temos e isso não é um problema em nenhuma outra implantação que tentamos - apenas essa. Além disso, devo observar que os nós têm IPs correspondentes ao seu número de nó, então xx.xx.xx.7 é node07, xx.xx.xx.8 é node08, etc. Executando em apenas node08 em todos os 8 núcleos funciona muito bem, o problema surge quando usamos qualquer núcleo no node08 com qualquer núcleo em qualquer outra máquina.
Editado para adicionar: ssh é o lançador (e o único que temos acesso).
Tags ssh multi-core linux