Отправка заданий с числовыми аргументами в QSUB с использованием Python

Я хочу запустить функцию Python, скажем, my_fun(x1,x2), на разных узлах кластера с SGE (QSUB). Я создал скрипт my_script.py который принимает числовые аргументы из командной строки, поэтому при локальном запуске я бы назвал его

python my_script.py x1 x2

Теперь я хочу отправить этот сценарий в кластер в цикле с различными значениями x1 и x2. Кроме того, чтобы узел имел доступ к python и установленным модулям, мне нужно запустить module load Python/2.7 на узле перед вызовом скрипта Python через QSUB.

Это кажется довольно простым и типичным вариантом использования, но я не могу найти простой способ сделать это из Python. Переход назад и вперед между BASH и Python кажется немного неуклюжим.

2 ответа

Решение

Это более или менее делает то, что я ищу:

https://gist.github.com/timflutre/a9085660271bd059f71c

import sys
import subprocess

job_param1 = 12.5
job_param2 = 5.0
jobName = "python my_script.py %f %f" % (job_param1,job_param2)
cmd = "module load Python/2.7; sleep 0.2; %s" % jobName
echoArgs = ["echo", "-e", "'%s'" % cmd]
print(" ".join(echoArgs))
qsubArgs = ["qsub","-cwd"]
print(" ".join(qsubArgs))

wholeCmd = " ".join(echoArgs) + " | " + " ".join(qsubArgs)
out = subprocess.Popen(wholeCmd, shell=True, stdout=subprocess.PIPE)
out = out.communicate()[0]

jobId = out.split()[2]
print jobId

Я предлагаю вам разделить задание на несколько независимых заданий в зависимости от количества имеющихся у вас узлов.

Для каждого узла / ядра создайте папку с файлом, содержащим список параметров, которые этот обработчик должен обработать. Затем в python напишите скрипт, который читает файл и вызывает ваш скрипт (возможно, используя многопроцессорный модуль для поддержки многоядерности).

РЕДАКТИРОВАТЬ:

Если вы хотите передать дополнительные параметры через qsub, вы можете вызвать qsub с аргументами, которые можно передать в ваш скрипт:

qsub -F "myarg1 myarg2 myarg3=myarg3value" myscript.sh

Вы можете найти эту документацию здесь

Другие вопросы по тегам