Практическое руководство. Azure OpenMPI с Infiniband — Linux

Я новичок в использовании Microsoft Azure для научных вычислений и столкнулся с несколькими проблемами при настройке.

У меня есть установка Jump Box, которая действует как сервер лицензий для программного обеспечения, которое я хочу использовать, а также имеет общий диск для хранения всего программного обеспечения. Также настроено 6 вычислительных узлов (16 ядер/узел), и я без проблем могу подключиться по ssh из блока перехода к вычислительным узлам. Блок перехода и вычислительные узлы используют CentOS с OpenMPI 1.10.3.

Я создал сценарий, который хранится на смонтированном диске Jump Box, который я запускаю на каждом вычислительном узле с помощью clusRun.sh, который устанавливает все переменные среды, характерные для программного обеспечения, которое я запускаю, и OpenMPI. Надеюсь, на данный момент все звучит хорошо.

Раньше я без проблем использовал это программное обеспечение в кластерах Linux. Задания отправляются с помощью команды, похожей на:

mpirun -np XXX -hostfile XXX {путь к ПО}

Где XXX — количество процессоров и путь к хост-файлу.

Я запускаю эту команду в поле перехода, и в файле хоста есть список имен каждого вычислительного узла, имя каждого вычислительного узла находится в файле хоста столько раз, сколько ядер я хочу на узле. Надеюсь, это имеет смысл! На узле блока перехода нет процессов из задания, оно просто используется для запуска задания.

Когда я пытаюсь запустить задания таким образом, я получаю ряд ошибок, большинство из которых, похоже, связаны с Infiniband. Вот краткий список основных ошибок:

"The /dev/hfi1_0 device failed to appear after 15.0 seconds: Connection timed out"

"The OpenFabrics (openib) BTL failed to initialize while trying to create an internal queue"

"OMPI source: btl_openib.c:324
 Function: ibv_create_srq()
 Error: Function not implemented (errno=38)
 Device: mlx4_0"

«По крайней мере, одна пара процессов MPI не может связаться друг с другом для связи MPI. Это означает, что ни одно устройство Open MPI не указало, что его можно использовать для связи между этими процессами».

Существуют ли какие-либо переменные среды, характерные для OpenMPI, которые необходимо настроить для определения каких-либо параметров Infiniband? Я уже определил обычные MPI_BIN, LD_LIBRARY_PATH, PATH и т. д. Я знаю, что IntelMPI требует дополнительных переменных.

Infiniband должен стать частью распределения A9 HPC, однако я не уверен, что он нуждается в какой-либо специальной настройке. Когда я запускаю «ifconfig -a», конкретных записей Infiniband нет (я ожидаю увидеть ib0, ib1 и т. д.). У меня есть только eth0, eth1 и вот

Я с нетерпением жду любого совета, который кто-то может предложить.

С уважением!


person Owain1602    schedule 27.04.2017    source источник
comment
infiniband использует другой коммуникационный уровень (глаголы) и не зарегистрирован в ifconfig (только ip-over-infiniband=IPoIB создаст запись в ifconfig). Существует старое руководство по настройке infiniband: pkg-ofed.alioth.debian .org/howto/infiniband-howto.html. Каков ваш точный экземпляр и какая карта используется (проверьте lspci / dmesg / lsmod для карт/модулей mlx и hfi)? Ваша CentOS (ядро и библиотеки) и OpenMPI перечислены как поддерживаемые Azure для Infiniband? (Есть виртуализированный RDMA, и не каждый драйвер его поддержит).   -  person osgx    schedule 28.04.2017
comment
Кажется, что виртуализированный InfiniBand не поддерживает пары общих очередей приема. Что произойдет, если вы добавите следующую опцию mpirun? --mca btl_openib_receive_queues P,128,256,192,128:P,2048,1024,1008,64:P,12288,1024,1008,64:P,65536,1024,1008,64 Это должно превратить все пары общих очередей приема в частные. Ошибка продолжает возникать?   -  person Hristo Iliev    schedule 28.04.2017


Ответы (1)


Как указано в "Репозиторий, содержащий статьи в Центре документации azure.microsoft.com" автора daltskin (разветвлено из удаленного/скрытого Azure/azure-content-internal), на странице https://github.com/daltskin/azure-content/blob/master/articles/virtual-machines/virtual-machines-a8-a9-a10-a11-specs.md#access-to-the-rdma-network «Об экземплярах A8, A9, A10 и A11, требующих больших вычислительных ресурсов» — «Доступ из виртуальных машин Linux A8 и A9»

В настоящее время Azure Linux RDMA поддерживается только с библиотекой Intel MPI 5.

Таким образом, CentOS с OpenMPI 1.10.3, вероятно, не будет работать с этим виртуализированным RDMA от Azure, поскольку OpenMPI 1.10.3 не является «библиотекой Intel MPI 5».

В официальной документации Azure также указывает Intel MPI как поддерживающую RDMA (с SLES 12 SP1 HPC VM): https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/rdma-cluster "Настройте кластер Linux RDMA для запускать приложения MPI" - 2017-3-14

Настроить виртуальную машину

В SLES 12 SP1 HPC VM мы рекомендуем не применять обновления ядра, которые могут вызвать проблемы с драйверами Linux RDMA. Intel MPI: завершите установку Intel MPI на виртуальной машине SLES 12 SP1 HPC, выполнив следующую команду:

 sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm

Если вы хотите настроить кластер на основе одного из образов HPC на основе CentOS в Azure Marketplace вместо SLES 12 для HPC, выполните общие действия, описанные в предыдущем разделе. Обратите внимание на следующие различия при подготовке и настройке виртуальной машины: Intel MPI уже установлен на виртуальной машине, подготовленной из образа HPC на базе CentOS.

Итак, существует проприетарный драйвер ядра Azure Virtual RDMA (Infiniband), предустановленный в образ ВМ SLES 12 из Azure и в образ ВМ CentOS из Azure, а также проприетарный драйвер пространства пользователя (поскольку Infiniband обычно использует обход ядра и общается с hw из пользовательское пространство для операций перемещения данных) только в Intel MPI.

Попробуйте перекомпилировать приложение с предустановленным Intel MPI и запустить его с помощью mpirun/mpiexec Intel MPI. Инструкция по-прежнему находится на том же https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/rdma-cluster:

Настройка Intel MPI Для запуска приложений MPI в Azure Linux RDMA необходимо настроить определенные переменные среды, характерные для Intel MPI. Вот пример сценария Bash для настройки переменных, необходимых для запуска приложения. Измените путь на mpivars.sh, если это необходимо для установки Intel MPI.

#!/bin/bash -x

# For a SLES 12 SP1 HPC cluster

source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh

# For a CentOS-based HPC cluster

# source /opt/intel/impi/5.1.3.181/bin64/mpivars.sh

export I_MPI_FABRICS=shm:dapl

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB
# Setting the variable to shm:dapl gives best performance for some applications
# If your application doesn’t take advantage of shared memory and MPI together, then set only dapl

export I_MPI_DAPL_PROVIDER=ofa-v2-ib0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

export I_MPI_DYNAMIC_CONNECTION=0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

# Command line to run the job

mpirun -n <number-of-cores> -ppn <core-per-node> -hostfile <hostfilename>  /path <path to the application exe> <arguments specific to the application>

#end
person osgx    schedule 27.04.2017