Параллельная обработка в кондоре
У меня есть Java-программа, которая будет обрабатывать 800 изображений.
Я решил использовать Condor в качестве платформы для распределенных вычислений, стремясь разделить эти изображения на доступные узлы -> обработать -> объединить результаты обратно ко мне.
Скажем, у меня есть 4 узла. Я хочу разделить обработку на 200 изображений на каждом узле и объединить конечный результат со мной.
Я попытался выполнить его в обычном режиме, представив его как Java-программу и указав требования = Machine == .. (с указанием всех узлов). Но это не похоже на работу.
Как я могу разделить обработку и выполнить ее параллельно?
1 ответ
HTCondor определенно может помочь вам, но вам, возможно, придется немного поработать самостоятельно:-)
На ум приходят два возможных подхода: массивы заданий и приложения DAG.
Массивы заданий: как видно из примера 5 в кратком руководстве HTCondor, вы можете использовать queue
Команда подать более 1 задания. Например, queue 800
В нижней части вашего файла заданий будет отправлено 800 заданий в ваш пул HTCondor.
В этом случае люди организуют данные для обработки с использованием соглашения об имени файла и используют это соглашение в файле задания. Например, вы можете переименовать ваши изображения как img_0.jpg, img_1.jpg, ... img_799.jpg
(возможно, используя символические ссылки, а не переименовывая фактические файлы), а затем используйте файл задания по следующим строкам:
Executable = /path/to/my/script
Arguments = /path/to/data/dir/img_$(Process)
Queue 800
Когда 800 рабочих мест, $(Process)
автоматически присваивается значение соответствующего идентификатора процесса (т. е. целое число от 0 до 799). Это означает, что ваш код подберет правильное изображение для обработки.
DAG: Другой подход - организовать обработку в простой DAG. В этом случае у вас может быть сценарий предварительной обработки (SCRIPT PRE
запись в файле DAG) организация входных данных (возможно, создание символических ссылок с соответствующим названием). Реальная работа была бы такой же, как в примере выше.