MPI в docker рой не работает, когда порт открыт - PullRequest
1 голос
/ 29 февраля 2020

Я выполняю свой код с использованием MPI в кластере. Мой код работает как задача в docker, работающем в режиме роя. Шаги, которым я следую, чтобы запустить мой код:

  • Создание оверлейной сети
  • Запуск docker в режиме роя
  • Запуск службы docker (replicas = 4 ) используя следующую команду:
docker service create --name mpiser --network mpinet --replicas 4 mpitest:latest
  • Мой тестовый код представляет собой простой python скрипт, имеющий:
from mpi4py import MPI
import subprocess
import time
comm = MPI.COMM_WORLD
sizeComm = comm.Get_size()
rank = comm.Get_rank()
while True:
    print("Rank:",rank,"Hostname:",subprocess.check_output(['hostname']))
    time.sleep(2)
  • Я нахожу IP-адрес задач, запущенных как часть службы
  • exe c в один из контейнеров
  • , создайте файл "hosts" с найденными мною IP-адресами
  • Запустите тестовый код с помощью следующей команды:
mpirun --allow-run-as-root -n 33 --hostfile hosts --mca btl_tcp_if_exclude eth1,lo python3 /home/test.py       

Это работает нормально, и я вижу отпечатки всех контейнеров в рое.

Однако, если я выставлю один из порты при создании службы с помощью приведенной ниже команды

docker service create --name mpiser -p 3000:3000 --network mpinet --replicas 4 mpitest:latest

Сбой команды mpirun с приведенными ниже ошибками:

------------------------------------------------------------
A process or daemon was unable to complete a TCP connection
to another process:
  Local host:    8d3c60280396
  Remote host:   cc2da25814cc
This is usually caused by a firewall on the remote host. Please
check that any firewall (e.g., iptables) has been disabled and
try again.
------------------------------------------------------------

Я попытался использовать --mca btl_tcp_if_include, чтобы включить только интерфейс, отображающий ip адрес, который я добавил в файл hosts, который я пытался использовать --mca btl_tcp_if_exclude, чтобы исключить другие интерфейсы это не имеет IP-адрес, который я добавил в файле hosts Оба эти не помогли. Любые предложения о том, почему разоблачение порта вызывает проблемы со связью между контейнерами, будут полезны

...