SBATCH --gres=gpu:3

advertisement
Проведение расчетов на кластере HybriLIT с использованием
графических ускорителей NVIDIA
ДОСТУПНЫЕ
ДЛЯ РАСЧЕТОВ ГРАФИЧЕСКИЕ УСКОРИТЕЛИ
На гетерогенном кластере HybriLIT доступны три представителя семейства графических
ускорителей NVIDIA Tesla: Tesla K20X, Tesla K40, Tesla K80. В Таблице 1 представлена
информация об вычислительных узах, оснащенных GPU и в какой очереди планировщика
задач SLURM они доступны для расчетов.
Таблица 1. Доступные для расчетов графические ускорители.
Графический Вычислительные Количество
Общее
ускоритель
узлы
графических количество
ускорителей графических
на одном
ускорителей
узле
Tesla K20X
blade02
1
1
Tesla K40
Tesla K80
blade04
blade05
blade06
blade07
blade08
blade09
Название очереди в
SLURM
interactive
3
12
gpu-k40
2
4
gpu-k80
Отметим, что вычислительный узел blade02, содержащий графический ускоритель NVIDIA
Tesla K20, включен в интерактивную очередь SLURM, для отладки приложений, и имеет
ограничение по времени расчетов один час. Для проведения расчетов необходимо
использовать пакетный режим SLURM с запуском зада через команду sbatch <script-file>.
ЗАПУСК GPU-ПРИЛОЖЕНИЙ
НА КЛАСТЕРЕ В СИСТЕМЕ SLURM
Для запуска приложений, использующих графические ускорители, в пакетном режиме в
системе SLURM необходимо указать в запускаемом скрипт-файле следующие обязательные
параметры/опции:

имя соответствующей очереди, в зависимости от типа GPU (См. Таблицу 1). Например,
при использование в расчетах графических ускорителей NVIDIA Tesla K40 , в скриптфайл надо добавить строку:
#SBATCH -p gpu_k40

количество требуемых графических процессоров (GPU), которое задается опцией
--gres (Generic сonsumable RESources) в виде:
--gres=gpu:<кол-во GPU на одном узле>.
Например, для использования трех GPU на одном узле, в скрипт-файл надо добавить строку:
#SBATCH --gres=gpu:3
Для использования в расчетах большего количества GPU, чем на одном узле, в скрипт-файл
надо добавить две строки:
#SBATCH --nodes=2
#SBATCH --gres=gpu:3
В этом случае будет задействовано два вычислительных узла с тремя графическими
процессорами на каждом, суммарно 6 GPU.
Особенности вычислений с использованием ускорителя NVIDIA K80.
Графический ускоритель Tesla K80 является двухпроцессорным устройством (два
графических процессора в одном устройстве) и обладает почти в два раза более
высокой производительностью и вдвое более широкой полосой пропускания памяти
по сравнению с предшественником - Tesla K40.
Для задействования двух процессоров ускорителя Tesla K80 в скрипт-файле
необходимо указать параметр –gres=gpu:2
#SBATCH --gres=gpu:2
Приложения, использующие один графический процессор.
Ниже, в Таблице 2, представлены общие скрипт-файлы для запуска приложений с использованием
графического ускорителя NVIDIA Tesla K40 и одного процессора ускорителя Tesla K80 в пакетном
режиме в системе SLURM.
Таблица 2. Примеры скрипт-файлов для запуска GPU-приложений.
Тип используемых в расчетах ускорителей NVIDIA Tesla
Tesla K40
#!/bin/sh
# Example for one-GPU applications
#
# Set the partition where the job will run:
#SBATCH -p gpu_k40
#
#Set the number of GPUs per node
#SBATCH --gres=gpu:1
#
#Submit a job for execution:
srun ./testK40
#
# End of submit file
Tesla K80
#!/bin/sh
# Example for one-GPU applications
#
# Set the partition where the job will run:
#SBATCH -p gpu_k80
#
#Set the number of GPUs per node
#SBATCH --gres=gpu:1
#
#Submit a job for execution:
srun ./testK80
#
# End of submit file
Для использования в расчетах нескольких графических процессоров необходим механизм
распределения задач между различными устройствами, в том числе, находящимся на различных
узлах кластера, т.е. возможны следующие случаи:
 несколько GPU на одном вычислительном узле;
 несколько вычислительных узлов с графическими процессорами.
Для эффективного использования нескольких графических ускорителей разрабатываются
гибридные приложения, например, OpenMP+CUDA, MPI+CUDA, MPI+OpenMP+CUDA и т.п. Более
подробную информацию можно найти в проекте GitLab “Parallel features”: https://gitlab-hlit.jinr.ru/
Приложения, использующие несколько графических процессоров (multi-GPU application) на
одном узле.
Пример запуска приложения OpenMP+CUDA, в котором каждому потоку/нити (OpenMP-thread)
ставится в соответствие один графический процессор.
Таблица 3. Примеры скрипт-файлов для запуска multi-GPU приложений на одном
вычислительном узле.
Тип используемых в расчетах ускорителей NVIDIA Tesla
Tesla K40
Tesla K80
#!/bin/sh
#!/bin/sh
# Example for multi-GPU applications,
# Example for multi-GPU applications,
# job running on a single node
# job running on a single node
#
#
# Set the partition where the job will run:
# Set the partition where the job will run:
#SBATCH -p gpu_k40
#SBATCH -p gpu_k80
#
#
#Set the number of GPUs per node
#Set the number of GPUs per node
# (maximum 3 ):
# (maximum 4 - K80=2 x K40):
#SBATCH --gres=gpu:3
#SBATCH --gres=gpu:4
#
#
#Set number of cores per task
#Set number of cores per task
#SBATCH -c 3
#SBATCH -c 4
#
#
#Set OMP_NUM_THREADS to the same
#Set OMP_NUM_THREADS to the same
# value as –c
# value as –c
if [ -n "$SLURM_CPUS_PER_TASK" ]; then
if [ -n "$SLURM_CPUS_PER_TASK" ]; then
omp_threads=$SLURM_CPUS_PER_TASK
omp_threads=$SLURM_CPUS_PER_TASK
else
else
omp_threads=1
omp_threads=1
fi
fi
export OMP_NUM_THREADS=$omp_threads
export OMP_NUM_THREADS=$omp_threads
#
#
#Submit a job for execution:
#Submit a job for execution:
srun ./testK40
srun ./ testK80
#
#
# End of submit file
# End of submit file
Приложения, использующие несколько графических процессоров (multi-GPU application) на
нескольких вычислительных узлах.
Пример запуска приложения MPI+CUDA, в котором каждому процессу ставится в соответствие
один графический процессор, при этом явно указано количество процессов на узел.
Таблица 4. Примеры скрипт-файлов для запуска multi-GPU приложений на нескольких
вычислительных узлах.
Тип используемых в расчетах ускорителей NVIDIA Tesla
Tesla K40
Tesla K80
#!/bin/sh
#!/bin/sh
# Example for GPU applications
# Example for GPU applications
#
#
# Set the partition where the job will run:
# Set the partition where the job will run:
#SBATCH -p gpu_k40
#SBATCH -p gpu_k80
#
#
# Set the number of nodes (maximum 4):
# Set the number of nodes (maximum 2):
#SBATCH --nodes=2
#SBATCH --nodes=2
#
#
#Specifies the number of GPU per node
#Specifies the number of GPU per node
# (maximum 3 ):
# (maximum 4 - K80=2 x K40):
#SBATCH --gres=gpu:3
#SBATCH --gres=gpu:4
#
#
# Set number of MPI tasks
# Set number of MPI tasks
#SBATCH -n 6
#SBATCH -n 8
#
#
#Submit a job for execution:
#Submit a job for execution:
mpirun ./testK40mpiCuda
mpirun ./testK80mpiCuda
#
#
# End of submit file
# End of submit file
Download