Как заставить Condor отправлять задания только на машины в кластере, на которых установлена ​​"numpy"?

Я только что понял, как отправлять задания на обработку на компьютерах в кластере с помощью Condor. Поскольку у нас много машин, и не каждая из них настроена одинаково, мне было интересно:

Можно ли сказать condor только о том, что я отправляю мои задания (скрипты python) на машины, на которых установлена ​​numpy, поскольку мой скрипт зависит от этого пакета?

2 ответа

Как и любой другой атрибут машины, вам просто нужно объявить его в классе машины, и тогда ваши работы потребуют этого.

Чтобы рекламировать его в классе компьютера, вы можете либо жестко закодировать его в конфигурационный файл condor каждой машины, добавив что-то вроде этого:

has_numpy = True
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY

... или, что еще лучше, вы можете сказать Кондору, чтобы он динамически обнаруживал его во время выполнения с помощью скрипта и объявлял результат через зацепку startd classad. Для этого установите простой has_numpy скрипт на каждой машине примерно так:

#!/usr/bin/env python
try:
   import numpy
except ImportError:
   print "has_numpy = False"
else:
   print "has_numpy = True"

... и затем скажите Condor запускать его каждые пять минут и вставлять результаты в класс startd, добавив в файл конфигурации condor следующее:

HASNUMPY = /usr/libexec/condor/has_numpy
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY)
STARTD_CRON_HASNUMPY_PERIOD = 300

... и затем (после перенастройки) ваши машины будут динамически определять и сообщать, установлен ли numpy и доступен ли он для сценариев Python.

Затем вам просто нужно добавить соответствующее требование к файлам отправки задания, например:

Requirements = (has_numpy == True)

... и ваша работа будет выполняться только на машинах, на которых установлена ​​numpy.

Тебе нужно? Согласно руководству кондора:

Condor не требует учетной записи (логин) на машинах, где он запускает работу. Condor может сделать это благодаря своей технологии удаленного системного вызова, которая перехватывает вызовы библиотеки для таких операций, как чтение или запись из файлов на диске. Вызовы передаются по сети для выполнения на машине, где задание было отправлено.

Для меня это означает, что если на машине, отправляющей задание, установлена ​​numpy, она должна работать.

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