Как разбить наборы данных на n блоков, чтобы сократить время очереди на суперкомпьютере?

У меня есть набор данных, который включает в себя около 2000 цифровых изображений. Я использую MATLAB для выполнения цифровой обработки изображений, чтобы извлечь деревья из изображений. Сценарий в настоящее время настроен для обработки изображений в parfor петля на n ядер.

Соревнование:
У меня есть доступ к времени обработки на управляемом университетом суперкомпьютере с примерно 10000 вычислительных ядер. Если я отправляю всю работу для обработки, я возвращаюсь в очередь задач, и настольный компьютер может завершить работу до того, как обработка начнется на суперкомпьютере. Сотрудники службы поддержки сказали мне, что разбиение набора данных 2000 файлов на ~100 файловых заданий значительно сократит время очереди задач. Какой метод я могу использовать для параллельного выполнения задач с помощью parfor цикл, при подаче 100 файлов (из 2000) одновременно?

Мой сценарий структурирован следующим образом:

datadir = 'C:\path\to\input\files'
files = dir(fullfile(datadir, '*.tif'));
fileIndex = find(~[files.isdir]);

parfor ix = 1:length(fileIndex) 
     % Perform the processing on each file;
end

2 ответа

Решение

Подобно моему комментарию, я бы спонтанно предложил что-то вроде

datadir = 'C:\path\to\input\files'
files = dir(fullfile(datadir, '*.tif'));
files = files(~[files.isdir]);

% split up the data
N = length(files); % e.g. 20000
jobSize = 100;
jobFiles = mat2cell(files, [jobSize*ones(1,floor(N/jobSize)), mod(N,jobSize)]);
jobNum = length(jobFiles);

% Provide each job to a worker
parfor jobIdx = 1:jobNum
    thisJob = jobFiles{jobIdx}; % this indexing allows matlab for transfering
                                % only relevant file data to each worker

    for fIdx = 1:length(thisJob)
        thisFile = thisJob(fIdx);
        % Perform the processing on each file;
        thisFile.name
    end
end

Позвольте мне ответить на вопрос более высокого уровня о разделении заданий, чтобы оптимизировать их для очередей суперкомпьютеров. Я считаю, что хорошим практическим правилом является отправка заданий размером sqrt (p) на машину с p процессорами, если целью является максимизация пропускной способности. Конечно, это предполагает относительно сбалансированную политику очереди, которая не реализована на всех сайтах. Но большинство университетов не отдают предпочтение крупным работам так, как это делают учреждения DOE, поэтому это правило должно работать в вашем случае.

У меня нет математической теории, лежащей в основе моего эмпирического правила, но я был большим пользователем суперкомпьютера DOE в течение последних 8 лет (лично более 100 миллионов часов, владелец выделения для 500 миллионов+), и я работал на одном из сайтов DOE. до недавнего времени (хотя тот, у которого есть политика очереди, которая нарушает мое правило).

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