Как использовать sbatch в SLURM с файлом конфигурации

Я хотел запустить сценарий python с помощью sbatch, однако кажется, что единственный способ запустить сценарий python с помощью sbatch - это иметь сценарий bash, который затем запускает сценарий python. Как и в случае batch_main.sh:

#!/bin/bash
#SBATCH --job-name=python_script

arg=argument

python python_batch_script.sh

затем запускается:

sbatch batch_main.sh

Проблема в том, что я хотел бы иметь отдельный файл конфигурации для аргументов (поскольку обычно это не одно число или аргумент), а также иметь возможность использовать параметр массива. Кроме того, я обычно запускаю несколько разных пакетных заданий одновременноразными конфигурациями), поэтому было бы неплохо, если бы изменение файла конфигурации не привело к различные запуски sbatch мешают друг другу (поскольку, если задание помещается в очередь, а затем файл конфигурации изменяется позже, он будет запускать самый последний файл конфигурации, а не копию конфигурации, когда я запускал sbatch). Чтобы обойти эту проблему, я обнаружил, что когда я запускаю сценарий sbatch, SLURM фактически копирует сценарий отправки в свою внутреннюю базу данных (я обнаружил это после того, как спросил: Изменение bash-скрипта, отправляемого в sbatch в slurm во время выполнения - плохая идея?). Поэтому я фактически решил жестко закодировать конфигурацию в сценарии отправки bash (по сути, сделав сценарий отправки файлом конфигурации). Таким образом, я просто редактирую сценарий отправки, а затем запускаю файл. Однако я бы хотел прекратить это, поскольку это заставляет меня писать на bash, чего я хочу избежать любой ценой.

В идеале я бы хотел запустить sbatch, который напрямую запускает python.

Поскольку это могло быть невозможно, я хотел узнать, какие еще существуют варианты решения этой проблемы. Например, возможно ли, чтобы slurm скопировал другой файл (например, файл конфигурации python) в свою внутреннюю базу данных, чтобы при постановке в очередь задания выполнялось задание, которое я точно хочу запустить? (обратите внимание, что запуск задания sbatch с последующим изменением файла конфигурации - это не способ сделать это, так как это может вызвать проблемы при изменении файла конфигурации, slrum будет читать самую последнюю копию конфигурации, а не копию конфигурации когда работа была запущена). Или какие еще у меня есть варианты? Я действительно застрял в написании bash, или я могу сделать что-нибудь еще для работы с конфигурациями в Python, а не какой-нибудь другой странный взлом?

В общем, я также хотел знать, что люди делают для этого в реальном мире или какие хорошие практики / стандарты для этого.


person Charlie Parker    schedule 27.08.2016    source источник
comment
Вы ведь знаете, что линию shebang можно изменить, верно? Например, #!/bin/env python является допустимой строкой shebang для sbatch сценариев, если предполагается, что сценарий написан на python.   -  person Christopher Bottoms    schedule 01.02.2017


Ответы (1)


Скрипты Python являются допустимыми файлами для отправки при условии, что они начинаются с python shebang (обычно #!/usr/bin/env python).

Например:

#!/usr/bin/env python
#SBATCH --time=...
#SBATCH --partition=...

import sys
jobid=sys.environ["SLURM_JOB_ID"]
print "Hello World from job %s" % jobid

Обратите внимание, что если ваш скрипт imports настраивает модули, вам нужно будет установить PYTHONPATH, даже если они находятся в текущем каталоге.

person damienfrancois    schedule 26.08.2017