Мониторинг использования ЦП имитации OpenFOAM, выполняемой в задании на слэм
Я запускаю симуляцию OpenFOAM на кластере. Я использовал метод разложения Скотч и мой decomposeParDict
выглядит так:
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object decomposeParDict;
}
numberOfSubdomains 6;
method scotch;
checkMesh
а также decomposePar
закончить без проблем. Я назначил 6 узлов в грязи
srun -N6 -l sonicFoam
и решатель работает без ошибок.
Проблема в том, что скорость решения не улучшена по сравнению с непараллельным моделированием, которое я запускал ранее. Я хочу отслеживать использование процессора, чтобы увидеть, все ли 6 узлов, которые я назначил, загружены одинаково. squeue --user=foobar
команда вернуть jobNumber
и список назначенных узлов (NODELIST(REASON)
) который выглядит так:
foo,bar[061-065]
от sinfo
Команда эти узлы оба в debug
а также main*
PARTITION
с (что я понятия не имею, что это значит!).
Этот пост говорит, что вы можете использовать sacct
или же sstat
Команды для мониторинга процессорного времени и использования памяти для выполнения задания. Но когда я бегу
sacct --format="CPUTime,MaxRSS"
это дает мне:
CPUTime MaxRSS
---------- ----------
00:00:00
00:00:00
00:07:36
00:00:56
00:00:26
15:26:24
чего я не могу понять. И когда я указываю номер работы по
sacct --job=<jobNumber> --format="UserCPU"
Возвращение пусто. Так что мои вопросы
- Моя симуляция загружает все узлы или она работает на одном или двух, а остальные свободны?
- я запускаю правильные команды? если да, что означают эти цифры? как они представляют загрузку процессора на узел?
- Если нет, то какие права
--format="..."
с дляsacct
и / илиsstat
(или, может быть, другие команды slurm), чтобы получить загрузку / загрузку процессора?
PS1. Я следовал за компиляцией OpenFOAM, следуя официальным инструкциям. Я ничего не делал с OpenMPI
И его mpicc
Компилятор по этому вопросу, хотя.
PS2 Для тех из вас, кто может оказаться здесь. Может быть, я запускаю неправильную команду, по-видимому, сначала можно выделить некоторые ресурсы:
srun -N 1 --ntasks-per-node=7 --pty bash
где 7 - количество ядер, которые вы хотите, а bash - просто имя. и затем запустите решатель с:
mpirun -np 7 sonicFoam -parallel -fileHandler uncollated
Я еще не уверен, хотя.
2 ответа
Ты можешь использовать
sacct --format='jobid,AveCPU,MinCPU,MinCPUTask,MinCPUNode'
проверить, все ли процессоры были активны. сравнить AveCPU
(среднее время процессора всех задач в работе) с MinCPU
(минимальное время процессора всех задач в работе). Если они равны, все 6 задач (вы запросили 6 узлов, неявно по 1 задаче на узел) работали одинаково. Если они не равны или даже MinCPU
ноль, то некоторые задачи ничего не делали.
Но в вашем случае, я полагаю, вы заметите, что все задачи усердно работали, но все они делали одно и то же.
Помимо замечания по поводу -parallel
пометка @timdykes, вы также должны знать, что запуск задания MPI с sun
требует, чтобы OpenMPI был скомпилирован с поддержкой Slurm. Во время установки OpenFOAM он установил собственную версию OpenMPI, и если файл /usr/include/slurm/slurm.h
или же /usr/include/slurm.h
существует, тогда, вероятно, была скомпилирована поддержка Slurm. Но самым безопасным, вероятно, является использование mpirun
,
Но для этого вам нужно будет сначала запросить выделение у Slurm с помощью sbatch
или же salloc
,
Вы пытались запустить с аргументом -parallel? Все примеры OpenFOAM онлайн используют этот аргумент при выполнении параллельного задания, одним примером является официальное руководство по параллельному запуску.
srun -N $NTASKS -l sonicFOAM -parallel
Кроме того, я видел, что вы сами создали openfoam. Вы проверили, предоставили ли администраторы кластера для него модуль? Обычно вы можете запустить module avail
чтобы увидеть список доступных модулей, а затем module load moduleName
если есть существующий модуль OpenFOAM. Это полезно, поскольку вы, вероятно, можете доверять его построению со всеми правильными параметрами и автоматически настраивать ваш $PATH и т. Д.