Хост-файл с Mpirun на мультиузле с slurm

У меня есть два исполняемых файла, которые я хотел бы запустить следующим образом: Для каждого узла я хочу запустить N-1 процессов для exe1 и 1 exe2

В предыдущей системе slurm, которая работала следующим образом:

#!/bin/bash -l
#SBATCH --job-name=XXX
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --mem=120GB
#SBATCH --time=04:00:00



module purge
module load intel/compiler/2020.1.217
module load openmpi/intel/4.0.5_2020.1.217


scontrol show hostname $SLURM_JOB_NODELIST | perl -ne 'chomb; print "$_"x1'> myhostall
scontrol show hostname $SLURM_JOB_NODELIST | perl -ne 'chomb; print "$_"x1'>>myhostall

mpirun --mca btl_openib_allow_ib 1 --report-bindings -hostfile myhostall -np 2 ./exe1 : -np 2 ./exe2

В этом примере у меня есть два узла с двумя задачами/узлом. Таким образом, exe1 должен иметь 1 ранг от каждого узла и аналогично для exe2.

Если я скажу cat myhostall:

come-0-12
come-0-13
come-0-12
come-0-13

Но в моем коде при вводе имени процессора с помощью MPI_GET_PROCESSOR_NAME получается, что exe1 оба ранга печатают come-0-12, а для exe2 оба печатают come-0-13.

Так вот вопрос:

Как указать количество задач N на каждый узел для exe1 и количество задач M на каждый узел для exe2

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 621
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете указать 2 хост-файла, по одному на каждый exe

например

mpirun -np 2 --hostfile hostfile_1 exe1 : -np 2 --hostfile hostfile_2 exe2

В каждом хост-файле вы можете указать, сколько слотов будет использовать каждый исполняемый файл на каждом узле.

например (подробнее см. https://www.open-mpi.org/faq/?category=running#mpirun-hostfile), если вы хотите, чтобы и exe1, и exe2 имели по 1 процессору от каждого узла , hostfile_1 и hostfile_2 могут быть идентичными или даже одним и тем же файлом:

node1 slots=1
node2 slots=1

Однако, если hostsfile_1 и hostfile_2 содержат одни и те же узлы, mpirun, скорее всего, перераспределит задачи так, как «считает» более оптимальным.

Другой подход — указать тот же файл hosts и использовать директиву «—map-by node» (поведение по умолчанию — «—map-by slot»), например:

mpirun -hostfile hosts.txt -np 2 --map-by node ./exe1 : -hostfile hosts.txt -np 2 --map-by node ./exe2

где hosts.txt содержит:

node1 slots=2
node2 slots=2

что дает в моем случае (OpenMPI-4.0.4)

EXE1 from processor node1, rank 0 out of 4 processors
EXE1 from processor node2, rank 1 out of 4 processors
EXE2 from processor node1, rank 2 out of 4 processors
EXE2 from processor node2, rank 3 out of 4 processors

Также потенциально можно использовать ранговые файлы (если вы используете OpenMPI) для более явной привязки задач к конкретному процессору, но это может быть немного громоздко...

Спасибо! - Но не могли бы вы привести пример того, как в этом случае будет выглядеть hostfile

ATK 30.12.2020 17:31

добавлен пример файла хоста и ссылки на часто задаваемые вопросы по OpenMPI

Alex P 30.12.2020 21:42

Другие вопросы по теме