Как разбить наборы данных на 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. до недавнего времени (хотя тот, у которого есть политика очереди, которая нарушает мое правило).