Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
man:lsf [22.11.2016 11:33:35] faubert |
man:lsf [19.09.2022 23:00:13] (текущий) Admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== LSF ====== | ====== LSF ====== | ||
- | ===== Что это такое? ===== | + | IBM Platform LSF - мощная платформа управления нагрузкой для требовательных распределенных сред высокопроизводительных вычислений. Она предоставляет исчерпывающий набор интеллектуальных компонентов на основе стратегий, которые позволяют воспользоваться всеми ресурсами вычислительной инфраструктуры и обеспечить оптимальную производительность приложений. |
- | + | ||
- | IBM Platform LSF - это мощная платформа управления нагрузкой для требовательных распределенных сред высокопроизводительных вычислений. Она предоставляет исчерпывающий набор интеллектуальных компонентов на основе стратегий, которые позволяют воспользоваться всеми ресурсами вычислительной инфраструктуры и обеспечить оптимальную производительность приложений. | + | |
===== Разработка скрипта задания ===== | ===== Разработка скрипта задания ===== | ||
- | Задание lsf представляет собой абстрактную сущность, состоящую из набора команд и параметров. Задание представляется пользователю в виде скрипта для оболочки (shell), содержащего требования к ресурсам, атрибуты задания и набор команд, которые необходимо выполнить. Единожды создав скрипт задания, им можно пользоваться столько раз, сколько необходимо, также возможна его модификация. | + | Задание LSF представляет собой абстрактную сущность, состоящую из набора команд и параметров. Оно представляется пользователю в виде скрипта для оболочки (shell), содержащего требования к ресурсам, атрибуты задания и набор команд, которые необходимо выполнить. Единожды создав скрипт задания, им можно пользоваться столько раз, сколько необходимо. Также возможна его модификация. |
- | Задание сначала необходимо поставить в очередь lsf, затем из этой очереди оно будет передано на один узлов для выполнения. Очередей заданий может быть несколько. | + | |
- | Вот пример простого скрипта задания: | + | Запуск задания осуществляется командой **[[ :man:lsf#bsub | bsub]]**. |
+ | |||
+ | ==== Пример скрипта запуска последовательной задачи ==== | ||
<code> | <code> | ||
#!/bin/bash | #!/bin/bash | ||
+ | |||
+ | #BSUB -J MyJob | ||
+ | #BSUB -P MyProject | ||
+ | #BSUB -W 00:20 | ||
+ | #BSUB -n 2 | ||
+ | #BSUB -oo output.log | ||
+ | #BSUB -eo error.log | ||
+ | |||
+ | ./my_program | ||
+ | </code> | ||
+ | ^ Ключ bsub ^ Значение ^ Описание ^ | ||
+ | ^ | **//#!/bin/bash//** | оболочка, использующаяся при выполнении скрипта | | ||
+ | ^ -J | **//MyJob//** | название задачи | | ||
+ | ^ -P | **//MyProject//** | название проекта, в рамках которого запускается задача | | ||
+ | ^ W | **//00:20//** | время на выполнение задачи (часы:минуты) | | ||
+ | ^ -n | **//2//** | количество ядер CPU, необходимое для задачи | | ||
+ | ^ -o | **//output.log//** | имя файла вывода | | ||
+ | ^ -e | **//error.log//** | имя файла ошибок | | ||
+ | ^ | **//./my_program//** | программа для запуска | | ||
+ | |||
+ | |||
+ | ==== Пример скрипта запуска OpenMP-задачи ==== | ||
+ | <code>#!/bin/bash | ||
# | # | ||
- | ##BSUB -P project_code # project code | + | #BSUB -J MyJob |
- | #BSUB -W 00:20 # wall-clock time (hrs:mins) | + | #BSUB -P MyProject |
- | #BSUB -n 8 # number of tasks in job | + | #BSUB -W 00:10 |
- | ##BSUB -R "span[ptile=16]" # run 16 MPI tasks per node | + | #BSUB -n 1 |
- | #BSUB -J test_mpi # job name | + | #BSUB -e error.log |
- | #BSUB -oo output.log # output file name in which %J is replaced by the job ID | + | #BSUB -o output.log |
- | #BSUB -eo error.log # error file name in which %J is replaced by the job ID | + | |
- | ##BSUB -q high_priority # queue | + | |
- | #module load openmpi-x86_64 | + | ./my_openmp_program |
+ | </code> | ||
- | #run the executable | + | | ''export OMP_NUM_THREADS'' | ''4'' | Регулирует кол-во создаваемых потоков для OpenMP-задачи | |
- | mpirun ./mpi | + | |
+ | ==== Пример скрипта запуска MPI-задачи ==== | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | #BSUB -J MyMPIJob | ||
+ | #BSUB -W 00:20 | ||
+ | #BSUB -n 2 | ||
+ | #BSUB -R "span[ptile=1]" | ||
+ | #BSUB -oo output.out | ||
+ | #BSUB -eo error.err | ||
+ | |||
+ | module load mpi/openmpi-x86_64 | ||
+ | mpirun ./my_mpi_program | ||
</code> | </code> | ||
- | **Важно:** Каждая строка представляет собой некоторую директиву LSF, которой задано некоторое значение. Каждая директива в скрипте начинается со знака #. Комментарии обозначаются знаком ##. | ||
- | |||
- | * **Строка 1** является стандартной для любого скрипта с описанием задания, она определяет, какая оболочка используется для исполнения сценария. Оболочка bash используется по умолчанию для запуска сценария, но можно использовать и другую. | ||
- | * **Строки со 3-й по 10-ю** являются директивами LSF. Система будет читать скрипт до тех пор, пока не найдет первую строку, которая не является валидной директивой LSF, и останавливается. Это означает, что оставшаяся часть сценария содержит список команд или задач, которые пользователь желает запустить. | + | | ''#BSUB -n'' | ''2'' | Количество процессов MPI | |
+ | | ''#BSUB -R "span[ptile= ]''|''1''| Директива для задания кол-ва MPI процессов на одном узле | | ||
+ | | ''''|''mpirun ./my_mpi_program''| Программа для запуска MPI-задачи | | ||
+ | |||
+ | ==== Пример скрипта запуска .NET-приложения ==== | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | #BSUB -J dotnet | ||
+ | #BSUB -W 00:20 | ||
+ | #BSUB -n 2 | ||
+ | #BSUB -oo output.out | ||
+ | #BSUB -eo error.err | ||
+ | |||
+ | dotnet run | ||
+ | </code> | ||
- | * **Строка 15** является командой для выполнения, которую пользователь хочет запустить. | + | | ''#BSUB -n'' | ''2'' | Количество используемых ядер процессора | |
- | ==== Список используемых директив: ==== | + | ===== Команды LSF ===== |
- | <code> #BSUB -P <name_of project> </code> Задает название проекта, в рамках которого запускается задача. | + | |
- | <code> #BSUB -W <HH:MM> </code> Задает максимальное время выполнения задачи. В формате (час:мин). | + | |
- | <code> #BSUB -n <number of tasks> </code> Задает общее кол-во задач,которое должно быть запущено. | + | |
- | <code> #BSUB -R "span[ptile=<number of tasks per node>]"</code> Задает кол-во задач, которое будет запущено на каждом узле. | + | |
- | <code> #BSUB -J <name task></code> Задает название задачи. | + | |
- | <code> #BSUB -oo <name of output file> </code> Задает файл стандартного вывода. | + | |
- | <code> #BSUB -eo <name of error file> </code> Задает файл вывода ошибок. | + | |
- | ==== Команда bsub ==== | + | ==== bsub ==== |
- | Отправка заданий на кластер осуществляется с помощью команды bsub. Например, отправка задания sleep, описанного скриптом sleep.lsf, выполняется командой bsub с именем скрипта как параметром: | + | Запуск задачи |
- | <code> bsub < sleep.lsf </code> | + | <code>bsub < MyJob.lsf </code> |
+ | | ''MyJob.lsf'' | скрипт запуска задачи | | ||
- | ==== Команда bjobs ==== | + | ==== bjobs ==== |
- | Просмотреть состояние задач в очереди можно с помощью команды bjobs. | + | Информация о текущих задачах |
+ | <code>bjobs</code> | ||
+ | ==== bhist ==== | ||
+ | Информация обо всех когда-либо запущенных задачах | ||
+ | <code>bhist -a</code> | ||
+ | ==== bkill ==== | ||
+ | Завершение задачи | ||
+ | <code>bkill 12345 </code> | ||
+ | | ''12345'' | номер задачи | |