Максимизация производительности расчетов в ANSYS Mechanical

Описание процесса запуска задания на кластере

После постановки задания в очередь, командой qsub, при наличии свободных ресурсов, планировщик запускает задачу на выполнение. При этом под задачу резервируется запрошенное количество вычислительных узлов (например если в файле задания указано #PBS -l nodes=64:ppn=8, то резервируется 64 узла). На первый узел, из списка зарезервированных узлов, передается задание, при этом в среде выполнения данного узла, планировщиком устанавливаются некоторые переменные среды. Полный список можно посмотреть в документации менеджера ресурсов TORQUE.

Нас интересует переменная $PBS_NODEFILE. В ней содержится путь к файлу со списком всех зарезервированных узлов, который создается планировщиком на первом узле. Его формат следующий (при #PBS -l nodes=2:ppn=2):

n168
n168
n167
n167

Т.е. если указано ppn более еденицы, то имя узла в файле дублируется, это связано с особенностями запуска mpi программ.

Затем последовательно запускаются команды указанные в файле задания. Решатель ANSYS Mechanical работает таким образом, что использует запускающий узел для хранения временных (scratch) данных во время расчета. Поэтому на этом узле должно быть в 2-3 раза больше оперативной памяти чем на остальных вычислительных узлах, участвующих в распределенном расчете.

Каждый процесс решателя создает во время расчета временные файлы bat, err, log, page. Эти файлы создаются в рабочей директории, задаваемой ключом решателя -dir. Если ключ -dir не указывать, то по умолчанию все процессы решателя, до 8-го, используют  директорию из корой запустилось задание. Например, при запуске задания из домашней директории пользователя /home/user, временные данные будут сохраняться в нее же. Если запустить задание например из директории /home/user/dir1 в распределенном режиме более чем на 8 процессов, то временные файлы 9-го и более процессов, будут сохраняться в домашней директории /home/user.

Директория /home смонтирована на вычислительных узлах с помощью сетевой файловой системы NFS поверх сети хранения данных, построенной на Gigabit Ethernet, что ограничивает производительность расчета, так как решатель ANSYS Mechanical интенсивно использует подсистему хранения данных кластера. Использование параллельной файловой системы GPFS существенно увеличивает производительность расчета и  ее использование крайне рекомендуется в задачах с интенсивным вводом-выводом данных. Как использовать GPFS описано тут.

Тем не менее, максимизировать производительность расчетов ANSYS Mechanical позволяет использование жестких дисков, установленных на определенных вычислительных узлах, для хранения временных данных чтобы не предавать их по сети (через NFS или GPFS). Для использования этого способа, ниже приведен файл задания, который можно использовать в качестве шаблона (номеров строк в файле на кластере быть не должно!):

1. #!/bin/bash
2. #PBS -N ansysmech-tmp
2_ #PBS -A [код проекта]
3. #PBS -q ansys
4. #PBS -l nodes=1:ppn=1:bigmem+31:ppn=1:tmp
5. #PBS -l walltime=01:00:00
6. #PBS -j oe
7. cd $PBS_O_WORKDIR && export MPI_REMSH=/usr/bin/ssh
8. HOSTLIST=`uniq -c $PBS_NODEFILE | awk '{ print $2":"$1 }' | paste -s -d ':'`
9. JOBNAME=file
10. cp $PBS_O_WORKDIR/$JOBNAME.{db,lgw} /tmp
11. /ansys_inc/v130/ansys/bin/ansys130 -dis -dir /tmp -p aa_r -j $JOBNAME -b nolist -machines ${HOSTLIST} -i $JOBNAME.lgw > $JOBNAME.txt
12. cp /tmp/$JOBNAME.rst $PBS_O_WORKDIR

Описание ключевых строк:

4. Команда препроцессору зарезервировать 1 узел с большим объемом оперативной памяти и 31 узел, по 1 ядру на узел, с ресурсом tmp (смонтированный жесткий диск в директорию /tmp).

9. Задается переменная  JOBNAME содержащая имя задания решателя. С помощью нее можно легко создавать новые файлы задания, просто скопировав ее и изменив значение. Здесь необходимо чтобы файлы базы данных и файл списка команд имели имена file.db и file.lgw

10. Команда cp копирует файлы $JOBNAME.db и $JOBNAME.lgw в директорию /tmp первого узла, зарезервированного для расчета планировщиком.

11. Запускается решатель с указанием рабочей директории -dir /tmp, именем задания -j $JOBNAME, входным командным файлом -i $JOBNAME.lgw и выводом сообщений в файл $JOBNAME.txt. Также используется MPI библиотека фирмы Intel (-mpi intelmpi -usessh).

12. Копируется файл результата расчета .rst из директории /tmp первого узла в директорию запуска задания.

Использование данного метода позволило сократить время расчета на тестовой задаче практически в 3 раза.