Я пытаюсь запустить свой код julia на нескольких узлах кластера, который использует Moab и Torque для планировщика и диспетчера ресурсов. В интерактивном сеансе, где я запросил 3 узла, я загружаю модули julia и openmpi и запускаю:
mpirun -np 72 --hostfile $PBS_NODEFILE -display-allocation julia --project=. "./estimation/test.jl"
mpirun успешно распознает мои 3 узла, поскольку отображает:
====================== ALLOCATED NODES ======================
comp-bc-0383: slots=24 max_slots=0 slots_inuse=0 state=UP
comp-bc-0378: slots=24 max_slots=0 slots_inuse=0 state=UNKNOWN
comp-bc-0372: slots=24 max_slots=0 slots_inuse=0 state=UNKNOWN
=================================================================
Однако после этого он возвращает сообщение об ошибке
--------------------------------------------------------------------------
mpirun was unable to find the specified executable file, and therefore
did not launch the job. This error was first reported for process
rank 48; it may have occurred for other processes as well.
NOTE: A common cause for this error is misspelling a mpirun command
line parameter option (remember that mpirun interprets the first
unrecognized command line token as the executable).
Node: comp-bc-0372
Executable: /opt/aci/sw/julia/1.5.3_gcc-4.8.5-ips/bin/julia
--------------------------------------------------------------------------
Что может быть возможной причиной этого? Это потому, что у него проблемы с доступом к julia с других узлов? (Я думаю, это так, потому что код работает до тех пор, пока -np X, где x <= 24, что является количеством слотов для одного узла; как только x >= 25, он не запускается)
@GillesGouaillardet Еще раз спасибо за комментарий. В настоящее время я проверяю администратора в NFS. Извините, если я делаю что-то глупое, но я также пробовал ssh <other node> module load julia
перед командой mpirun
, но это все равно не работает. Как бы вы «развернули исполняемый файл вручную»? Это как-то связано с LD_LIBRARY_PATH
?
Вручную скопируйте двоичный файл и его зависимости в локальную файловую систему на всех узлах.
Может быть, это поможет hpc.uni.lu/old/users/howtos/UsingMPIstacksWithModules.html . Короче говоря, вы должны экспортировать переменные с помощью -x PATH -x LD_LIBRARY_PATH
, и вы можете попробовать, сработало ли это с which julia
вместо julia [...] test.jl
Спасибо вам обоим. Я попробовал метод @Oskar, и он сработал! Я также смог запустить julia. Он не будет правильно читать мой test.jl, но я думаю, что мне следует немного больше поработать над добавлением моего рабочего каталога julia в оба пути.
Я напишу это как ответ тогда
Вот хороший мануал по работе с модулями и mpirun
. Использование MPIstacksWithModules
Подводя итог тому, что написано в инструкции:
It should be highlighted that modules are nothing else than a structured way to manage your environment variables; so, whatever hurdles there are about modules, apply equally well about environment variables.
Что вам нужно, так это экспортировать переменные среды в команду mpirun
с помощью -x PATH -x LD_LIBRARY_PATH
. Чтобы увидеть, сработало ли это, вы можете запустить
mpirun -np 72 --hostfile $PBS_NODEFILE -display-allocation -x PATH -x LD_LIBRARY_PATH which julia
Кроме того, вам следует подумать о том, чтобы указать полный путь к файлу, который вы хотите запустить, поэтому /path/to/estimation/test.jl
вместо ./estimation/test.jl
, поскольку ваш рабочий каталог не одинаков на каждом узле. (Вообще всегда безопаснее использовать целые пути).
Используя целые пути, вы также должны иметь возможность использовать /path/to/julia
(это результат which julia
) вместо только julia
, таким образом вам не нужно экспортировать переменные среды.
исполняемый файл (и его зависимости) должен быть доступен на узлах все. Поэтому, если вы не используете общую файловую систему (например, NFS), вам необходимо вручную развернуть исполняемый файл (и его зависимости) на всех узлах.